Rename project

This commit is contained in:
Will Hunt 2021-11-22 16:02:07 +00:00
parent c5541ed877
commit 40a75fa4d3
29 changed files with 132 additions and 597 deletions

504
Cargo.lock generated
View File

@ -2,45 +2,18 @@
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3 version = 3
[[package]]
name = "aho-corasick"
version = "0.7.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
dependencies = [
"memchr",
]
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.0.1" version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "bytemuck" name = "bytemuck"
version = "1.7.2" version = "1.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b" checksum = "72957246c41db82b8ef88a5486143830adeb8227ef9837740bdec67724cf2c5b"
[[package]]
name = "bytes"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "contrast" name = "contrast"
version = "0.1.0" version = "0.1.0"
@ -51,12 +24,6 @@ dependencies = [
"rgb", "rgb",
] ]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]] [[package]]
name = "form_urlencoded" name = "form_urlencoded"
version = "1.0.1" version = "1.0.1"
@ -67,155 +34,6 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "futures-channel"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
[[package]]
name = "futures-macro"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb"
dependencies = [
"autocfg",
"proc-macro-hack",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "futures-sink"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
[[package]]
name = "futures-task"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
[[package]]
name = "futures-util"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
dependencies = [
"autocfg",
"futures-core",
"futures-macro",
"futures-task",
"pin-project-lite",
"pin-utils",
"proc-macro-hack",
"proc-macro-nested",
"slab",
]
[[package]]
name = "h2"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7fd819562fcebdac5afc5c113c3ec36f902840b70fd4fc458799c8ce4607ae55"
dependencies = [
"bytes",
"fnv",
"futures-core",
"futures-sink",
"futures-util",
"http",
"indexmap",
"slab",
"tokio",
"tokio-util",
"tracing",
]
[[package]]
name = "hashbrown"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e"
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "http"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
dependencies = [
"bytes",
"http",
"pin-project-lite",
]
[[package]]
name = "httparse"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
[[package]]
name = "httpdate"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421"
[[package]]
name = "hyper"
version = "0.14.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "436ec0091e4f20e655156a30a0df3770fe2900aa301e548e08446ec794b6953c"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"h2",
"http",
"http-body",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]] [[package]]
name = "idna" name = "idna"
version = "0.2.3" version = "0.2.3"
@ -227,61 +45,12 @@ dependencies = [
"unicode-normalization", "unicode-normalization",
] ]
[[package]]
name = "indexmap"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc633605454125dec4b66843673f01c7df2b89479b32e0ed634e43a91cff62a5"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "itoa" name = "itoa"
version = "0.4.8" version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4" checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.108"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8521a1b57e76b1ec69af7599e75e38e7b7fad6610f037db8c79b127201b5d119"
[[package]]
name = "lock_api"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [
"cfg-if",
]
[[package]] [[package]]
name = "matches" name = "matches"
version = "0.1.9" version = "0.1.9"
@ -289,52 +58,20 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f" checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
[[package]] [[package]]
name = "matrix-github" name = "matrix-hookshot"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"contrast", "contrast",
"futures-util",
"hyper",
"napi", "napi",
"napi-build", "napi-build",
"napi-derive", "napi-derive",
"rgb", "rgb",
"routerify",
"serde", "serde",
"serde_derive", "serde_derive",
"serde_json", "serde_json",
"tokio",
"url", "url",
] ]
[[package]]
name = "memchr"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "mio"
version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
dependencies = [
"libc",
"log",
"miow",
"ntapi",
"winapi",
]
[[package]]
name = "miow"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "napi" name = "napi"
version = "1.7.10" version = "1.7.10"
@ -342,10 +79,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9050238b713b3c5dd5ae1613da1ccefe4061c03992f9e9bbe43b7d473ba4bd3c" checksum = "9050238b713b3c5dd5ae1613da1ccefe4061c03992f9e9bbe43b7d473ba4bd3c"
dependencies = [ dependencies = [
"napi-sys", "napi-sys",
"once_cell",
"serde", "serde",
"serde_json", "serde_json",
"tokio",
"winapi", "winapi",
] ]
@ -372,15 +107,6 @@ version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67cf20e0081fea04e044aa4adf74cfea8ddc0324eec2894b1c700f4cafc72a56" checksum = "67cf20e0081fea04e044aa4adf74cfea8ddc0324eec2894b1c700f4cafc72a56"
[[package]]
name = "ntapi"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "num-traits" name = "num-traits"
version = "0.2.14" version = "0.2.14"
@ -390,77 +116,12 @@ dependencies = [
"autocfg", "autocfg",
] ]
[[package]]
name = "num_cpus"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [
"hermit-abi",
"libc",
]
[[package]]
name = "once_cell"
version = "1.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "parking_lot"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
dependencies = [
"instant",
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
dependencies = [
"cfg-if",
"instant",
"libc",
"redox_syscall",
"smallvec",
"winapi",
]
[[package]] [[package]]
name = "percent-encoding" name = "percent-encoding"
version = "2.1.0" version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project-lite"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "proc-macro-hack"
version = "0.5.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
[[package]]
name = "proc-macro-nested"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086"
[[package]] [[package]]
name = "proc-macro2" name = "proc-macro2"
version = "1.0.32" version = "1.0.32"
@ -479,32 +140,6 @@ dependencies = [
"proc-macro2", "proc-macro2",
] ]
[[package]]
name = "redox_syscall"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
dependencies = [
"bitflags",
]
[[package]]
name = "regex"
version = "1.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.6.25"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
[[package]] [[package]]
name = "rgb" name = "rgb"
version = "0.8.29" version = "0.8.29"
@ -514,31 +149,12 @@ dependencies = [
"bytemuck", "bytemuck",
] ]
[[package]]
name = "routerify"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0c6bb49594c791cadb5ccfa5f36d41b498d40482595c199d10cd318800280bd9"
dependencies = [
"http",
"hyper",
"lazy_static",
"percent-encoding",
"regex",
]
[[package]] [[package]]
name = "ryu" name = "ryu"
version = "1.0.5" version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]] [[package]]
name = "serde" name = "serde"
version = "1.0.130" version = "1.0.130"
@ -567,37 +183,6 @@ dependencies = [
"serde", "serde",
] ]
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
dependencies = [
"libc",
]
[[package]]
name = "slab"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5"
[[package]]
name = "smallvec"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
[[package]]
name = "socket2"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516"
dependencies = [
"libc",
"winapi",
]
[[package]] [[package]]
name = "syn" name = "syn"
version = "1.0.81" version = "1.0.81"
@ -624,83 +209,6 @@ version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
[[package]]
name = "tokio"
version = "1.14.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144"
dependencies = [
"autocfg",
"bytes",
"libc",
"memchr",
"mio",
"num_cpus",
"once_cell",
"parking_lot",
"pin-project-lite",
"signal-hook-registry",
"tokio-macros",
"winapi",
]
[[package]]
name = "tokio-macros"
version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tokio-util"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"log",
"pin-project-lite",
"tokio",
]
[[package]]
name = "tower-service"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
[[package]]
name = "tracing"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
dependencies = [
"cfg-if",
"pin-project-lite",
"tracing-core",
]
[[package]]
name = "tracing-core"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
dependencies = [
"lazy_static",
]
[[package]]
name = "try-lock"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
[[package]] [[package]]
name = "unicode-bidi" name = "unicode-bidi"
version = "0.3.7" version = "0.3.7"
@ -734,16 +242,6 @@ dependencies = [
"percent-encoding", "percent-encoding",
] ]
[[package]]
name = "want"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
dependencies = [
"log",
"try-lock",
]
[[package]] [[package]]
name = "winapi" name = "winapi"
version = "0.3.9" version = "0.3.9"

View File

@ -1,5 +1,5 @@
[package] [package]
name = "matrix-github" name = "matrix-hookshot"
version = "0.1.0" version = "0.1.0"
edition = "2021" edition = "2021"

View File

@ -18,15 +18,15 @@ RUN yarn build
# Stage 1: The actual container # Stage 1: The actual container
FROM node:16 FROM node:16
COPY --from=builder /src/lib/ /bin/matrix-github/ COPY --from=builder /src/lib/ /bin/matrix-hookshot/
COPY --from=builder /src/public/ /bin/matrix-github/public/ COPY --from=builder /src/public/ /bin/matrix-hookshot/public/
COPY --from=builder /src/package.json /bin/matrix-github/ COPY --from=builder /src/package.json /bin/matrix-hookshot/
COPY --from=builder /src/yarn.lock /bin/matrix-github/ COPY --from=builder /src/yarn.lock /bin/matrix-hookshot/
WORKDIR /bin/matrix-github WORKDIR /bin/matrix-hookshot
RUN yarn --production RUN yarn --production
VOLUME /data VOLUME /data
EXPOSE 9993 EXPOSE 9993
EXPOSE 7775 EXPOSE 7775
CMD ["node", "/bin/matrix-github/App/BridgeApp.js", "/data/config.yml", "/data/registration.yml"] CMD ["node", "/bin/matrix-hookshot/App/BridgeApp.js", "/data/config.yml", "/data/registration.yml"]

View File

@ -1,6 +1,8 @@
matrix-github matrix-hookshot
============= =============
*Previously matrix-github*
[![#github-bridge:half-shot.uk](https://img.shields.io/matrix/github-bridge:half-shot.uk.svg?server_fqdn=matrix.half-shot.uk&label=%23github-bridge:half-shot.uk&logo=matrix)](https://matrix.to/#/#github-bridge:half-shot.uk) [![#github-bridge:half-shot.uk](https://img.shields.io/matrix/github-bridge:half-shot.uk.svg?server_fqdn=matrix.half-shot.uk&label=%23github-bridge:half-shot.uk&logo=matrix)](https://matrix.to/#/#github-bridge:half-shot.uk)
@ -12,12 +14,12 @@ This bridge requires at least Node 12, and Rust installed. If you do not have ru
To set up the bridge, simply clone this repository. To set up the bridge, simply clone this repository.
` git clone git@github.com:Half-Shot/matrix-github.git` ` git clone git@github.com:Half-Shot/matrix-hookshot.git`
then you will need to install the dependencies then you will need to install the dependencies
```sh ```sh
cd matrix-github cd matrix-hookshot
yarn yarn
``` ```

View File

@ -15,7 +15,7 @@ services:
environment: environment:
CFG_QUEUE_MONOLITHIC: "false" CFG_QUEUE_MONOLITHIC: "false"
CFG_QUEUE_HOST: "redis" CFG_QUEUE_HOST: "redis"
command: node /bin/matrix-github/App/GithubWebhookApp.js /data/config.yml /data/registration.yml command: node /bin/matrix-hookshot/App/GithubWebhookApp.js /data/config.yml /data/registration.yml
sender: sender:
build: build:
context: . context: .
@ -27,7 +27,7 @@ services:
environment: environment:
CFG_QUEUE_MONOLITHIC: "false" CFG_QUEUE_MONOLITHIC: "false"
CFG_QUEUE_HOST: "redis" CFG_QUEUE_HOST: "redis"
command: node /bin/matrix-github/App/MatrixSenderApp.js /data/config.yml /data/registration.yml command: node /bin/matrix-hookshot/App/MatrixSenderApp.js /data/config.yml /data/registration.yml
app: app:
build: build:
context: . context: .
@ -41,4 +41,4 @@ services:
environment: environment:
CFG_QUEUE_MONOLITHIC: "false" CFG_QUEUE_MONOLITHIC: "false"
CFG_QUEUE_HOST: "redis" CFG_QUEUE_HOST: "redis"
command: node /bin/matrix-github/App/BridgeApp.js /data/config.yml /data/registration.yml command: node /bin/matrix-hookshot/App/BridgeApp.js /data/config.yml /data/registration.yml

View File

@ -1,14 +1,14 @@
{ {
"name": "matrix-github", "name": "matrix-hookshot",
"version": "0.1.0", "version": "0.1.0",
"description": "A bridge that displays GitHub issues/PRs as rooms.", "description": "A bridge that displays GitHub issues/PRs as rooms.",
"main": "lib/app.js", "main": "lib/app.js",
"repository": "https://github.com/Half-Shot/matrix-github", "repository": "https://github.com/Half-Shot/matrix-hookshot",
"author": "Half-Shot", "author": "Half-Shot",
"license": "MIT", "license": "MIT",
"private": false, "private": false,
"napi": { "napi": {
"name": "matrix-github-rs" "name": "matrix-hookshot-rs"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=12"

View File

@ -1,4 +1,4 @@
id: matrix-github # This can be anything, but must be unique within your homeserver id: matrix-hookshot # This can be anything, but must be unique within your homeserver
as_token: aaaaaaaaaa # This again can be a random string as_token: aaaaaaaaaa # This again can be a random string
hs_token: aaaaaaaaaa # ..as can this hs_token: aaaaaaaaaa # ..as can this
namespaces: namespaces:

View File

@ -26,10 +26,13 @@ type ProjectsListForUserResponseData = Endpoints["GET /users/{username}/projects
const md = new markdown(); const md = new markdown();
const log = new LogWrapper('AdminRoom'); const log = new LogWrapper('AdminRoom');
export const BRIDGE_ROOM_TYPE = "uk.half-shot.matrix-github.room"; export const LEGACY_BRIDGE_ROOM_TYPE = "uk.half-shot.matrix-github.room";
export const BRIDGE_NOTIF_TYPE = "uk.half-shot.matrix-github.notif_state"; export const LEGACY_BRIDGE_NOTIF_TYPE = "uk.half-shot.matrix-github.notif_state";
export const BRIDGE_GITLAB_NOTIF_TYPE = "uk.half-shot.matrix-github.gitlab.notif_state"; export const LEGACY_BRIDGE_GITLAB_NOTIF_TYPE = "uk.half-shot.matrix-github.gitlab.notif_state";
export const BRIDGE_ROOM_TYPE = "uk.half-shot.matrix-hookshot.github.room";
export const BRIDGE_NOTIF_TYPE = "uk.half-shot.matrix-hookshot.github.notif_state";
export const BRIDGE_GITLAB_NOTIF_TYPE = "uk.half-shot.matrix-hookshot.gitlab.notif_state";
export interface AdminAccountData { export interface AdminAccountData {
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
admin_user: string; admin_user: string;
@ -109,19 +112,29 @@ export class AdminRoom extends EventEmitter {
public async getNotifSince(type: "github"|"gitlab", instanceName?: string) { public async getNotifSince(type: "github"|"gitlab", instanceName?: string) {
if (type === "gitlab") { if (type === "gitlab") {
try { try {
const { since } = await this.botIntent.underlyingClient.getRoomAccountData( let accountData: null|{since: number} = await this.botIntent.underlyingClient.getSafeRoomAccountData(
`${BRIDGE_GITLAB_NOTIF_TYPE}:${instanceName}`, this.roomId `${BRIDGE_GITLAB_NOTIF_TYPE}:${instanceName}`, this.roomId, null
); );
return since; if (!accountData) {
accountData = await this.botIntent.underlyingClient.getSafeRoomAccountData(
`${LEGACY_BRIDGE_GITLAB_NOTIF_TYPE}:${instanceName}`, this.roomId, { since: 0 }
);
}
return accountData.since;
} catch { } catch {
// TODO: We should look at this error. // TODO: We should look at this error.
return 0; return 0;
} }
} }
try { try {
const { since } = await this.botIntent.underlyingClient.getRoomAccountData(BRIDGE_NOTIF_TYPE, this.roomId); let accountData: null|{since: number} = await this.botIntent.underlyingClient.getSafeRoomAccountData(BRIDGE_NOTIF_TYPE, this.roomId, { since: 0 });
log.debug(`Got ${type} notif-since to ${since}`); if (!accountData) {
return since; accountData = await this.botIntent.underlyingClient.getSafeRoomAccountData(
`${LEGACY_BRIDGE_NOTIF_TYPE}:${instanceName}`, this.roomId, { since: 0 }
);
}
log.debug(`Got ${type} notif-since to ${accountData.since}`);
return accountData.since;
} catch (ex) { } catch (ex) {
log.warn(`Filed to get ${type} notif-since`, ex); log.warn(`Filed to get ${type} notif-since`, ex);
// TODO: We should look at this error. // TODO: We should look at this error.
@ -506,7 +519,7 @@ export class AdminRoom extends EventEmitter {
const users = parameters.filter(param => param.toLowerCase().startsWith("users:")).map(param => param.toLowerCase().substring("users:".length).split(",")).flat(); const users = parameters.filter(param => param.toLowerCase().startsWith("users:")).map(param => param.toLowerCase().substring("users:".length).split(",")).flat();
const repos = parameters.filter(param => param.toLowerCase().startsWith("repos:")).map(param => param.toLowerCase().substring("repos:".length).split(",")).flat(); const repos = parameters.filter(param => param.toLowerCase().startsWith("repos:")).map(param => param.toLowerCase().substring("repos:".length).split(",")).flat();
if (orgs.length + users.length + repos.length === 0) { if (orgs.length + users.length + repos.length === 0) {
return this.sendNotice("You must specify some filter options like 'orgs:matrix-org,half-shot', 'users:Half-Shot' or 'repos:matrix-github'"); return this.sendNotice("You must specify some filter options like 'orgs:matrix-org,half-shot', 'users:Half-Shot' or 'repos:matrix-hookshot'");
} }
this.notifFilter.setFilter(name, { this.notifFilter.setFilter(name, {
orgs, orgs,
@ -533,9 +546,10 @@ export class AdminRoom extends EventEmitter {
} }
private async saveAccountData(updateFn: (record: AdminAccountData) => AdminAccountData) { private async saveAccountData(updateFn: (record: AdminAccountData) => AdminAccountData) {
const oldData: AdminAccountData = await this.botIntent.underlyingClient.getRoomAccountData( let oldData: AdminAccountData|null = await this.botIntent.underlyingClient.getSafeRoomAccountData(BRIDGE_ROOM_TYPE, this.roomId, null);
BRIDGE_ROOM_TYPE, this.roomId, if (!oldData) {
); oldData = await this.botIntent.underlyingClient.getSafeRoomAccountData(LEGACY_BRIDGE_ROOM_TYPE, this.roomId, {admin_user: this.userId});
}
const newData = updateFn(oldData); const newData = updateFn(oldData);
await this.botIntent.underlyingClient.setRoomAccountData(BRIDGE_ROOM_TYPE, this.roomId, newData); await this.botIntent.underlyingClient.setRoomAccountData(BRIDGE_ROOM_TYPE, this.roomId, newData);
this.emit("settings.changed", this, oldData, newData); this.emit("settings.changed", this, oldData, newData);

View File

@ -18,7 +18,7 @@ const log = new LogWrapper("CommentProcessor");
interface IMatrixCommentEvent extends MatrixMessageContent { interface IMatrixCommentEvent extends MatrixMessageContent {
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
external_url: string; external_url: string;
"uk.half-shot.matrix-github.comment": { "uk.half-shot.matrix-hookshot.github.comment": {
id: number; id: number;
}; };
} }

View File

@ -19,10 +19,12 @@ const TRANSFORMATION_TIMEOUT_MS = 2000;
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GenericHookConnection implements IConnection { export class GenericHookConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.generic.hook"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.generic.hook";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.generic.hook";
static readonly EventTypes = [ static readonly EventTypes = [
GenericHookConnection.CanonicalEventType, GenericHookConnection.CanonicalEventType,
GenericHookConnection.LegacyCanonicalEventType,
]; ];
public get hookId() { public get hookId() {

View File

@ -27,10 +27,12 @@ const md = new markdown();
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubDiscussionConnection implements IConnection { export class GitHubDiscussionConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.discussion"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.discussion";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.discussion";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubDiscussionConnection.CanonicalEventType, // Legacy event, with an awful name. GitHubDiscussionConnection.CanonicalEventType,
GitHubDiscussionConnection.LegacyCanonicalEventType,
]; ];
static readonly QueryRoomRegex = /#github_disc_(.+)_(.+)_(\d+):.*/; static readonly QueryRoomRegex = /#github_disc_(.+)_(.+)_(\d+):.*/;
@ -131,7 +133,7 @@ export class GitHubDiscussionConnection implements IConnection {
formatted_body: md.render(data.comment.body), formatted_body: md.render(data.comment.body),
msgtype: 'm.text', msgtype: 'm.text',
external_url: data.comment.html_url, external_url: data.comment.html_url,
'uk.half-shot.matrix-github.discussion.comment_id': data.comment.id, 'uk.half-shot.matrix-hookshot.github.discussion.comment_id': data.comment.id,
}); });
} }
} }

View File

@ -17,10 +17,12 @@ export interface GitHubDiscussionSpaceConnectionState {
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubDiscussionSpace implements IConnection { export class GitHubDiscussionSpace implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.discussion.space"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.discussion.space";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.discussion.space";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubDiscussionSpace.CanonicalEventType, // Legacy event, with an awful name. GitHubDiscussionSpace.CanonicalEventType,
GitHubDiscussionSpace.LegacyCanonicalEventType,
]; ];
static readonly QueryRoomRegex = /#github_disc_(.+)_(.+):.*/; static readonly QueryRoomRegex = /#github_disc_(.+)_(.+):.*/;
@ -64,9 +66,6 @@ export class GitHubDiscussionSpace implements IConnection {
responseType: 'arraybuffer', responseType: 'arraybuffer',
}); });
log.info(`uploading ${profile.data.avatar_url}`); log.info(`uploading ${profile.data.avatar_url}`);
// This does exist, but headers is silly and doesn't have content-type.
// tslint:disable-next-line: no-any
console.log(res.headers);
const contentType: string = res.headers["content-type"]; const contentType: string = res.headers["content-type"];
const mxcUrl = await opts.as.botClient.uploadContent( const mxcUrl = await opts.as.botClient.uploadContent(
Buffer.from(res.data as ArrayBuffer), Buffer.from(res.data as ArrayBuffer),

View File

@ -38,10 +38,12 @@ interface IQueryRoomOpts {
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubIssueConnection implements IConnection { export class GitHubIssueConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.bridge"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.issue";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.bridge";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubIssueConnection.CanonicalEventType, // Legacy event, with an awful name. GitHubIssueConnection.CanonicalEventType,
GitHubIssueConnection.LegacyCanonicalEventType,
]; ];
static readonly QueryRoomRegex = /#github_(.+)_(.+)_(\d+):.*/; static readonly QueryRoomRegex = /#github_(.+)_(.+)_(\d+):.*/;
@ -84,9 +86,6 @@ export class GitHubIssueConnection implements IConnection {
responseType: 'arraybuffer', responseType: 'arraybuffer',
}); });
log.info(`uploading ${profile.data.avatar_url}`); log.info(`uploading ${profile.data.avatar_url}`);
// This does exist, but headers is silly and doesn't have content-type.
// tslint:disable-next-line: no-any
console.log(res.headers);
const contentType: string = res.headers["content-type"]; const contentType: string = res.headers["content-type"];
const mxcUrl = await opts.as.botClient.uploadContent( const mxcUrl = await opts.as.botClient.uploadContent(
Buffer.from(res.data as ArrayBuffer), Buffer.from(res.data as ArrayBuffer),

View File

@ -14,10 +14,12 @@ const log = new LogWrapper("GitHubProjectConnection");
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubProjectConnection implements IConnection { export class GitHubProjectConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.project"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.project";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.project";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubProjectConnection.CanonicalEventType, // Legacy event, with an awful name. GitHubProjectConnection.CanonicalEventType,
GitHubProjectConnection.LegacyCanonicalEventType,
]; ];
static async onOpenProject(project: ProjectsGetResponseData, as: Appservice, inviteUser: string): Promise<GitHubProjectConnection> { static async onOpenProject(project: ProjectsGetResponseData, as: Appservice, inviteUser: string): Promise<GitHubProjectConnection> {

View File

@ -58,10 +58,12 @@ function compareEmojiStrings(e0: string, e1: string, e0Index = 0) {
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubRepoConnection implements IConnection { export class GitHubRepoConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.repository"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.repository";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.repository";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubRepoConnection.CanonicalEventType, // Legacy event, with an awful name. GitHubRepoConnection.CanonicalEventType,
GitHubRepoConnection.LegacyCanonicalEventType,
]; ];
static readonly QueryRoomRegex = /#github_(.+)_(.+):.*/; static readonly QueryRoomRegex = /#github_(.+)_(.+):.*/;
@ -101,9 +103,6 @@ export class GitHubRepoConnection implements IConnection {
responseType: 'arraybuffer', responseType: 'arraybuffer',
}); });
log.info(`uploading ${profile.data.avatar_url}`); log.info(`uploading ${profile.data.avatar_url}`);
// This does exist, but headers is silly and doesn't have content-type.
// tslint:disable-next-line: no-any
console.log(res.headers);
const contentType: string = res.headers["content-type"]; const contentType: string = res.headers["content-type"];
const mxcUrl = await opts.as.botClient.uploadContent( const mxcUrl = await opts.as.botClient.uploadContent(
Buffer.from(res.data as ArrayBuffer), Buffer.from(res.data as ArrayBuffer),
@ -481,7 +480,7 @@ ${event.release.body}`;
// eslint-disable-next-line camelcase // eslint-disable-next-line camelcase
const {event_id, key} = (evt.content as MatrixReactionContent)["m.relates_to"]; const {event_id, key} = (evt.content as MatrixReactionContent)["m.relates_to"];
const ev = await this.as.botClient.getEvent(this.roomId, event_id); const ev = await this.as.botClient.getEvent(this.roomId, event_id);
const issueContent = ev.content["uk.half-shot.matrix-github.issue"]; const issueContent = ev.content["uk.half-shot.matrix-hookshot.github.issue"];
if (!issueContent) { if (!issueContent) {
log.debug('Reaction to event did not pertain to a issue'); log.debug('Reaction to event did not pertain to a issue');
return; // Not our event. return; // Not our event.

View File

@ -16,7 +16,8 @@ export interface GitHubUserSpaceConnectionState {
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitHubUserSpace implements IConnection { export class GitHubUserSpace implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.user.space"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.github.user.space";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.user.space";
static readonly EventTypes = [ static readonly EventTypes = [
GitHubUserSpace.CanonicalEventType, // Legacy event, with an awful name. GitHubUserSpace.CanonicalEventType, // Legacy event, with an awful name.

View File

@ -33,10 +33,12 @@ const log = new LogWrapper("GitLabIssueConnection");
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitLabIssueConnection implements IConnection { export class GitLabIssueConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.gitlab.issue"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.gitlab.issue";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.gitlab.issue";
static readonly EventTypes = [ static readonly EventTypes = [
GitLabIssueConnection.CanonicalEventType, GitLabIssueConnection.CanonicalEventType,
GitLabIssueConnection.LegacyCanonicalEventType,
]; ];
static readonly QueryRoomRegex = /#gitlab_(.+)_(.+)_(\d+):.*/; static readonly QueryRoomRegex = /#gitlab_(.+)_(.+)_(\d+):.*/;
@ -104,7 +106,6 @@ export class GitLabIssueConnection implements IConnection {
public async onCommentCreated(event: IGitLabWebhookNoteEvent) { public async onCommentCreated(event: IGitLabWebhookNoteEvent) {
log.info(`${this.toString()} onCommentCreated ${event.object_attributes.noteable_id}`); log.info(`${this.toString()} onCommentCreated ${event.object_attributes.noteable_id}`);
console.log(event);
if (event.repository) { if (event.repository) {
// Delay to stop comments racing sends // Delay to stop comments racing sends
await new Promise((resolve) => setTimeout(resolve, 500)); await new Promise((resolve) => setTimeout(resolve, 500));

View File

@ -23,10 +23,12 @@ const md = new markdown();
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class GitLabRepoConnection implements IConnection { export class GitLabRepoConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.gitlab.repository"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.gitlab.repository";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.gitlab.repository";
static readonly EventTypes = [ static readonly EventTypes = [
GitLabRepoConnection.CanonicalEventType, // Legacy event, with an awful name. GitLabRepoConnection.CanonicalEventType,
GitLabRepoConnection.LegacyCanonicalEventType,
]; ];
static botCommands: BotCommands; static botCommands: BotCommands;

View File

@ -22,10 +22,12 @@ const md = new markdownit();
* Handles rooms connected to a github repo. * Handles rooms connected to a github repo.
*/ */
export class JiraProjectConnection implements IConnection { export class JiraProjectConnection implements IConnection {
static readonly CanonicalEventType = "uk.half-shot.matrix-github.jira.project"; static readonly CanonicalEventType = "uk.half-shot.matrix-hookshot.jira.project";
static readonly LegacyCanonicalEventType = "uk.half-shot.matrix-github.jira.project";
static readonly EventTypes = [ static readonly EventTypes = [
JiraProjectConnection.CanonicalEventType, JiraProjectConnection.CanonicalEventType,
JiraProjectConnection.LegacyCanonicalEventType,
]; ];
static getTopicString(authorName: string, state: string) { static getTopicString(authorName: string, state: string) {

View File

@ -152,7 +152,7 @@ pub fn get_partial_body_for_jira_issue(ctx: CallContext) -> Result<JsObject, Nap
.create_string_from_std(jira_issue.fields.project._self)?, .create_string_from_std(jira_issue.fields.project._self)?,
)?; )?;
body.set_named_property("uk.half-shot.matrix-github.jira.issue", jira_issue_result)?; body.set_named_property("uk.half-shot.matrix-hookshot.jira.issue", jira_issue_result)?;
body.set_named_property("uk.half-shot.matrix-github.jira.project", jira_project)?; body.set_named_property("uk.half-shot.matrix-hookshot.jira.project", jira_project)?;
Ok(body) Ok(body)
} }

View File

@ -3,7 +3,6 @@ import { ProjectsListResponseData } from './Github/Types';
import emoji from "node-emoji"; import emoji from "node-emoji";
// eslint-disable-next-line @typescript-eslint/ban-ts-comment // eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore // @ts-ignore
import { contrastColor } from "contrast-color";
import { JiraIssue } from './Jira/Types'; import { JiraIssue } from './Jira/Types';
import { format_util } from "./libRs"; import { format_util } from "./libRs";
@ -50,7 +49,7 @@ export class FormatUtil {
public static getPartialBodyForRepo(repo: IMinimalRepository) { public static getPartialBodyForRepo(repo: IMinimalRepository) {
return { return {
"external_url": repo.html_url, "external_url": repo.html_url,
"uk.half-shot.matrix-github.repo": { "uk.half-shot.matrix-hookshot.github.repo": {
id: repo.id, id: repo.id,
name: repo.full_name, name: repo.full_name,
url: repo.html_url, url: repo.html_url,
@ -62,7 +61,7 @@ export class FormatUtil {
return { return {
...FormatUtil.getPartialBodyForRepo(repo), ...FormatUtil.getPartialBodyForRepo(repo),
"external_url": issue.html_url, "external_url": issue.html_url,
"uk.half-shot.matrix-github.issue": { "uk.half-shot.matrix-hookshot.github.issue": {
id: issue.id, id: issue.id,
number: issue.number, number: issue.number,
title: issue.title, title: issue.title,
@ -78,7 +77,7 @@ export class FormatUtil {
return { return {
...(issue && repo ? FormatUtil.getPartialBodyForIssue(repo, issue) : undefined), ...(issue && repo ? FormatUtil.getPartialBodyForIssue(repo, issue) : undefined),
"external_url": comment.html_url, "external_url": comment.html_url,
"uk.half-shot.matrix-github.comment": { "uk.half-shot.matrix-hookshot.github.comment": {
id: comment.id, id: comment.id,
}, },
}; };

View File

@ -8,7 +8,7 @@ import { DiscussionQLResponse, DiscussionQL } from "./Discussion";
const log = new LogWrapper("GithubInstance"); const log = new LogWrapper("GithubInstance");
const USER_AGENT = "matrix-github v0.0.1"; const USER_AGENT = "matrix-hookshot v0.0.1";
export class GithubInstance { export class GithubInstance {
private internalOctokit!: Octokit; private internalOctokit!: Octokit;

View File

@ -518,8 +518,15 @@ export class GithubBridge {
roomId, NotifFilter.StateType, "", roomId, NotifFilter.StateType, "",
); );
} catch (ex) { } catch (ex) {
try {
notifContent = await this.as.botIntent.underlyingClient.getRoomStateEvent(
roomId, NotifFilter.LegacyStateType, "",
);
}
catch (ex) {
// No state yet // No state yet
} }
}
const adminRoom = await this.setupAdminRoom(roomId, accountData, notifContent || NotifFilter.getDefaultContent()); const adminRoom = await this.setupAdminRoom(roomId, accountData, notifContent || NotifFilter.getDefaultContent());
// Call this on startup to set the state // Call this on startup to set the state
await this.onAdminRoomSettingsChanged(adminRoom, accountData, { admin_user: accountData.admin_user }); await this.onAdminRoomSettingsChanged(adminRoom, accountData, { admin_user: accountData.admin_user });
@ -596,8 +603,8 @@ export class GithubBridge {
// This might be a reply to a notification // This might be a reply to a notification
try { try {
const ev = metadata.realEvent; const ev = metadata.realEvent;
const splitParts: string[] = ev.content["uk.half-shot.matrix-github.repo"]?.name.split("/"); const splitParts: string[] = ev.content["uk.half-shot.matrix-hookshot.github.repo"]?.name.split("/");
const issueNumber = ev.content["uk.half-shot.matrix-github.issue"]?.number; const issueNumber = ev.content["uk.half-shot.matrix-hookshot.github.issue"]?.number;
if (splitParts && issueNumber) { if (splitParts && issueNumber) {
log.info(`Handling reply for ${splitParts}${issueNumber}`); log.info(`Handling reply for ${splitParts}${issueNumber}`);
const connections = this.connectionManager.getConnectionsForGithubIssue(splitParts[0], splitParts[1], issueNumber); const connections = this.connectionManager.getConnectionsForGithubIssue(splitParts[0], splitParts[1], issueNumber);

View File

@ -23,7 +23,7 @@ export class GitLabClient {
return { return {
headers: { headers: {
"Authorization": `Bearer ${this.token}`, "Authorization": `Bearer ${this.token}`,
"User-Agent": "matrix-github v0.0.1", "User-Agent": "matrix-hookshot v0.0.1",
}, },
baseURL: this.instanceUrl baseURL: this.instanceUrl
}; };

View File

@ -17,7 +17,8 @@ export interface NotificationFilterStateContent {
* A notification filter is a set of keys that define what should be sent to the user. * A notification filter is a set of keys that define what should be sent to the user.
*/ */
export class NotifFilter { export class NotifFilter {
static readonly StateType = "uk.half-shot.matrix-github.notif-filter" static readonly StateType = "uk.half-shot.matrix-github.notif-filter";
static readonly LegacyStateType = "uk.half-shot.matrix-hookshot.notif-filter";
static getDefaultContent(): NotificationFilterStateContent { static getDefaultContent(): NotificationFilterStateContent {
return { return {

View File

@ -5,15 +5,24 @@ import LogWrapper from "./LogWrapper";
import { GitLabClient } from "./Gitlab/Client"; import { GitLabClient } from "./Gitlab/Client";
import { GithubInstance } from "./Github/GithubInstance"; import { GithubInstance } from "./Github/GithubInstance";
const ACCOUNT_DATA_TYPE = "uk.half-shot.matrix-github.password-store:"; const ACCOUNT_DATA_TYPE = "uk.half-shot.matrix-hookshot.github.password-store:";
const ACCOUNT_DATA_GITLAB_TYPE = "uk.half-shot.matrix-github.gitlab.password-store:"; const ACCOUNT_DATA_GITLAB_TYPE = "uk.half-shot.matrix-hookshot.gitlab.password-store:";
const log = new LogWrapper("UserTokenStore");
function tokenKey(type: "github"|"gitlab", userId: string, instanceUrl?: string) { const LEGACY_ACCOUNT_DATA_TYPE = "uk.half-shot.matrix-github.password-store:";
const LEGACY_ACCOUNT_DATA_GITLAB_TYPE = "uk.half-shot.matrix-github.gitlab.password-store:";
const log = new LogWrapper("UserTokenStore");
type TokenType = "github"|"gitlab"|"jira";
const AllowedTokenTypes = ["github", "gitlab", "jira"];
function tokenKey(type: TokenType, userId: string, legacy = false, instanceUrl?: string) {
if (type === "github") { if (type === "github") {
return `${ACCOUNT_DATA_TYPE}${userId}`; return `${legacy ? LEGACY_ACCOUNT_DATA_TYPE : ACCOUNT_DATA_TYPE}${userId}`;
} }
return `${ACCOUNT_DATA_GITLAB_TYPE}${instanceUrl}${userId}`; if (!instanceUrl) {
throw Error(`Expected instanceUrl for ${type}`);
}
return `${legacy ? LEGACY_ACCOUNT_DATA_GITLAB_TYPE : ACCOUNT_DATA_GITLAB_TYPE}${instanceUrl}${userId}`;
} }
export class UserTokenStore { export class UserTokenStore {
@ -28,8 +37,8 @@ export class UserTokenStore {
this.key = await fs.readFile(this.keyPath); this.key = await fs.readFile(this.keyPath);
} }
public async storeUserToken(type: "github"|"gitlab", userId: string, token: string, instanceUrl?: string): Promise<void> { public async storeUserToken(type: TokenType, userId: string, token: string, instanceUrl?: string): Promise<void> {
const key = tokenKey(type, userId, instanceUrl); const key = tokenKey(type, userId, false, instanceUrl);
const data = { const data = {
encrypted: publicEncrypt(this.key, Buffer.from(token)).toString("base64"), encrypted: publicEncrypt(this.key, Buffer.from(token)).toString("base64"),
instance: instanceUrl, instance: instanceUrl,
@ -40,18 +49,19 @@ export class UserTokenStore {
log.debug(`Stored`, data); log.debug(`Stored`, data);
} }
public async getUserToken(type: "github"|"gitlab", userId: string, instanceUrl?: string): Promise<string|null> { public async getUserToken(type: TokenType, userId: string, instanceUrl?: string): Promise<string|null> {
const key = tokenKey(type, userId, instanceUrl); const key = tokenKey(type, userId, false, instanceUrl);
const existingToken = this.userTokens.get(key); const existingToken = this.userTokens.get(key);
if (existingToken) { if (existingToken) {
return existingToken; return existingToken;
} }
try { try {
let obj; let obj;
if (type === "github") { if (AllowedTokenTypes.includes(type)) {
obj = await this.intent.underlyingClient.getAccountData<{encrypted: string}>(key); obj = await this.intent.underlyingClient.getSafeAccountData<{encrypted: string}>(key);
} else if (type === "gitlab") { if (!obj) {
obj = await this.intent.underlyingClient.getAccountData<{encrypted: string}>(key); obj = await this.intent.underlyingClient.getAccountData<{encrypted: string}>(tokenKey(type, userId, true, instanceUrl));
}
} else { } else {
throw Error('Unknown type'); throw Error('Unknown type');
} }

View File

@ -6,10 +6,10 @@ import { JiraIssue } from "./Jira/Types";
let rootModule; let rootModule;
try { try {
// In production, we expect it co-located // In production, we expect it co-located
rootModule = require('./matrix-github-rs.node'); rootModule = require('./matrix-hookshot-rs.node');
} catch (ex) { } catch (ex) {
// When running under ts-node, it may not be co-located. // When running under ts-node, it may not be co-located.
rootModule = require('../lib/matrix-github-rs.node'); rootModule = require('../lib/matrix-hookshot-rs.node');
} }
interface FormatUtil { interface FormatUtil {

View File

@ -89,12 +89,12 @@ describe("FormatUtilTest", () => {
it("should correctly format a JIRA issue", () => { it("should correctly format a JIRA issue", () => {
expect(FormatUtil.getPartialBodyForJiraIssue(SIMPLE_JIRA_ISSUE)).to.deep.equal({ expect(FormatUtil.getPartialBodyForJiraIssue(SIMPLE_JIRA_ISSUE)).to.deep.equal({
"external_url": "http://example-api.url.com/browse/TEST-001", "external_url": "http://example-api.url.com/browse/TEST-001",
"uk.half-shot.matrix-github.jira.issue": { "uk.half-shot.matrix-hookshot.jira.issue": {
"api_url": "http://example-api.url.com/issue-url", "api_url": "http://example-api.url.com/issue-url",
"id": "test-issue", "id": "test-issue",
"key": "TEST-001", "key": "TEST-001",
}, },
"uk.half-shot.matrix-github.jira.project": { "uk.half-shot.matrix-hookshot.jira.project": {
"api_url": "http://example-api.url.com/project-url", "api_url": "http://example-api.url.com/project-url",
"id": "test-project", "id": "test-project",
"key": "TEST", "key": "TEST",

View File

@ -1979,11 +1979,6 @@ content-type@1.0.4, content-type@~1.0.4:
resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b"
integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
contrast-color@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/contrast-color/-/contrast-color-1.0.1.tgz#15fd7b444f43ccb7d6175d7e131d095623a9f146"
integrity sha512-XeTV/LiyWrf/OWnODTqve2YGBfg32N6zlLqQjJKmEY+ffDqIfecgdmluVz7tky1D4VEaweZgoeRJJT87gDSDCQ==
convert-source-map@^1.7.0: convert-source-map@^1.7.0:
version "1.7.0" version "1.7.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442"