Update state-res, use the new Event trait
This also bumps ruma to latest and removes js_int infavor of the ruma re-export
This commit is contained in:
		
							parent
							
								
									4a92a29b56
								
							
						
					
					
						commit
						4b9976aa74
					
				
					 11 changed files with 252 additions and 183 deletions
				
			
		
							
								
								
									
										140
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										140
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
								
							|  | @ -212,8 +212,8 @@ dependencies = [ | |||
|  "js_int", | ||||
|  "jsonwebtoken", | ||||
|  "log", | ||||
|  "rand", | ||||
|  "regex", | ||||
|  "rand 0.7.3", | ||||
|  "reqwest", | ||||
|  "ring", | ||||
|  "rocket", | ||||
|  | @ -585,6 +585,17 @@ dependencies = [ | |||
|  "wasi 0.9.0+wasi-snapshot-preview1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "getrandom" | ||||
| version = "0.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ee8025cf36f917e6a52cce185b7c7177689b838b7ec138364e50cc2277a56cf4" | ||||
| dependencies = [ | ||||
|  "cfg-if 0.1.10", | ||||
|  "libc", | ||||
|  "wasi", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "gif" | ||||
| version = "0.11.1" | ||||
|  | @ -847,9 +858,9 @@ dependencies = [ | |||
| 
 | ||||
| [[package]] | ||||
| name = "js_int" | ||||
| version = "0.1.9" | ||||
| version = "0.2.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b96797f53235a1d6dc985f244a69de54b04c45b7e0e357a35c85a45a847d92f2" | ||||
| checksum = "fcae89e078a96b781b38f36225bb3a174b8f6e905dfec550dd16a13539c82acc" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
|  | @ -1396,11 +1407,23 @@ version = "0.7.3" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" | ||||
| dependencies = [ | ||||
|  "getrandom", | ||||
|  "getrandom 0.1.15", | ||||
|  "libc", | ||||
|  "rand_chacha", | ||||
|  "rand_core", | ||||
|  "rand_hc", | ||||
|  "rand_chacha 0.2.2", | ||||
|  "rand_core 0.5.1", | ||||
|  "rand_hc 0.2.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rand" | ||||
| version = "0.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a76330fb486679b4ace3670f117bbc9e16204005c4bde9c4bd372f45bed34f12" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
|  "rand_chacha 0.3.0", | ||||
|  "rand_core 0.6.0", | ||||
|  "rand_hc 0.3.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
|  | @ -1410,7 +1433,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index" | |||
| checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" | ||||
| dependencies = [ | ||||
|  "ppv-lite86", | ||||
|  "rand_core", | ||||
|  "rand_core 0.5.1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rand_chacha" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d" | ||||
| dependencies = [ | ||||
|  "ppv-lite86", | ||||
|  "rand_core 0.6.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
|  | @ -1419,7 +1452,16 @@ version = "0.5.1" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" | ||||
| dependencies = [ | ||||
|  "getrandom", | ||||
|  "getrandom 0.1.15", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rand_core" | ||||
| version = "0.6.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a8b34ba8cfb21243bd8df91854c830ff0d785fff2e82ebd4434c2644cb9ada18" | ||||
| dependencies = [ | ||||
|  "getrandom 0.2.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
|  | @ -1428,7 +1470,16 @@ version = "0.2.0" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c" | ||||
| dependencies = [ | ||||
|  "rand_core", | ||||
|  "rand_core 0.5.1", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rand_hc" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73" | ||||
| dependencies = [ | ||||
|  "rand_core 0.6.0", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
|  | @ -1443,7 +1494,7 @@ version = "0.3.5" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "de0737333e7a9502c789a36d7c7fa6092a49895d4faa31ca5df163857ded2e9d" | ||||
| dependencies = [ | ||||
|  "getrandom", | ||||
|  "getrandom 0.1.15", | ||||
|  "redox_syscall", | ||||
|  "rust-argon2", | ||||
| ] | ||||
|  | @ -1571,7 +1622,7 @@ dependencies = [ | |||
|  "memchr", | ||||
|  "num_cpus", | ||||
|  "parking_lot", | ||||
|  "rand", | ||||
|  "rand 0.7.3", | ||||
|  "ref-cast", | ||||
|  "rocket_codegen", | ||||
|  "rocket_http", | ||||
|  | @ -1625,7 +1676,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma" | ||||
| version = "0.0.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "assign", | ||||
|  "js_int", | ||||
|  | @ -1643,7 +1694,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-api" | ||||
| version = "0.17.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "http", | ||||
|  "percent-encoding", | ||||
|  | @ -1658,7 +1709,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-api-macros" | ||||
| version = "0.17.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "proc-macro-crate", | ||||
|  "proc-macro2", | ||||
|  | @ -1669,7 +1720,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-appservice-api" | ||||
| version = "0.2.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "ruma-api", | ||||
|  "ruma-common", | ||||
|  | @ -1683,7 +1734,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-client-api" | ||||
| version = "0.10.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "assign", | ||||
|  "http", | ||||
|  | @ -1702,7 +1753,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-common" | ||||
| version = "0.2.0" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "js_int", | ||||
|  "maplit", | ||||
|  | @ -1715,7 +1766,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-events" | ||||
| version = "0.22.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "js_int", | ||||
|  "ruma-common", | ||||
|  | @ -1729,7 +1780,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-events-macros" | ||||
| version = "0.22.0-alpha.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "proc-macro-crate", | ||||
|  "proc-macro2", | ||||
|  | @ -1740,7 +1791,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-federation-api" | ||||
| version = "0.0.3" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "js_int", | ||||
|  "ruma-api", | ||||
|  | @ -1755,21 +1806,21 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-identifiers" | ||||
| version = "0.17.4" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "paste", | ||||
|  "rand", | ||||
|  "rand 0.8.0", | ||||
|  "ruma-identifiers-macros", | ||||
|  "ruma-identifiers-validation", | ||||
|  "ruma-serde", | ||||
|  "ruma-serde-macros", | ||||
|  "serde", | ||||
|  "strum", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ruma-identifiers-macros" | ||||
| version = "0.17.4" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  | @ -1780,7 +1831,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-identifiers-validation" | ||||
| version = "0.1.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "serde", | ||||
| ] | ||||
|  | @ -1788,7 +1839,7 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-serde" | ||||
| version = "0.2.3" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "form_urlencoded", | ||||
|  "itoa", | ||||
|  | @ -1800,8 +1851,8 @@ dependencies = [ | |||
| 
 | ||||
| [[package]] | ||||
| name = "ruma-serde-macros" | ||||
| version = "0.2.0" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| version = "0.2.3" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "proc-macro-crate", | ||||
|  "proc-macro2", | ||||
|  | @ -1812,9 +1863,9 @@ dependencies = [ | |||
| [[package]] | ||||
| name = "ruma-signatures" | ||||
| version = "0.6.0-dev.1" | ||||
| source = "git+https://github.com/ruma/ruma?rev=45d01011554f9d07739e9a5edf5498d8ac16f273#45d01011554f9d07739e9a5edf5498d8ac16f273" | ||||
| source = "git+https://github.com/ruma/ruma?rev=210b6dd823ba89c5a44c3c9d913d377c4b54c896#210b6dd823ba89c5a44c3c9d913d377c4b54c896" | ||||
| dependencies = [ | ||||
|  "base64 0.12.3", | ||||
|  "base64 0.13.0", | ||||
|  "ring", | ||||
|  "ruma-identifiers", | ||||
|  "ruma-serde", | ||||
|  | @ -2076,7 +2127,7 @@ checksum = "3015a7d0a5fd5105c91c3710d42f9ccf0abfb287d62206484dcc67f9569a6483" | |||
| [[package]] | ||||
| name = "state-res" | ||||
| version = "0.1.0" | ||||
| source = "git+https://github.com/ruma/state-res?branch=conflict#e2c5bb401263e1b2fde60313acf5fc4ef072c74d" | ||||
| source = "git+https://github.com/ruma/state-res?branch=event-trait#9b96204571521e216a618d102459d662c52a2210" | ||||
| dependencies = [ | ||||
|  "itertools", | ||||
|  "maplit", | ||||
|  | @ -2136,27 +2187,6 @@ version = "0.1.5" | |||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "strum" | ||||
| version = "0.19.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b89a286a7e3b5720b9a477b23253bc50debac207c8d21505f8e70b36792f11b5" | ||||
| dependencies = [ | ||||
|  "strum_macros", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "strum_macros" | ||||
| version = "0.19.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e61bb0be289045cb80bfce000512e32d09f8337e54c186725da381377ad1f8d5" | ||||
| dependencies = [ | ||||
|  "heck", | ||||
|  "proc-macro2", | ||||
|  "quote", | ||||
|  "syn", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "syn" | ||||
| version = "1.0.55" | ||||
|  | @ -2176,7 +2206,7 @@ checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" | |||
| dependencies = [ | ||||
|  "cfg-if 0.1.10", | ||||
|  "libc", | ||||
|  "rand", | ||||
|  "rand 0.7.3", | ||||
|  "redox_syscall", | ||||
|  "remove_dir_all", | ||||
|  "winapi 0.3.9", | ||||
|  | @ -2416,7 +2446,7 @@ dependencies = [ | |||
|  "idna", | ||||
|  "lazy_static", | ||||
|  "log", | ||||
|  "rand", | ||||
|  "rand 0.7.3", | ||||
|  "smallvec", | ||||
|  "thiserror", | ||||
|  "tokio", | ||||
|  |  | |||
|  | @ -18,13 +18,14 @@ rocket = { git = "https://github.com/SergioBenitez/Rocket.git", rev = "1f1f44f33 | |||
| #rocket = { git = "https://github.com/timokoesters/Rocket.git", branch = "empty_parameters", default-features = false, features = ["tls"] } | ||||
| 
 | ||||
| # Used for matrix spec type definitions and helpers | ||||
| ruma = { git = "https://github.com/ruma/ruma", features = ["rand", "client-api", "federation-api", "unstable-pre-spec", "unstable-synapse-quirks", "unstable-exhaustive-types"], rev = "45d01011554f9d07739e9a5edf5498d8ac16f273" } | ||||
| ruma = { git = "https://github.com/ruma/ruma", features = ["rand", "client-api", "federation-api", "unstable-pre-spec", "unstable-synapse-quirks", "unstable-exhaustive-types"], rev = "210b6dd823ba89c5a44c3c9d913d377c4b54c896" } | ||||
| # ruma = { git = "https://github.com/DevinR528/ruma", features = ["rand", "client-api", "federation-api", "unstable-exhaustive-types", "unstable-pre-spec", "unstable-synapse-quirks"], branch = "verified-export" } | ||||
| # ruma = { path = "../ruma/ruma", features = ["unstable-exhaustive-types", "rand", "client-api", "federation-api", "unstable-pre-spec", "unstable-synapse-quirks"] } | ||||
| 
 | ||||
| # Used when doing state resolution | ||||
| # state-res = { git = "https://github.com/timokoesters/state-res", branch = "timo-spec-comp", features = ["unstable-pre-spec"] } | ||||
| state-res = { git = "https://github.com/ruma/state-res", branch = "conflict", features = ["unstable-pre-spec", "gen-eventid"] } | ||||
| # TODO: remove the gen-eventid feature | ||||
| state-res = { git = "https://github.com/ruma/state-res", branch = "event-trait", features = ["unstable-pre-spec", "gen-eventid"] } | ||||
| # state-res = { path = "../../state-res", features = ["unstable-pre-spec", "gen-eventid"] } | ||||
| 
 | ||||
| # Used for long polling and federation sender, should be the same as rocket::tokio | ||||
|  | @ -37,8 +38,7 @@ log = "0.4.11" | |||
| http = "0.2.1" | ||||
| # Used to find data directory for default db path | ||||
| directories = "3.0.1" | ||||
| # Used for number types for ruma | ||||
| js_int = "0.1.9" | ||||
| 
 | ||||
| # Used for ruma wrapper | ||||
| serde_json = { version = "1.0.60", features = ["raw_value"] } | ||||
| # Used for appservice registration files | ||||
|  |  | |||
|  | @ -124,7 +124,7 @@ pub async fn get_room_visibility_route( | |||
| pub async fn get_public_rooms_filtered_helper( | ||||
|     db: &Database, | ||||
|     server: Option<&ServerName>, | ||||
|     limit: Option<js_int::UInt>, | ||||
|     limit: Option<ruma::UInt>, | ||||
|     since: Option<&str>, | ||||
|     filter: &IncomingFilter, | ||||
|     _network: &IncomingRoomNetwork, | ||||
|  |  | |||
|  | @ -131,7 +131,7 @@ pub async fn get_content_thumbnail_route( | |||
|                     allow_remote: false, | ||||
|                     height: body.height, | ||||
|                     width: body.width, | ||||
|                     method: body.method, | ||||
|                     method: body.method.clone(), | ||||
|                     server_name: &body.server_name, | ||||
|                     media_id: &body.media_id, | ||||
|                 }, | ||||
|  |  | |||
|  | @ -21,7 +21,7 @@ use ruma::{ | |||
|     serde::{to_canonical_value, CanonicalJsonObject, Raw}, | ||||
|     EventId, RoomId, RoomVersionId, ServerName, UserId, | ||||
| }; | ||||
| use state_res::StateEvent; | ||||
| use state_res::Event; | ||||
| use std::{ | ||||
|     collections::{BTreeMap, HashMap, HashSet}, | ||||
|     convert::TryFrom, | ||||
|  | @ -594,19 +594,19 @@ async fn join_room_by_id_helper( | |||
|             .chain(iter::once(Ok((event_id, join_event)))) // Add join event we just created
 | ||||
|             .map(|r| { | ||||
|                 let (event_id, value) = r?; | ||||
|                 state_res::StateEvent::from_id_canon_obj(event_id.clone(), value.clone()) | ||||
|                 PduEvent::from_id_val(&event_id, value.clone()) | ||||
|                     .map(|ev| (event_id, Arc::new(ev))) | ||||
|                     .map_err(|e| { | ||||
|                         warn!("{:?}: {}", value, e); | ||||
|                         Error::BadServerResponse("Invalid PDU in send_join response.") | ||||
|                     }) | ||||
|             }) | ||||
|             .collect::<Result<BTreeMap<EventId, Arc<StateEvent>>>>()?; | ||||
|             .collect::<Result<BTreeMap<EventId, Arc<PduEvent>>>>()?; | ||||
| 
 | ||||
|         let control_events = event_map | ||||
|             .values() | ||||
|             .filter(|pdu| pdu.is_power_event()) | ||||
|             .map(|pdu| pdu.event_id()) | ||||
|             .filter(|pdu| state_res::is_power_event(pdu)) | ||||
|             .map(|pdu| pdu.event_id.clone()) | ||||
|             .collect::<Vec<_>>(); | ||||
| 
 | ||||
|         // These events are not guaranteed to be sorted but they are resolved according to spec
 | ||||
|  | @ -646,7 +646,8 @@ async fn join_room_by_id_helper( | |||
|             .cloned() | ||||
|             .collect::<Vec<_>>(); | ||||
| 
 | ||||
|         let power_level = resolved_control_events.get(&(EventType::RoomPowerLevels, "".into())); | ||||
|         let power_level = | ||||
|             resolved_control_events.get(&(EventType::RoomPowerLevels, Some("".to_string()))); | ||||
|         // Sort the remaining non control events
 | ||||
|         let sorted_event_ids = state_res::StateResolution::mainline_sort( | ||||
|             room_id, | ||||
|  | @ -685,8 +686,13 @@ async fn join_room_by_id_helper( | |||
|             pdu_id.push(0xff); | ||||
|             pdu_id.extend_from_slice(&count.to_be_bytes()); | ||||
|             db.rooms.append_pdu( | ||||
| <<<<<<< HEAD | ||||
|                 &PduEvent::from(&**pdu), | ||||
|                 utils::to_canonical_object(&**pdu).expect("Pdu is valid canonical object"), | ||||
| ======= | ||||
|                 &pdu, | ||||
|                 &utils::to_canonical_object(&**pdu).expect("Pdu is valid canonical object"), | ||||
| >>>>>>> 6232d1f (Update state-res, use the new Event trait) | ||||
|                 count, | ||||
|                 pdu_id.clone().into(), | ||||
|                 &db.globals, | ||||
|  | @ -695,7 +701,9 @@ async fn join_room_by_id_helper( | |||
|             )?; | ||||
| 
 | ||||
|             if state_events.contains(ev_id) { | ||||
|                 state.insert((pdu.kind(), pdu.state_key()), pdu_id); | ||||
|                 if let Some(key) = &pdu.state_key { | ||||
|                     state.insert((pdu.kind(), key.to_string()), pdu_id); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -8,7 +8,10 @@ use ruma::{ | |||
|     events::EventContent, | ||||
|     EventId, | ||||
| }; | ||||
| use std::convert::{TryFrom, TryInto}; | ||||
| use std::{ | ||||
|     collections::BTreeMap, | ||||
|     convert::{TryFrom, TryInto}, | ||||
| }; | ||||
| 
 | ||||
| #[cfg(feature = "conduit_bin")] | ||||
| use rocket::{get, put}; | ||||
|  | @ -46,7 +49,7 @@ pub async fn send_message_event_route( | |||
|         return Ok(send_message_event::Response { event_id }.into()); | ||||
|     } | ||||
| 
 | ||||
|     let mut unsigned = serde_json::Map::new(); | ||||
|     let mut unsigned = BTreeMap::new(); | ||||
|     unsigned.insert("transaction_id".to_owned(), body.txn_id.clone().into()); | ||||
| 
 | ||||
|     let event_id = db.rooms.build_and_append_pdu( | ||||
|  |  | |||
|  | @ -20,7 +20,7 @@ use ruma::{ | |||
|     EventId, RoomAliasId, RoomId, RoomVersionId, ServerName, UserId, | ||||
| }; | ||||
| use sled::IVec; | ||||
| use state_res::{event_auth, Error as StateError, Requester, StateEvent, StateMap, StateStore}; | ||||
| use state_res::{event_auth, Error as StateError, Event, StateMap, StateStore}; | ||||
| 
 | ||||
| use std::{ | ||||
|     collections::{BTreeMap, HashMap}, | ||||
|  | @ -67,12 +67,8 @@ pub struct Rooms { | |||
|     pub(super) stateid_pduid: sled::Tree, // StateId = StateHash + Short, PduId = Count (without roomid)
 | ||||
| } | ||||
| 
 | ||||
| impl StateStore for Rooms { | ||||
|     fn get_event( | ||||
|         &self, | ||||
|         room_id: &RoomId, | ||||
|         event_id: &EventId, | ||||
|     ) -> state_res::Result<Arc<StateEvent>> { | ||||
| impl StateStore<PduEvent> for Rooms { | ||||
|     fn get_event(&self, room_id: &RoomId, event_id: &EventId) -> state_res::Result<Arc<PduEvent>> { | ||||
|         let pid = self | ||||
|             .get_pdu_id(event_id) | ||||
|             .map_err(StateError::custom)? | ||||
|  | @ -91,7 +87,7 @@ impl StateStore for Rooms { | |||
|                 .ok_or_else(|| StateError::NotFound("PDU via pduid not found in db.".into()))?, | ||||
|         ) | ||||
|         .map_err(Into::into) | ||||
|         .and_then(|pdu: StateEvent| { | ||||
|         .and_then(|pdu: PduEvent| { | ||||
|             // conduit's PDU's always contain a room_id but some
 | ||||
|             // of ruma's do not so this must be an Option
 | ||||
|             if pdu.room_id() == room_id { | ||||
|  | @ -112,7 +108,7 @@ impl Rooms { | |||
|         &self, | ||||
|         room_id: &RoomId, | ||||
|         state_hash: &StateHashId, | ||||
|     ) -> Result<StateMap<PduEvent>> { | ||||
|     ) -> Result<BTreeMap<(EventType, String), PduEvent>> { | ||||
|         self.stateid_pduid | ||||
|             .scan_prefix(&state_hash) | ||||
|             .values() | ||||
|  | @ -141,7 +137,7 @@ impl Rooms { | |||
|                     pdu, | ||||
|                 )) | ||||
|             }) | ||||
|             .collect::<Result<StateMap<_>>>() | ||||
|             .collect() | ||||
|     } | ||||
| 
 | ||||
|     /// Returns a single PDU from `room_id` with key (`event_type`, `state_key`).
 | ||||
|  | @ -181,7 +177,7 @@ impl Rooms { | |||
|                     ))) | ||||
|                 }) | ||||
|         } else { | ||||
|             return Ok(None); | ||||
|             Ok(None) | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  | @ -205,7 +201,7 @@ impl Rooms { | |||
|         content: serde_json::Value, | ||||
|     ) -> Result<StateMap<PduEvent>> { | ||||
|         let auth_events = state_res::auth_types_for_event( | ||||
|             kind.clone(), | ||||
|             kind, | ||||
|             sender, | ||||
|             state_key.map(|s| s.to_string()), | ||||
|             content, | ||||
|  | @ -213,7 +209,13 @@ impl Rooms { | |||
| 
 | ||||
|         let mut events = StateMap::new(); | ||||
|         for (event_type, state_key) in auth_events { | ||||
|             if let Some((_, pdu)) = self.room_state_get(room_id, &event_type, &state_key)? { | ||||
|             if let Some((_, pdu)) = self.room_state_get( | ||||
|                 room_id, | ||||
|                 &event_type, | ||||
|                 &state_key | ||||
|                     .as_deref() | ||||
|                     .expect("found a non state event in auth events"), | ||||
|             )? { | ||||
|                 events.insert((event_type, state_key), pdu); | ||||
|             } | ||||
|         } | ||||
|  | @ -290,7 +292,10 @@ impl Rooms { | |||
|     } | ||||
| 
 | ||||
|     /// Returns the full room state.
 | ||||
|     pub fn room_state_full(&self, room_id: &RoomId) -> Result<StateMap<PduEvent>> { | ||||
|     pub fn room_state_full( | ||||
|         &self, | ||||
|         room_id: &RoomId, | ||||
|     ) -> Result<BTreeMap<(EventType, String), PduEvent>> { | ||||
|         if let Some(current_state_hash) = self.current_state_hash(room_id)? { | ||||
|             self.state_full(&room_id, ¤t_state_hash) | ||||
|         } else { | ||||
|  | @ -795,23 +800,40 @@ impl Rooms { | |||
|                             ErrorKind::Unknown, | ||||
|                             "Membership can't be the first event", | ||||
|                         ))?)? | ||||
|                         .map(|pdu| pdu.convert_for_state_res()); | ||||
|                         .map(Arc::new); | ||||
|                     event_auth::valid_membership_change( | ||||
|                         // TODO this is a bit of a hack but not sure how to have a type
 | ||||
|                         // declared in `state_res` crate easily convert to/from conduit::PduEvent
 | ||||
|                         Requester { | ||||
|                             prev_event_ids: prev_events.to_owned(), | ||||
|                             room_id: &room_id, | ||||
|                             content: &content, | ||||
|                             state_key: Some(state_key.to_owned()), | ||||
|                             sender: &sender, | ||||
|                         }, | ||||
|                         &Arc::new(PduEvent { | ||||
|                             event_id: ruma::event_id!("$thiswillbefilledinlater"), | ||||
|                             room_id: room_id.clone(), | ||||
|                             sender: sender.clone(), | ||||
|                             origin_server_ts: utils::millis_since_unix_epoch() | ||||
|                                 .try_into() | ||||
|                                 .expect("time is valid"), | ||||
|                             kind: event_type, | ||||
|                             content, | ||||
|                             state_key: Some(state_key.clone()), | ||||
|                             prev_events, | ||||
|                             depth: (prev_events.len() as u32).into(), | ||||
|                             auth_events: auth_events | ||||
|                                 .into_iter() | ||||
|                                 .map(|(_, pdu)| pdu.event_id) | ||||
|                                 .collect(), | ||||
|                             redacts, | ||||
|                             unsigned: unsigned | ||||
|                                 .map_or_else(BTreeMap::new, |m| m.into_iter().collect()), | ||||
|                             hashes: ruma::events::pdu::EventHash { | ||||
|                                 sha256: "aaa".to_owned(), | ||||
|                             }, | ||||
|                             signatures: BTreeMap::new(), | ||||
|                         }), | ||||
|                         prev_event, | ||||
|                         None, // TODO: third party invite
 | ||||
|                         &auth_events | ||||
|                             .iter() | ||||
|                             .map(|((ty, key), pdu)| { | ||||
|                                 Ok(((ty.clone(), key.clone()), pdu.convert_for_state_res())) | ||||
|                                 Ok(((ty.clone(), key.clone()), Arc::new(pdu.clone()))) | ||||
|                             }) | ||||
|                             .collect::<Result<StateMap<_>>>()?, | ||||
|                     ) | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| use crate::{utils, Error, Result}; | ||||
| use js_int::UInt; | ||||
| use ruma::{ | ||||
|     events::{ | ||||
|         presence::{PresenceEvent, PresenceEventContent}, | ||||
|  | @ -7,7 +6,7 @@ use ruma::{ | |||
|     }, | ||||
|     presence::PresenceState, | ||||
|     serde::Raw, | ||||
|     RoomId, UserId, | ||||
|     RoomId, UInt, UserId, | ||||
| }; | ||||
| use std::{ | ||||
|     collections::HashMap, | ||||
|  |  | |||
|  | @ -1,5 +1,4 @@ | |||
| use crate::{utils, Error, Result}; | ||||
| use js_int::UInt; | ||||
| use ruma::{ | ||||
|     api::client::{ | ||||
|         error::ErrorKind, | ||||
|  | @ -11,7 +10,7 @@ use ruma::{ | |||
|     encryption::DeviceKeys, | ||||
|     events::{AnyToDeviceEvent, EventType}, | ||||
|     serde::Raw, | ||||
|     DeviceId, DeviceKeyAlgorithm, DeviceKeyId, UserId, | ||||
|     DeviceId, DeviceKeyAlgorithm, DeviceKeyId, UInt, UserId, | ||||
| }; | ||||
| use std::{collections::BTreeMap, convert::TryFrom, mem, time::SystemTime}; | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										116
									
								
								src/pdu.rs
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								src/pdu.rs
									
									
									
									
									
								
							|  | @ -1,12 +1,11 @@ | |||
| use crate::Error; | ||||
| use js_int::UInt; | ||||
| use ruma::{ | ||||
|     events::{ | ||||
|         pdu::EventHash, room::member::MemberEventContent, AnyEvent, AnyRoomEvent, AnyStateEvent, | ||||
|         AnyStrippedStateEvent, AnySyncRoomEvent, AnySyncStateEvent, EventType, StateEvent, | ||||
|     }, | ||||
|     serde::{to_canonical_value, CanonicalJsonObject, CanonicalJsonValue, Raw}, | ||||
|     EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UserId, | ||||
|     EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UInt, UserId, | ||||
| }; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_json::json; | ||||
|  | @ -33,8 +32,8 @@ pub struct PduEvent { | |||
|     pub auth_events: Vec<EventId>, | ||||
|     #[serde(skip_serializing_if = "Option::is_none")] | ||||
|     pub redacts: Option<EventId>, | ||||
|     #[serde(default, skip_serializing_if = "serde_json::Map::is_empty")] | ||||
|     pub unsigned: serde_json::Map<String, serde_json::Value>, | ||||
|     #[serde(default, skip_serializing_if = "BTreeMap::is_empty")] | ||||
|     pub unsigned: BTreeMap<String, serde_json::Value>, | ||||
|     pub hashes: EventHash, | ||||
|     pub signatures: BTreeMap<Box<ServerName>, BTreeMap<ServerSigningKeyId, String>>, | ||||
| } | ||||
|  | @ -227,61 +226,66 @@ impl PduEvent { | |||
|         ) | ||||
|         .expect("Raw::from_value always works") | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl From<&state_res::StateEvent> for PduEvent { | ||||
|     fn from(pdu: &state_res::StateEvent) -> Self { | ||||
|         Self { | ||||
|             event_id: pdu.event_id(), | ||||
|             room_id: pdu.room_id().clone(), | ||||
|             sender: pdu.sender().clone(), | ||||
|             origin_server_ts: (pdu | ||||
|                 .origin_server_ts() | ||||
|                 .duration_since(UNIX_EPOCH) | ||||
|                 .expect("time is valid") | ||||
|                 .as_millis() as u64) | ||||
|                 .try_into() | ||||
|                 .expect("time is valid"), | ||||
|             kind: pdu.kind(), | ||||
|             content: pdu.content().clone(), | ||||
|             state_key: Some(pdu.state_key()), | ||||
|             prev_events: pdu.prev_event_ids(), | ||||
|             depth: *pdu.depth(), | ||||
|             auth_events: pdu.auth_events(), | ||||
|             redacts: pdu.redacts().cloned(), | ||||
|             unsigned: pdu.unsigned().clone().into_iter().collect(), | ||||
|             hashes: pdu.hashes().clone(), | ||||
|             signatures: pdu.signatures(), | ||||
|         } | ||||
|     pub fn from_id_val( | ||||
|         event_id: &EventId, | ||||
|         json: CanonicalJsonObject, | ||||
|     ) -> Result<Self, serde_json::Error> { | ||||
|         json.insert( | ||||
|             "event_id".to_string(), | ||||
|             ruma::serde::to_canonical_value(event_id).expect("event_id is a valid Value"), | ||||
|         ); | ||||
| 
 | ||||
|         serde_json::from_value(serde_json::to_value(json).expect("valid JSON")) | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl PduEvent { | ||||
|     pub fn convert_for_state_res(&self) -> Arc<state_res::StateEvent> { | ||||
|         Arc::new( | ||||
|             // For consistency of eventId (just in case) we use the one
 | ||||
|             // generated by conduit for everything.
 | ||||
|             state_res::StateEvent::from_id_value( | ||||
|                 self.event_id.clone(), | ||||
|                 json!({ | ||||
|                     "event_id": self.event_id, | ||||
|                     "room_id": self.room_id, | ||||
|                     "sender": self.sender, | ||||
|                     "origin_server_ts": self.origin_server_ts, | ||||
|                     "type": self.kind, | ||||
|                     "content": self.content, | ||||
|                     "state_key": self.state_key, | ||||
|                     "prev_events": self.prev_events, | ||||
|                     "depth": self.depth, | ||||
|                     "auth_events": self.auth_events, | ||||
|                     "redacts": self.redacts, | ||||
|                     "unsigned": self.unsigned, | ||||
|                     "hashes": self.hashes, | ||||
|                     "signatures": self.signatures, | ||||
|                 }), | ||||
|             ) | ||||
|             .expect("all conduit PDUs are state events"), | ||||
|         ) | ||||
| impl state_res::Event for PduEvent { | ||||
|     fn event_id(&self) -> &EventId { | ||||
|         &self.event_id | ||||
|     } | ||||
| 
 | ||||
|     fn room_id(&self) -> &RoomId { | ||||
|         &self.room_id | ||||
|     } | ||||
| 
 | ||||
|     fn sender(&self) -> &UserId { | ||||
|         &self.sender | ||||
|     } | ||||
|     fn kind(&self) -> EventType { | ||||
|         self.kind.clone() | ||||
|     } | ||||
| 
 | ||||
|     fn content(&self) -> serde_json::Value { | ||||
|         self.content.clone() | ||||
|     } | ||||
|     fn origin_server_ts(&self) -> std::time::SystemTime { | ||||
|         UNIX_EPOCH + std::time::Duration::from_millis(self.origin_server_ts.into()) | ||||
|     } | ||||
| 
 | ||||
|     fn state_key(&self) -> Option<String> { | ||||
|         self.state_key.clone() | ||||
|     } | ||||
|     fn prev_events(&self) -> Vec<EventId> { | ||||
|         self.prev_events.to_vec() | ||||
|     } | ||||
|     fn depth(&self) -> &UInt { | ||||
|         &self.depth | ||||
|     } | ||||
|     fn auth_events(&self) -> Vec<EventId> { | ||||
|         self.auth_events.to_vec() | ||||
|     } | ||||
|     fn redacts(&self) -> Option<&EventId> { | ||||
|         self.redacts.as_ref() | ||||
|     } | ||||
|     fn hashes(&self) -> &EventHash { | ||||
|         &self.hashes | ||||
|     } | ||||
|     fn signatures(&self) -> BTreeMap<Box<ServerName>, BTreeMap<ruma::ServerSigningKeyId, String>> { | ||||
|         self.signatures.clone() | ||||
|     } | ||||
|     fn unsigned(&self) -> &BTreeMap<String, serde_json::Value> { | ||||
|         &self.unsigned | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | @ -315,7 +319,7 @@ pub struct PduBuilder { | |||
|     #[serde(rename = "type")] | ||||
|     pub event_type: EventType, | ||||
|     pub content: serde_json::Value, | ||||
|     pub unsigned: Option<serde_json::Map<String, serde_json::Value>>, | ||||
|     pub unsigned: Option<BTreeMap<String, serde_json::Value>>, | ||||
|     pub state_key: Option<String>, | ||||
|     pub redacts: Option<EventId>, | ||||
| } | ||||
|  |  | |||
|  | @ -20,12 +20,13 @@ use ruma::{ | |||
|     directory::{IncomingFilter, IncomingRoomNetwork}, | ||||
|     EventId, RoomId, RoomVersionId, ServerName, ServerSigningKeyId, UserId, | ||||
| }; | ||||
| use state_res::StateMap; | ||||
| use state_res::{Event, StateMap}; | ||||
| use std::{ | ||||
|     collections::{BTreeMap, BTreeSet}, | ||||
|     convert::TryFrom, | ||||
|     fmt::Debug, | ||||
|     net::{IpAddr, SocketAddr}, | ||||
|     sync::Arc, | ||||
|     time::{Duration, SystemTime}, | ||||
| }; | ||||
| 
 | ||||
|  | @ -610,17 +611,12 @@ pub async fn send_transaction_message_route<'a>( | |||
|             continue; | ||||
|         } | ||||
| 
 | ||||
|         // TODO: remove the need to convert to state_res
 | ||||
|         let event = pdu.convert_for_state_res(); | ||||
|         let event = Arc::new(pdu.clone()); | ||||
| 
 | ||||
|         let previous = pdu | ||||
|             .prev_events | ||||
|             .first() | ||||
|             .map(|id| { | ||||
|                 db.rooms | ||||
|                     .get_pdu(id) | ||||
|                     .expect("todo") | ||||
|                     .map(|ev| ev.convert_for_state_res()) | ||||
|             }) | ||||
|             .map(|id| db.rooms.get_pdu(id).expect("todo").map(Arc::new)) | ||||
|             .flatten(); | ||||
| 
 | ||||
|         // 4.
 | ||||
|  | @ -637,27 +633,32 @@ pub async fn send_transaction_message_route<'a>( | |||
|             previous.clone(), | ||||
|             auth_events | ||||
|                 .into_iter() | ||||
|                 .map(|(k, v)| (k, v.convert_for_state_res())) | ||||
|                 .map(|(k, v)| (k, Arc::new(v))) | ||||
|                 .collect(), | ||||
|             None, | ||||
|         ) | ||||
|         .map_err(|_e| Error::Conflict("Auth check failed"))? | ||||
|         { | ||||
|             resolved_map.insert( | ||||
|                 event.event_id(), | ||||
|                 pdu.event_id, | ||||
|                 Err("Event has failed auth check with auth events".into()), | ||||
|             ); | ||||
|             continue; | ||||
|         } | ||||
| 
 | ||||
|         let mut previous_states = vec![]; | ||||
|         let mut previous_states: Vec<StateMap<Arc<PduEvent>>> = vec![]; | ||||
|         for id in &pdu.prev_events { | ||||
|             if let Some(id) = db.rooms.get_pdu_id(id)? { | ||||
|                 let state_hash = db | ||||
|                     .rooms | ||||
|                     .pdu_state_hash(&id)? | ||||
|                     .expect("found pdu with no statehash"); | ||||
|                 let state = db.rooms.state_full(&pdu.room_id, &state_hash)?; | ||||
|                 let state = db | ||||
|                     .rooms | ||||
|                     .state_full(&pdu.room_id, &state_hash)? | ||||
|                     .into_iter() | ||||
|                     .map(|((et, sk), ev)| ((et, Some(sk)), Arc::new(ev))) | ||||
|                     .collect(); | ||||
|                 previous_states.push(state); | ||||
|             } else { | ||||
|                 // fetch the state
 | ||||
|  | @ -693,7 +694,7 @@ pub async fn send_transaction_message_route<'a>( | |||
|                     .into_iter() | ||||
|                     .map(|map| { | ||||
|                         map.into_iter() | ||||
|                             .map(|(k, v)| (k, v.event_id)) | ||||
|                             .map(|(k, v)| (k, v.event_id.clone())) | ||||
|                             .collect::<StateMap<_>>() | ||||
|                     }) | ||||
|                     .collect::<Vec<_>>(), | ||||
|  | @ -702,7 +703,7 @@ pub async fn send_transaction_message_route<'a>( | |||
|             ) { | ||||
|                 Ok(res) => res | ||||
|                     .into_iter() | ||||
|                     .map(|(k, v)| (k, db.rooms.get_pdu(&v).unwrap().unwrap())) | ||||
|                     .map(|(k, v)| (k, Arc::new(db.rooms.get_pdu(&v).unwrap().unwrap()))) | ||||
|                     .collect(), | ||||
|                 Err(e) => panic!("{:?}", e), | ||||
|             } | ||||
|  | @ -712,17 +713,14 @@ pub async fn send_transaction_message_route<'a>( | |||
|             &RoomVersionId::Version6, | ||||
|             &event, | ||||
|             previous.clone(), | ||||
|             state_at_event | ||||
|                 .into_iter() | ||||
|                 .map(|(k, v)| (k, v.convert_for_state_res())) | ||||
|                 .collect(), | ||||
|             state_at_event, | ||||
|             None, | ||||
|         ) | ||||
|         .map_err(|_e| Error::Conflict("Auth check failed"))? | ||||
|         { | ||||
|             // Event failed auth with state_at
 | ||||
|             resolved_map.insert( | ||||
|                 event.event_id(), | ||||
|                 pdu.event_id, | ||||
|                 Err("Event has failed auth check with state at the event".into()), | ||||
|             ); | ||||
|             continue; | ||||
|  | @ -733,14 +731,20 @@ pub async fn send_transaction_message_route<'a>( | |||
| 
 | ||||
|         // Gather the forward extremities and resolve
 | ||||
|         let forward_extrems = forward_extremity_ids(&db, &pdu.room_id)?; | ||||
|         let mut fork_states = vec![]; | ||||
|         let mut fork_states: Vec<StateMap<Arc<PduEvent>>> = vec![]; | ||||
|         for id in &forward_extrems { | ||||
|             if let Some(id) = db.rooms.get_pdu_id(id)? { | ||||
|                 let state_hash = db | ||||
|                     .rooms | ||||
|                     .pdu_state_hash(&id)? | ||||
|                     .expect("found pdu with no statehash"); | ||||
|                 let state = db.rooms.state_full(&pdu.room_id, &state_hash)?; | ||||
|                 let state = db | ||||
|                     .rooms | ||||
|                     .state_full(&pdu.room_id, &state_hash)? | ||||
|                     .into_iter() | ||||
|                     .map(|(k, v)| ((k.0, Some(k.1)), Arc::new(v))) | ||||
|                     .collect(); | ||||
| 
 | ||||
|                 fork_states.push(state); | ||||
|             } else { | ||||
|                 // This is probably an error??
 | ||||
|  | @ -776,7 +780,7 @@ pub async fn send_transaction_message_route<'a>( | |||
|                     .into_iter() | ||||
|                     .map(|map| { | ||||
|                         map.into_iter() | ||||
|                             .map(|(k, v)| (k, v.event_id)) | ||||
|                             .map(|(k, v)| (k, v.event_id.clone())) | ||||
|                             .collect::<StateMap<_>>() | ||||
|                     }) | ||||
|                     .collect::<Vec<_>>(), | ||||
|  | @ -785,7 +789,7 @@ pub async fn send_transaction_message_route<'a>( | |||
|             ) { | ||||
|                 Ok(res) => res | ||||
|                     .into_iter() | ||||
|                     .map(|(k, v)| (k, db.rooms.get_pdu(&v).unwrap().unwrap())) | ||||
|                     .map(|(k, v)| (k, Arc::new(db.rooms.get_pdu(&v).unwrap().unwrap()))) | ||||
|                     .collect(), | ||||
|                 Err(e) => panic!("{:?}", e), | ||||
|             } | ||||
|  | @ -795,20 +799,20 @@ pub async fn send_transaction_message_route<'a>( | |||
|             &RoomVersionId::Version6, | ||||
|             &event, | ||||
|             previous, | ||||
|             state_at_forks | ||||
|                 .into_iter() | ||||
|                 .map(|(k, v)| (k, v.convert_for_state_res())) | ||||
|                 .collect(), | ||||
|             state_at_forks, | ||||
|             None, | ||||
|         ) | ||||
|         .map_err(|_e| Error::Conflict("Auth check failed"))? | ||||
|         { | ||||
|             // Soft fail
 | ||||
|             resolved_map.insert(event.event_id(), Err("Event has been soft failed".into())); | ||||
|             resolved_map.insert( | ||||
|                 event.event_id().clone(), | ||||
|                 Err("Event has been soft failed".into()), | ||||
|             ); | ||||
|         } else { | ||||
|             append_state(&db, &pdu)?; | ||||
|             // Event has passed all auth/stateres checks
 | ||||
|             resolved_map.insert(event.event_id(), Ok(())); | ||||
|             resolved_map.insert(event.event_id().clone(), Ok(())); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue