fix: use correct room versions
This commit is contained in:
parent
c213769d9f
commit
cd4dc13731
9 changed files with 236 additions and 155 deletions
141
Cargo.lock
generated
141
Cargo.lock
generated
|
@ -229,7 +229,7 @@ version = "0.15.0-dev"
|
||||||
source = "git+https://github.com/SergioBenitez/cookie-rs.git?rev=1c3ca83#1c3ca838543b60a4448d279dc4b903cc7a2bc22a"
|
source = "git+https://github.com/SergioBenitez/cookie-rs.git?rev=1c3ca83#1c3ca838543b60a4448d279dc4b903cc7a2bc22a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"time 0.2.25",
|
"time 0.2.26",
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -580,9 +580,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "gif"
|
name = "gif"
|
||||||
version = "0.11.1"
|
version = "0.11.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "02efba560f227847cb41463a7395c514d127d4f74fff12ef0137fff1b84b96c4"
|
checksum = "5a668f699973d0f573d15749b7002a9ac9e1f9c6b220e7b165601334c173d8de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"color_quant",
|
"color_quant",
|
||||||
"weezl",
|
"weezl",
|
||||||
|
@ -596,9 +596,9 @@ checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h2"
|
name = "h2"
|
||||||
version = "0.3.1"
|
version = "0.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d832b01df74254fe364568d6ddc294443f61cbec82816b60904303af87efae78"
|
checksum = "fc018e188373e2777d0ef2467ebff62a08e66c3f5857b23c8fbec3018210dc00"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"fnv",
|
"fnv",
|
||||||
|
@ -661,12 +661,13 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "http-body"
|
name = "http-body"
|
||||||
version = "0.4.0"
|
version = "0.4.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "2861bd27ee074e5ee891e8b539837a9430012e249d7f0ca2d795650f579c1994"
|
checksum = "5dfb77c123b4e2f72a2069aeae0b4b4949cc7e966df277813fc16347e7549737"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"http",
|
"http",
|
||||||
|
"pin-project-lite",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -845,9 +846,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "js-sys"
|
name = "js-sys"
|
||||||
version = "0.3.48"
|
version = "0.3.49"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "dc9f84f9b115ce7843d60706df1422a916680bfdfcbdb0447c5614ff9d7e4d78"
|
checksum = "dc15e39392125075f60c95ba416f5381ff6c3a948ff02ab12464715adf56c821"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
@ -883,9 +884,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "libc"
|
name = "libc"
|
||||||
version = "0.2.88"
|
version = "0.2.91"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "03b07a082330a35e43f63177cc01689da34fbffa0105e1246cf0311472cac73a"
|
checksum = "8916b1f6ca17130ec6568feccee27c156ad12037880833a3b842a823236502e7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "linked-hash-map"
|
name = "linked-hash-map"
|
||||||
|
@ -955,9 +956,9 @@ checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memoffset"
|
name = "memoffset"
|
||||||
version = "0.6.1"
|
version = "0.6.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "157b4208e3059a8f9e78d559edc658e13df41410cb3ae03979c83130067fdd87"
|
checksum = "cc14fc54a812b4472b4113facc3e44d099fbc0ea2ce0551fa5c703f8edfbfd38"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
]
|
]
|
||||||
|
@ -979,9 +980,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "mio"
|
name = "mio"
|
||||||
version = "0.7.9"
|
version = "0.7.11"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a5dede4e2065b3842b8b0af444119f3aa331cc7cc2dd20388bfb0f5d5a38823a"
|
checksum = "cf80d3e903b34e0bd7282b218398aec54e082c840d9baf8339e0080a0c542956"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
|
@ -992,11 +993,10 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "miow"
|
name = "miow"
|
||||||
version = "0.3.6"
|
version = "0.3.7"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
|
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"socket2",
|
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1097,15 +1097,15 @@ checksum = "af8b08b04175473088b46763e51ee54da5f9a164bc162f615b91bc179dbf15a3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl"
|
name = "openssl"
|
||||||
version = "0.10.32"
|
version = "0.10.33"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
|
checksum = "a61075b62a23fef5a29815de7536d940aa35ce96d18ce0cc5076272db678a577"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags",
|
"bitflags",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"foreign-types",
|
"foreign-types",
|
||||||
"lazy_static",
|
|
||||||
"libc",
|
"libc",
|
||||||
|
"once_cell",
|
||||||
"openssl-sys",
|
"openssl-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -1117,18 +1117,18 @@ checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-src"
|
name = "openssl-src"
|
||||||
version = "111.14.0+1.1.1j"
|
version = "111.15.0+1.1.1k"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "055b569b5bd7e5462a1700f595c7c7d487691d73b5ce064176af7f9f0cbb80a9"
|
checksum = "b1a5f6ae2ac04393b217ea9f700cd04fa9bf3d93fae2872069f3d15d908af70a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cc",
|
"cc",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "openssl-sys"
|
name = "openssl-sys"
|
||||||
version = "0.9.60"
|
version = "0.9.61"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
|
checksum = "313752393519e876837e09e1fa183ddef0be7735868dced3196f4472d536277f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"cc",
|
"cc",
|
||||||
|
@ -1203,9 +1203,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "paste"
|
name = "paste"
|
||||||
version = "1.0.4"
|
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 = "c5d65c4d95931acda4498f675e332fcbdc9a06705cd07086c510e9b6009cd1c1"
|
checksum = "acbf547ad0c65e31259204bd90935776d1c693cec2f4ff7abb7a1bbbd40dfe58"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pear"
|
name = "pear"
|
||||||
|
@ -1249,18 +1249,18 @@ checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project"
|
name = "pin-project"
|
||||||
version = "1.0.5"
|
version = "1.0.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "96fa8ebb90271c4477f144354485b8068bd8f6b78b428b01ba892ca26caf0b63"
|
checksum = "bc174859768806e91ae575187ada95c91a29e96a98dc5d2cd9a1fed039501ba6"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"pin-project-internal",
|
"pin-project-internal",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pin-project-internal"
|
name = "pin-project-internal"
|
||||||
version = "1.0.5"
|
version = "1.0.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "758669ae3558c6f74bd2a18b41f7ac0b5a195aea6639d6a9b5e5d1ad5ba24c0b"
|
checksum = "a490329918e856ed1b083f244e3bfe2d8c4f336407e4ea9e1a9f479ff09049e5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -1459,9 +1459,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex"
|
name = "regex"
|
||||||
version = "1.4.4"
|
version = "1.4.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "54fd1046a3107eb58f42de31d656fee6853e5d276c455fd943742dce89fc3dd3"
|
checksum = "957056ecddbeba1b26965114e191d2e8589ce74db242b6ea25fc4062427a5c19"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"aho-corasick",
|
"aho-corasick",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
@ -1574,7 +1574,7 @@ dependencies = [
|
||||||
"rocket_http",
|
"rocket_http",
|
||||||
"serde",
|
"serde",
|
||||||
"state",
|
"state",
|
||||||
"time 0.2.25",
|
"time 0.2.26",
|
||||||
"tokio",
|
"tokio",
|
||||||
"ubyte",
|
"ubyte",
|
||||||
"version_check",
|
"version_check",
|
||||||
|
@ -1612,7 +1612,7 @@ dependencies = [
|
||||||
"ref-cast",
|
"ref-cast",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"state",
|
"state",
|
||||||
"time 0.2.25",
|
"time 0.2.26",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-rustls",
|
"tokio-rustls",
|
||||||
"uncased",
|
"uncased",
|
||||||
|
@ -1953,18 +1953,18 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde"
|
name = "serde"
|
||||||
version = "1.0.124"
|
version = "1.0.125"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bd761ff957cb2a45fbb9ab3da6512de9de55872866160b23c25f1a841e99d29f"
|
checksum = "558dc50e1a5a5fa7112ca2ce4effcb321b0300c0d4ccf0776a9f60cd89031171"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.124"
|
version = "1.0.125"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1800f7693e94e186f5e25a28291ae1570da908aff7d97a095dec1e56ff99069b"
|
checksum = "b093b7a2bb58203b5da3056c05b4ec1fed827dcfdb37347a8841695263b3d06d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2089,9 +2089,9 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "standback"
|
name = "standback"
|
||||||
version = "0.2.15"
|
version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a2beb4d1860a61f571530b3f855a1b538d0200f7871c63331ecd6f17b1f014f8"
|
checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
@ -2105,7 +2105,7 @@ checksum = "3015a7d0a5fd5105c91c3710d42f9ccf0abfb287d62206484dcc67f9569a6483"
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "state-res"
|
name = "state-res"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
source = "git+https://github.com/timokoesters/state-res?branch=improvements#1621a491a9e867a1ad4dff9f2f92b0c1e2d44aa0"
|
source = "git+https://github.com/timokoesters/state-res?branch=improvements#625c37cb776b381a83ab7ee58b13e32506849648"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itertools 0.10.0",
|
"itertools 0.10.0",
|
||||||
"log",
|
"log",
|
||||||
|
@ -2167,9 +2167,9 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "syn"
|
name = "syn"
|
||||||
version = "1.0.63"
|
version = "1.0.64"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8fd9bc7ccc2688b3344c2f48b9b546648b25ce0b20fc717ee7fa7981a8ca9717"
|
checksum = "3fd9d1e9976102a03c542daa2eff1b43f9d72306342f3f8b3ed5fb8908195d6f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2262,9 +2262,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.2.25"
|
version = "0.2.26"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1195b046942c221454c2539395f85413b33383a067449d78aab2b7b052a142f7"
|
checksum = "08a8cbfbf47955132d0202d1662f49b2423ae35862aee471f3ba4b133358f372"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"const_fn",
|
"const_fn",
|
||||||
"libc",
|
"libc",
|
||||||
|
@ -2315,9 +2315,9 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio"
|
name = "tokio"
|
||||||
version = "1.3.0"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8d56477f6ed99e10225f38f9f75f872f29b8b8bd8c0b946f63345bb144e9eeda"
|
checksum = "134af885d758d645f0f0505c9a8b3f9bf8a348fd822e112ab5248138348f1722"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"autocfg",
|
"autocfg",
|
||||||
"bytes",
|
"bytes",
|
||||||
|
@ -2366,9 +2366,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "tokio-util"
|
name = "tokio-util"
|
||||||
version = "0.6.4"
|
version = "0.6.5"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec31e5cc6b46e653cf57762f36f71d5e6386391d88a72fd6db4508f8f676fb29"
|
checksum = "5143d049e85af7fbc36f5454d990e62c2df705b3589f123b71f441b6b59f443f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bytes",
|
"bytes",
|
||||||
"futures-core",
|
"futures-core",
|
||||||
|
@ -2483,9 +2483,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "trust-dns-proto"
|
name = "trust-dns-proto"
|
||||||
version = "0.20.0"
|
version = "0.20.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "98a0381b2864c2978db7f8e17c7b23cca5a3a5f99241076e13002261a8ecbabd"
|
checksum = "8d57e219ba600dd96c2f6d82eb79645068e14edbc5c7e27514af40436b88150c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
|
@ -2501,15 +2501,16 @@ dependencies = [
|
||||||
"rand",
|
"rand",
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
|
"tinyvec",
|
||||||
"tokio",
|
"tokio",
|
||||||
"url",
|
"url",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "trust-dns-resolver"
|
name = "trust-dns-resolver"
|
||||||
version = "0.20.0"
|
version = "0.20.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "3072d18c10bd621cb00507d59cfab5517862285c353160366e37fbf4c74856e4"
|
checksum = "b0437eea3a6da51acc1e946545ff53d5b8fb2611ff1c3bed58522dde100536ae"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
|
@ -2605,9 +2606,9 @@ checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "version_check"
|
name = "version_check"
|
||||||
version = "0.9.2"
|
version = "0.9.3"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed"
|
checksum = "5fecdca9a5291cc2b8dcf7dc02453fee791a280f3743cb0905f8822ae463b3fe"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "want"
|
name = "want"
|
||||||
|
@ -2633,9 +2634,9 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen"
|
name = "wasm-bindgen"
|
||||||
version = "0.2.71"
|
version = "0.2.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7ee1280240b7c461d6a0071313e08f34a60b0365f14260362e5a2b17d1d31aa7"
|
checksum = "8fe8f61dba8e5d645a4d8132dc7a0a66861ed5e1045d2c0ed940fab33bac0fbe"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -2645,9 +2646,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-backend"
|
name = "wasm-bindgen-backend"
|
||||||
version = "0.2.71"
|
version = "0.2.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b7d8b6942b8bb3a9b0e73fc79b98095a27de6fa247615e59d096754a3bc2aa8"
|
checksum = "046ceba58ff062da072c7cb4ba5b22a37f00a302483f7e2a6cdc18fedbdc1fd3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
|
@ -2660,9 +2661,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-futures"
|
name = "wasm-bindgen-futures"
|
||||||
version = "0.4.21"
|
version = "0.4.22"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e67a5806118af01f0d9045915676b22aaebecf4178ae7021bc171dab0b897ab"
|
checksum = "73157efb9af26fb564bb59a009afd1c7c334a44db171d280690d0c3faaec3468"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
|
@ -2672,9 +2673,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro"
|
name = "wasm-bindgen-macro"
|
||||||
version = "0.2.71"
|
version = "0.2.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e5ac38da8ef716661f0f36c0d8320b89028efe10c7c0afde65baffb496ce0d3b"
|
checksum = "0ef9aa01d36cda046f797c57959ff5f3c615c9cc63997a8d545831ec7976819b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"quote",
|
"quote",
|
||||||
"wasm-bindgen-macro-support",
|
"wasm-bindgen-macro-support",
|
||||||
|
@ -2682,9 +2683,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-macro-support"
|
name = "wasm-bindgen-macro-support"
|
||||||
version = "0.2.71"
|
version = "0.2.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "cc053ec74d454df287b9374ee8abb36ffd5acb95ba87da3ba5b7d3fe20eb401e"
|
checksum = "96eb45c1b2ee33545a813a92dbb53856418bf7eb54ab34f7f7ff1448a5b3735d"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
@ -2695,15 +2696,15 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasm-bindgen-shared"
|
name = "wasm-bindgen-shared"
|
||||||
version = "0.2.71"
|
version = "0.2.72"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7d6f8ec44822dd71f5f221a5847fb34acd9060535c1211b70a05844c0f6383b1"
|
checksum = "b7148f4696fb4960a346eaa60bbfb42a1ac4ebba21f750f75fc1375b098d5ffa"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "web-sys"
|
name = "web-sys"
|
||||||
version = "0.3.48"
|
version = "0.3.49"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec600b26223b2948cedfde2a0aa6756dcf1fef616f43d7b3097aaf53a6c4d92b"
|
checksum = "59fe19d70f5dacc03f6e46777213facae5ac3801575d56ca6cbd4c93dcd12310"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
|
|
|
@ -35,7 +35,7 @@ max_request_size = 20_000_000 # in bytes
|
||||||
|
|
||||||
#cache_capacity = 1073741824 # in bytes, 1024 * 1024 * 1024
|
#cache_capacity = 1073741824 # in bytes, 1024 * 1024 * 1024
|
||||||
#max_concurrent_requests = 4 # How many requests Conduit sends to other servers at the same time
|
#max_concurrent_requests = 4 # How many requests Conduit sends to other servers at the same time
|
||||||
#log = "info,rocket=off,_=off,sled=off"
|
#log = "info,state_res=warn,rocket=off,_=off,sled=off"
|
||||||
#workers = 4 # default: cpu core count * 2
|
#workers = 4 # default: cpu core count * 2
|
||||||
|
|
||||||
address = "127.0.0.1" # This makes sure Conduit can only be reached using the reverse proxy
|
address = "127.0.0.1" # This makes sure Conduit can only be reached using the reverse proxy
|
||||||
|
|
|
@ -17,7 +17,6 @@ use rocket::get;
|
||||||
#[tracing::instrument]
|
#[tracing::instrument]
|
||||||
pub async fn get_capabilities_route() -> ConduitResult<get_capabilities::Response> {
|
pub async fn get_capabilities_route() -> ConduitResult<get_capabilities::Response> {
|
||||||
let mut available = BTreeMap::new();
|
let mut available = BTreeMap::new();
|
||||||
available.insert(RoomVersionId::Version5, RoomVersionStability::Stable);
|
|
||||||
available.insert(RoomVersionId::Version6, RoomVersionStability::Stable);
|
available.insert(RoomVersionId::Version6, RoomVersionStability::Stable);
|
||||||
|
|
||||||
let mut capabilities = Capabilities::new();
|
let mut capabilities = Capabilities::new();
|
||||||
|
|
|
@ -4,7 +4,7 @@ use crate::{
|
||||||
pdu::{PduBuilder, PduEvent},
|
pdu::{PduBuilder, PduEvent},
|
||||||
utils, ConduitResult, Database, Error, Result, Ruma,
|
utils, ConduitResult, Database, Error, Result, Ruma,
|
||||||
};
|
};
|
||||||
use log::{error, info, warn};
|
use log::{error, warn};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
api::{
|
api::{
|
||||||
client::{
|
client::{
|
||||||
|
@ -455,7 +455,7 @@ async fn join_room_by_id_helper(
|
||||||
federation::membership::create_join_event_template::v1::Request {
|
federation::membership::create_join_event_template::v1::Request {
|
||||||
room_id,
|
room_id,
|
||||||
user_id: sender_user,
|
user_id: sender_user,
|
||||||
ver: &[RoomVersionId::Version5, RoomVersionId::Version6],
|
ver: &[RoomVersionId::Version6],
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await;
|
.await;
|
||||||
|
@ -469,6 +469,11 @@ async fn join_room_by_id_helper(
|
||||||
|
|
||||||
let (make_join_response, remote_server) = make_join_response_and_server?;
|
let (make_join_response, remote_server) = make_join_response_and_server?;
|
||||||
|
|
||||||
|
let room_version = match make_join_response.room_version {
|
||||||
|
Some(room_version) if room_version == RoomVersionId::Version6 => room_version,
|
||||||
|
_ => return Err(Error::BadServerResponse("Room version is not supported")),
|
||||||
|
};
|
||||||
|
|
||||||
let mut join_event_stub =
|
let mut join_event_stub =
|
||||||
serde_json::from_str::<CanonicalJsonObject>(make_join_response.event.json().get())
|
serde_json::from_str::<CanonicalJsonObject>(make_join_response.event.json().get())
|
||||||
.map_err(|_| {
|
.map_err(|_| {
|
||||||
|
@ -505,14 +510,14 @@ async fn join_room_by_id_helper(
|
||||||
db.globals.server_name().as_str(),
|
db.globals.server_name().as_str(),
|
||||||
db.globals.keypair(),
|
db.globals.keypair(),
|
||||||
&mut join_event_stub,
|
&mut join_event_stub,
|
||||||
&RoomVersionId::Version6,
|
&room_version,
|
||||||
)
|
)
|
||||||
.expect("event is valid, we just created it");
|
.expect("event is valid, we just created it");
|
||||||
|
|
||||||
// Generate event id
|
// Generate event id
|
||||||
let event_id = EventId::try_from(&*format!(
|
let event_id = EventId::try_from(&*format!(
|
||||||
"${}",
|
"${}",
|
||||||
ruma::signatures::reference_hash(&join_event_stub, &RoomVersionId::Version6)
|
ruma::signatures::reference_hash(&join_event_stub, &room_version)
|
||||||
.expect("ruma can calculate reference hashes")
|
.expect("ruma can calculate reference hashes")
|
||||||
))
|
))
|
||||||
.expect("ruma's reference hashes are valid event ids");
|
.expect("ruma's reference hashes are valid event ids");
|
||||||
|
@ -546,7 +551,7 @@ async fn join_room_by_id_helper(
|
||||||
})?;
|
})?;
|
||||||
let event_id = EventId::try_from(&*format!(
|
let event_id = EventId::try_from(&*format!(
|
||||||
"${}",
|
"${}",
|
||||||
ruma::signatures::reference_hash(&value, &RoomVersionId::Version6)
|
ruma::signatures::reference_hash(&value, &room_version)
|
||||||
.expect("ruma can calculate reference hashes")
|
.expect("ruma can calculate reference hashes")
|
||||||
))
|
))
|
||||||
.expect("ruma's reference hashes are valid event ids");
|
.expect("ruma's reference hashes are valid event ids");
|
||||||
|
@ -586,8 +591,7 @@ async fn join_room_by_id_helper(
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
let (id, pdu) = pdu?;
|
let (_id, pdu) = pdu?;
|
||||||
info!("adding {} to outliers: {:#?}", id, pdu);
|
|
||||||
db.rooms.add_pdu_outlier(&pdu)?;
|
db.rooms.add_pdu_outlier(&pdu)?;
|
||||||
if let Some(state_key) = &pdu.state_key {
|
if let Some(state_key) = &pdu.state_key {
|
||||||
if pdu.kind == EventType::RoomMember {
|
if pdu.kind == EventType::RoomMember {
|
||||||
|
@ -641,8 +645,7 @@ async fn join_room_by_id_helper(
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
let (id, pdu) = pdu?;
|
let (_id, pdu) = pdu?;
|
||||||
info!("adding {} to outliers: {:#?}", id, pdu);
|
|
||||||
db.rooms.add_pdu_outlier(&pdu)?;
|
db.rooms.add_pdu_outlier(&pdu)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -343,10 +343,7 @@ pub async fn upgrade_room_route(
|
||||||
) -> ConduitResult<upgrade_room::Response> {
|
) -> ConduitResult<upgrade_room::Response> {
|
||||||
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
|
let sender_user = body.sender_user.as_ref().expect("user is authenticated");
|
||||||
|
|
||||||
if !matches!(
|
if !matches!(body.new_version, RoomVersionId::Version6) {
|
||||||
body.new_version,
|
|
||||||
RoomVersionId::Version5 | RoomVersionId::Version6
|
|
||||||
) {
|
|
||||||
return Err(Error::BadRequest(
|
return Err(Error::BadRequest(
|
||||||
ErrorKind::UnsupportedRoomVersion,
|
ErrorKind::UnsupportedRoomVersion,
|
||||||
"This server does not support that room version.",
|
"This server does not support that room version.",
|
||||||
|
|
|
@ -71,7 +71,7 @@ fn default_max_concurrent_requests() -> u16 {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_log() -> String {
|
fn default_log() -> String {
|
||||||
"info,rocket=off,_=off,sled=off".to_owned()
|
"info,state_res=warn,rocket=off,_=off,sled=off".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|
|
@ -420,6 +420,27 @@ impl Rooms {
|
||||||
.map_or(Ok(None), |pdu_id| Ok(Some(pdu_id)))
|
.map_or(Ok(None), |pdu_id| Ok(Some(pdu_id)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns the pdu.
|
||||||
|
///
|
||||||
|
/// Checks the `eventid_outlierpdu` Tree if not found in the timeline.
|
||||||
|
pub fn get_non_outlier_pdu(&self, event_id: &EventId) -> Result<Option<PduEvent>> {
|
||||||
|
self.eventid_pduid
|
||||||
|
.get(event_id.as_bytes())?
|
||||||
|
.map_or_else::<Result<_>, _, _>(
|
||||||
|
|| Ok(None),
|
||||||
|
|pduid| {
|
||||||
|
Ok(Some(self.pduid_pdu.get(&pduid)?.ok_or_else(|| {
|
||||||
|
Error::bad_database("Invalid pduid in eventid_pduid.")
|
||||||
|
})?))
|
||||||
|
},
|
||||||
|
)?
|
||||||
|
.map(|pdu| {
|
||||||
|
Ok(serde_json::from_slice(&pdu)
|
||||||
|
.map_err(|_| Error::bad_database("Invalid PDU in db."))?)
|
||||||
|
})
|
||||||
|
.transpose()
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns the pdu.
|
/// Returns the pdu.
|
||||||
///
|
///
|
||||||
/// Checks the `eventid_outlierpdu` Tree if not found in the timeline.
|
/// Checks the `eventid_outlierpdu` Tree if not found in the timeline.
|
||||||
|
@ -1002,6 +1023,7 @@ impl Rooms {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// If there was no create event yet, assume we are creating a version 6 room right now
|
||||||
let room_version = create_event_content.map_or(RoomVersionId::Version6, |create_event| {
|
let room_version = create_event_content.map_or(RoomVersionId::Version6, |create_event| {
|
||||||
create_event.room_version
|
create_event.room_version
|
||||||
});
|
});
|
||||||
|
@ -1093,14 +1115,14 @@ impl Rooms {
|
||||||
db.globals.server_name().as_str(),
|
db.globals.server_name().as_str(),
|
||||||
db.globals.keypair(),
|
db.globals.keypair(),
|
||||||
&mut pdu_json,
|
&mut pdu_json,
|
||||||
&RoomVersionId::Version6,
|
&room_version,
|
||||||
)
|
)
|
||||||
.expect("event is valid, we just created it");
|
.expect("event is valid, we just created it");
|
||||||
|
|
||||||
// Generate event id
|
// Generate event id
|
||||||
pdu.event_id = EventId::try_from(&*format!(
|
pdu.event_id = EventId::try_from(&*format!(
|
||||||
"${}",
|
"${}",
|
||||||
ruma::signatures::reference_hash(&pdu_json, &RoomVersionId::Version6)
|
ruma::signatures::reference_hash(&pdu_json, &room_version)
|
||||||
.expect("ruma can calculate reference hashes")
|
.expect("ruma can calculate reference hashes")
|
||||||
))
|
))
|
||||||
.expect("ruma's reference hashes are valid event ids");
|
.expect("ruma's reference hashes are valid event ids");
|
||||||
|
|
|
@ -10,7 +10,7 @@ use crate::{
|
||||||
appservice_server, database::pusher, server_server, utils, Database, Error, PduEvent, Result,
|
appservice_server, database::pusher, server_server, utils, Database, Error, PduEvent, Result,
|
||||||
};
|
};
|
||||||
use federation::transactions::send_transaction_message;
|
use federation::transactions::send_transaction_message;
|
||||||
use log::{info, warn};
|
use log::warn;
|
||||||
use ring::digest;
|
use ring::digest;
|
||||||
use rocket::futures::stream::{FuturesUnordered, StreamExt};
|
use rocket::futures::stream::{FuturesUnordered, StreamExt};
|
||||||
use ruma::{
|
use ruma::{
|
||||||
|
@ -518,7 +518,11 @@ impl Sending {
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
.map(|response| {
|
.map(|response| {
|
||||||
info!("server response: {:?}", response);
|
for pdu in response.pdus {
|
||||||
|
if pdu.1.is_err() {
|
||||||
|
warn!("Failed to send to {}: {:?}", server, pdu);
|
||||||
|
}
|
||||||
|
}
|
||||||
kind.clone()
|
kind.clone()
|
||||||
})
|
})
|
||||||
.map_err(|e| (kind, e));
|
.map_err(|e| (kind, e));
|
||||||
|
|
|
@ -20,10 +20,10 @@ use ruma::{
|
||||||
OutgoingRequest,
|
OutgoingRequest,
|
||||||
},
|
},
|
||||||
directory::{IncomingFilter, IncomingRoomNetwork},
|
directory::{IncomingFilter, IncomingRoomNetwork},
|
||||||
events::EventType,
|
events::{room::create::CreateEventContent, EventType},
|
||||||
serde::to_canonical_value,
|
serde::{to_canonical_value, Raw},
|
||||||
signatures::CanonicalJsonValue,
|
signatures::CanonicalJsonValue,
|
||||||
EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UserId,
|
EventId, RoomId, ServerName, ServerSigningKeyId, UserId,
|
||||||
};
|
};
|
||||||
use state_res::{Event, EventMap, StateMap};
|
use state_res::{Event, EventMap, StateMap};
|
||||||
use std::{
|
use std::{
|
||||||
|
@ -180,7 +180,12 @@ where
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
if status != 200 {
|
if status != 200 {
|
||||||
info!("{} {}:\n{}", url, status, String::from_utf8_lossy(&body),);
|
info!(
|
||||||
|
"{} {}: {}",
|
||||||
|
url,
|
||||||
|
status,
|
||||||
|
String::from_utf8_lossy(&body).lines().collect::<Vec<_>>().join(" ")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
let response = T::IncomingResponse::try_from(
|
let response = T::IncomingResponse::try_from(
|
||||||
|
@ -534,6 +539,16 @@ pub async fn send_transaction_message_route<'a>(
|
||||||
|
|
||||||
let mut resolved_map = BTreeMap::new();
|
let mut resolved_map = BTreeMap::new();
|
||||||
|
|
||||||
|
let mut pub_key_map = BTreeMap::new();
|
||||||
|
|
||||||
|
// This is all the auth_events that have been recursively fetched so they don't have to be
|
||||||
|
// deserialized over and over again.
|
||||||
|
// TODO: make this persist across requests but not in a DB Tree (in globals?)
|
||||||
|
// TODO: This could potentially also be some sort of trie (suffix tree) like structure so
|
||||||
|
// that once an auth event is known it would know (using indexes maybe) all of the auth
|
||||||
|
// events that it references.
|
||||||
|
let mut auth_cache = EventMap::new();
|
||||||
|
|
||||||
for pdu in body.pdus.iter() {
|
for pdu in body.pdus.iter() {
|
||||||
// We do not add the event_id field to the pdu here because of signature and hashes checks
|
// We do not add the event_id field to the pdu here because of signature and hashes checks
|
||||||
let (event_id, value) = match crate::pdu::gen_event_id_canonical_json(pdu) {
|
let (event_id, value) = match crate::pdu::gen_event_id_canonical_json(pdu) {
|
||||||
|
@ -544,13 +559,27 @@ pub async fn send_transaction_message_route<'a>(
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Err(e) = handle_incoming_pdu(&body.origin, &event_id, value, true, &db).await {
|
if let Err(e) = handle_incoming_pdu(
|
||||||
|
&body.origin,
|
||||||
|
&event_id,
|
||||||
|
value,
|
||||||
|
true,
|
||||||
|
&db,
|
||||||
|
&mut pub_key_map,
|
||||||
|
&mut auth_cache,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
{
|
||||||
resolved_map.insert(event_id, Err(e));
|
resolved_map.insert(event_id, Err(e));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if !resolved_map.is_empty() {
|
for pdu in &resolved_map {
|
||||||
warn!("These PDU's failed {:?}", resolved_map);
|
if let Err(e) = pdu.1 {
|
||||||
|
if e != "Room is unknown to this server." {
|
||||||
|
warn!("Incoming PDU failed {:?}", pdu);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(send_transaction_message::v1::Response { pdus: resolved_map }.into())
|
Ok(send_transaction_message::v1::Response { pdus: resolved_map }.into())
|
||||||
|
@ -589,12 +618,14 @@ fn handle_incoming_pdu<'a>(
|
||||||
value: BTreeMap<String, CanonicalJsonValue>,
|
value: BTreeMap<String, CanonicalJsonValue>,
|
||||||
is_timeline_event: bool,
|
is_timeline_event: bool,
|
||||||
db: &'a Database,
|
db: &'a Database,
|
||||||
|
pub_key_map: &'a mut BTreeMap<String, BTreeMap<String, String>>,
|
||||||
|
auth_cache: &'a mut EventMap<Arc<PduEvent>>,
|
||||||
) -> AsyncRecursiveResult<'a, Arc<PduEvent>> {
|
) -> AsyncRecursiveResult<'a, Arc<PduEvent>> {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
// TODO: For RoomVersion6 we must check that Raw<..> is canonical do we anywhere?: https://matrix.org/docs/spec/rooms/v6#canonical-json
|
// TODO: For RoomVersion6 we must check that Raw<..> is canonical do we anywhere?: https://matrix.org/docs/spec/rooms/v6#canonical-json
|
||||||
|
|
||||||
// 0. Skip the PDU if we already know about it
|
// 0. Skip the PDU if we already know about it
|
||||||
if let Ok(Some(pdu)) = db.rooms.get_pdu(&event_id) {
|
if let Ok(Some(pdu)) = db.rooms.get_non_outlier_pdu(&event_id) {
|
||||||
return Ok(Arc::new(pdu));
|
return Ok(Arc::new(pdu));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -610,27 +641,17 @@ fn handle_incoming_pdu<'a>(
|
||||||
Some(id) => id,
|
Some(id) => id,
|
||||||
None => {
|
None => {
|
||||||
// Event is invalid
|
// Event is invalid
|
||||||
return Err("Event needs a valid RoomId".to_string());
|
return Err("Event needs a valid RoomId.".to_string());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match db.rooms.exists(&room_id) {
|
match db.rooms.exists(&room_id) {
|
||||||
Ok(true) => {}
|
Ok(true) => {}
|
||||||
_ => {
|
_ => {
|
||||||
return Err("Room is unknown to this server".to_string());
|
return Err("Room is unknown to this server.".to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut pub_key_map = BTreeMap::new();
|
|
||||||
|
|
||||||
// This is all the auth_events that have been recursively fetched so they don't have to be
|
|
||||||
// deserialized over and over again.
|
|
||||||
// TODO: make this persist across requests but not in a DB Tree (in globals?)
|
|
||||||
// TODO: This could potentially also be some sort of trie (suffix tree) like structure so
|
|
||||||
// that once an auth event is known it would know (using indexes maybe) all of the auth
|
|
||||||
// events that it references.
|
|
||||||
let mut auth_cache = EventMap::new();
|
|
||||||
|
|
||||||
// We go through all the signatures we see on the value and fetch the corresponding signing
|
// We go through all the signatures we see on the value and fetch the corresponding signing
|
||||||
// keys
|
// keys
|
||||||
for (signature_server, signature) in match value
|
for (signature_server, signature) in match value
|
||||||
|
@ -674,22 +695,35 @@ fn handle_incoming_pdu<'a>(
|
||||||
|
|
||||||
// 2. Check signatures, otherwise drop
|
// 2. Check signatures, otherwise drop
|
||||||
// 3. check content hash, redact if doesn't match
|
// 3. check content hash, redact if doesn't match
|
||||||
let mut val =
|
let create_event = db
|
||||||
match ruma::signatures::verify_event(&pub_key_map, &value, &RoomVersionId::Version5) {
|
.rooms
|
||||||
Err(e) => {
|
.room_state_get(&room_id, &EventType::RoomCreate, "")
|
||||||
// Drop
|
.map_err(|_| "Failed to ask database for event.")?
|
||||||
error!("{:?}: {}", value, e);
|
.ok_or_else(|| "Failed to find create event in db.")?;
|
||||||
return Err("Signature verification failed".to_string());
|
|
||||||
|
let create_event_content =
|
||||||
|
serde_json::from_value::<Raw<CreateEventContent>>(create_event.content.clone())
|
||||||
|
.expect("Raw::from_value always works.")
|
||||||
|
.deserialize()
|
||||||
|
.map_err(|_| "Invalid PowerLevels event in db.".to_owned())?;
|
||||||
|
|
||||||
|
let room_version = create_event_content.room_version;
|
||||||
|
|
||||||
|
let mut val = match ruma::signatures::verify_event(&pub_key_map, &value, &room_version) {
|
||||||
|
Err(e) => {
|
||||||
|
// Drop
|
||||||
|
error!("{:?}: {}", value, e);
|
||||||
|
return Err("Signature verification failed".to_string());
|
||||||
|
}
|
||||||
|
Ok(ruma::signatures::Verified::Signatures) => {
|
||||||
|
// Redact
|
||||||
|
match ruma::signatures::redact(&value, &room_version) {
|
||||||
|
Ok(obj) => obj,
|
||||||
|
Err(_) => return Err("Redaction failed".to_string()),
|
||||||
}
|
}
|
||||||
Ok(ruma::signatures::Verified::Signatures) => {
|
}
|
||||||
// Redact
|
Ok(ruma::signatures::Verified::All) => value,
|
||||||
match ruma::signatures::redact(&value, &RoomVersionId::Version6) {
|
};
|
||||||
Ok(obj) => obj,
|
|
||||||
Err(_) => return Err("Redaction failed".to_string()),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Ok(ruma::signatures::Verified::All) => value,
|
|
||||||
};
|
|
||||||
|
|
||||||
// Now that we have checked the signature and hashes we can add the eventID and convert
|
// Now that we have checked the signature and hashes we can add the eventID and convert
|
||||||
// to our PduEvent type
|
// to our PduEvent type
|
||||||
|
@ -705,9 +739,15 @@ fn handle_incoming_pdu<'a>(
|
||||||
// 4. fetch any missing auth events doing all checks listed here starting at 1. These are not timeline events
|
// 4. fetch any missing auth events doing all checks listed here starting at 1. These are not timeline events
|
||||||
// 5. Reject "due to auth events" if can't get all the auth events or some of the auth events are also rejected "due to auth events"
|
// 5. Reject "due to auth events" if can't get all the auth events or some of the auth events are also rejected "due to auth events"
|
||||||
debug!("Fetching auth events.");
|
debug!("Fetching auth events.");
|
||||||
fetch_and_handle_events(db, origin, &incoming_pdu.auth_events, &mut auth_cache)
|
fetch_and_handle_events(
|
||||||
.await
|
db,
|
||||||
.map_err(|e| e.to_string())?;
|
origin,
|
||||||
|
&incoming_pdu.auth_events,
|
||||||
|
pub_key_map,
|
||||||
|
auth_cache,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| e.to_string())?;
|
||||||
|
|
||||||
// 6. Reject "due to auth events" if the event doesn't pass auth based on the auth events
|
// 6. Reject "due to auth events" if the event doesn't pass auth based on the auth events
|
||||||
debug!("Checking auth.");
|
debug!("Checking auth.");
|
||||||
|
@ -738,12 +778,6 @@ fn handle_incoming_pdu<'a>(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let create_event = db
|
|
||||||
.rooms
|
|
||||||
.room_state_get(&incoming_pdu.room_id, &EventType::RoomCreate, "")
|
|
||||||
.map_err(|_| "Failed to ask database for event.")?
|
|
||||||
.ok_or_else(|| "Failed to find create event in db.")?;
|
|
||||||
|
|
||||||
// The original create event must be in the auth events
|
// The original create event must be in the auth events
|
||||||
if auth_events
|
if auth_events
|
||||||
.get(&(EventType::RoomCreate, "".to_owned()))
|
.get(&(EventType::RoomCreate, "".to_owned()))
|
||||||
|
@ -768,7 +802,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
let incoming_pdu = Arc::new(incoming_pdu.clone());
|
let incoming_pdu = Arc::new(incoming_pdu.clone());
|
||||||
|
|
||||||
if !state_res::event_auth::auth_check(
|
if !state_res::event_auth::auth_check(
|
||||||
&RoomVersionId::Version6,
|
&room_version,
|
||||||
&incoming_pdu,
|
&incoming_pdu,
|
||||||
previous_create.clone(),
|
previous_create.clone(),
|
||||||
&auth_events,
|
&auth_events,
|
||||||
|
@ -810,7 +844,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
&db.globals,
|
&db.globals,
|
||||||
origin,
|
origin,
|
||||||
get_room_state_ids::v1::Request {
|
get_room_state_ids::v1::Request {
|
||||||
room_id: &incoming_pdu.room_id,
|
room_id: &room_id,
|
||||||
event_id: &incoming_pdu.event_id,
|
event_id: &incoming_pdu.event_id,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -822,7 +856,8 @@ fn handle_incoming_pdu<'a>(
|
||||||
&db,
|
&db,
|
||||||
origin,
|
origin,
|
||||||
&res.pdu_ids,
|
&res.pdu_ids,
|
||||||
&mut auth_cache,
|
pub_key_map,
|
||||||
|
auth_cache,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
|
@ -854,7 +889,8 @@ fn handle_incoming_pdu<'a>(
|
||||||
&db,
|
&db,
|
||||||
origin,
|
origin,
|
||||||
&res.auth_chain_ids,
|
&res.auth_chain_ids,
|
||||||
&mut auth_cache,
|
pub_key_map,
|
||||||
|
auth_cache,
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
|
@ -871,7 +907,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
|
|
||||||
// 11. Check the auth of the event passes based on the state of the event
|
// 11. Check the auth of the event passes based on the state of the event
|
||||||
if !state_res::event_auth::auth_check(
|
if !state_res::event_auth::auth_check(
|
||||||
&RoomVersionId::Version6,
|
&room_version,
|
||||||
&incoming_pdu,
|
&incoming_pdu,
|
||||||
previous_create.clone(),
|
previous_create.clone(),
|
||||||
&state_at_incoming_event,
|
&state_at_incoming_event,
|
||||||
|
@ -886,14 +922,14 @@ fn handle_incoming_pdu<'a>(
|
||||||
// 13. Check if the event passes auth based on the "current state" of the room, if not "soft fail" it
|
// 13. Check if the event passes auth based on the "current state" of the room, if not "soft fail" it
|
||||||
let current_state = db
|
let current_state = db
|
||||||
.rooms
|
.rooms
|
||||||
.room_state_full(incoming_pdu.room_id())
|
.room_state_full(&room_id)
|
||||||
.map_err(|_| "Failed to load room state.".to_owned())?
|
.map_err(|_| "Failed to load room state.".to_owned())?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(k, v)| (k, Arc::new(v)))
|
.map(|(k, v)| (k, Arc::new(v)))
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
if !state_res::event_auth::auth_check(
|
if !state_res::event_auth::auth_check(
|
||||||
&RoomVersionId::Version6, // TODO: Use correct room version
|
&room_version,
|
||||||
&incoming_pdu,
|
&incoming_pdu,
|
||||||
previous_create,
|
previous_create,
|
||||||
¤t_state,
|
¤t_state,
|
||||||
|
@ -910,7 +946,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
// applied. We start with the previous extremities (aka leaves)
|
// applied. We start with the previous extremities (aka leaves)
|
||||||
let mut extremities = db
|
let mut extremities = db
|
||||||
.rooms
|
.rooms
|
||||||
.get_pdu_leaves(&incoming_pdu.room_id)
|
.get_pdu_leaves(&room_id)
|
||||||
.map_err(|_| "Failed to load room leaves".to_owned())?;
|
.map_err(|_| "Failed to load room leaves".to_owned())?;
|
||||||
|
|
||||||
// Remove any forward extremities that are referenced by this incoming event's prev_events
|
// Remove any forward extremities that are referenced by this incoming event's prev_events
|
||||||
|
@ -922,7 +958,11 @@ fn handle_incoming_pdu<'a>(
|
||||||
|
|
||||||
let mut fork_states = BTreeSet::new();
|
let mut fork_states = BTreeSet::new();
|
||||||
for id in &extremities {
|
for id in &extremities {
|
||||||
match db.rooms.get_pdu(&id).map_err(|_| "Failed to ask db for pdu.".to_owned())? {
|
match db
|
||||||
|
.rooms
|
||||||
|
.get_pdu(&id)
|
||||||
|
.map_err(|_| "Failed to ask db for pdu.".to_owned())?
|
||||||
|
{
|
||||||
Some(leaf_pdu) => {
|
Some(leaf_pdu) => {
|
||||||
let pdu_shortstatehash = db
|
let pdu_shortstatehash = db
|
||||||
.rooms
|
.rooms
|
||||||
|
@ -985,7 +1025,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
} else if fork_states.len() == 1 {
|
} else if fork_states.len() == 1 {
|
||||||
// There was only one state, so it has to be the room's current state (because that is
|
// There was only one state, so it has to be the room's current state (because that is
|
||||||
// always included)
|
// always included)
|
||||||
info!("Skipping stateres because there is no new state.");
|
debug!("Skipping stateres because there is no new state.");
|
||||||
fork_states[0]
|
fork_states[0]
|
||||||
.iter()
|
.iter()
|
||||||
.map(|(k, pdu)| (k.clone(), pdu.event_id.clone()))
|
.map(|(k, pdu)| (k.clone(), pdu.event_id.clone()))
|
||||||
|
@ -998,8 +1038,14 @@ fn handle_incoming_pdu<'a>(
|
||||||
for map in &fork_states {
|
for map in &fork_states {
|
||||||
let mut state_auth = vec![];
|
let mut state_auth = vec![];
|
||||||
for auth_id in map.values().flat_map(|pdu| &pdu.auth_events) {
|
for auth_id in map.values().flat_map(|pdu| &pdu.auth_events) {
|
||||||
match fetch_and_handle_events(&db, origin, &[auth_id.clone()], &mut auth_cache)
|
match fetch_and_handle_events(
|
||||||
.await
|
&db,
|
||||||
|
origin,
|
||||||
|
&[auth_id.clone()],
|
||||||
|
pub_key_map,
|
||||||
|
auth_cache,
|
||||||
|
)
|
||||||
|
.await
|
||||||
{
|
{
|
||||||
// This should always contain exactly one element when Ok
|
// This should always contain exactly one element when Ok
|
||||||
Ok(events) => state_auth.push(events[0].clone()),
|
Ok(events) => state_auth.push(events[0].clone()),
|
||||||
|
@ -1030,8 +1076,8 @@ fn handle_incoming_pdu<'a>(
|
||||||
);
|
);
|
||||||
|
|
||||||
match state_res::StateResolution::resolve(
|
match state_res::StateResolution::resolve(
|
||||||
&incoming_pdu.room_id,
|
&room_id,
|
||||||
&RoomVersionId::Version6,
|
&room_version,
|
||||||
&fork_states
|
&fork_states
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|map| {
|
.map(|map| {
|
||||||
|
@ -1044,7 +1090,7 @@ fn handle_incoming_pdu<'a>(
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|pdus| pdus.into_iter().map(|pdu| pdu.event_id().clone()).collect())
|
.map(|pdus| pdus.into_iter().map(|pdu| pdu.event_id().clone()).collect())
|
||||||
.collect(),
|
.collect(),
|
||||||
&mut auth_cache,
|
auth_cache,
|
||||||
) {
|
) {
|
||||||
Ok(new_state) => new_state,
|
Ok(new_state) => new_state,
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
|
@ -1089,6 +1135,7 @@ pub(crate) async fn fetch_and_handle_events(
|
||||||
db: &Database,
|
db: &Database,
|
||||||
origin: &ServerName,
|
origin: &ServerName,
|
||||||
events: &[EventId],
|
events: &[EventId],
|
||||||
|
pub_key_map: &mut BTreeMap<String, BTreeMap<String, String>>,
|
||||||
auth_cache: &mut EventMap<Arc<PduEvent>>,
|
auth_cache: &mut EventMap<Arc<PduEvent>>,
|
||||||
) -> Result<Vec<Arc<PduEvent>>> {
|
) -> Result<Vec<Arc<PduEvent>>> {
|
||||||
let mut pdus = vec![];
|
let mut pdus = vec![];
|
||||||
|
@ -1123,12 +1170,20 @@ pub(crate) async fn fetch_and_handle_events(
|
||||||
debug!("Got event over federation: {:?}", res);
|
debug!("Got event over federation: {:?}", res);
|
||||||
let (event_id, value) =
|
let (event_id, value) =
|
||||||
crate::pdu::gen_event_id_canonical_json(&res.pdu)?;
|
crate::pdu::gen_event_id_canonical_json(&res.pdu)?;
|
||||||
let pdu = handle_incoming_pdu(origin, &event_id, value, false, db)
|
let pdu = handle_incoming_pdu(
|
||||||
.await
|
origin,
|
||||||
.map_err(|e| {
|
&event_id,
|
||||||
error!("Error: {:?}", e);
|
value,
|
||||||
Error::Conflict("Authentication of event failed")
|
false,
|
||||||
})?;
|
db,
|
||||||
|
pub_key_map,
|
||||||
|
auth_cache,
|
||||||
|
)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
error!("Error: {:?}", e);
|
||||||
|
Error::Conflict("Authentication of event failed")
|
||||||
|
})?;
|
||||||
|
|
||||||
pdu
|
pdu
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue