From a7405cddc020817614f1186903c0fc95c2403dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20K=C3=B6sters?= Date: Tue, 24 Sep 2024 18:48:48 +0200 Subject: [PATCH] fix: Matrix media repo --- Cargo.lock | 27 ++++++++++---------- src/api/client_server/membership.rs | 2 +- src/api/server_server.rs | 13 +++++----- src/database/mod.rs | 38 ++++++++++++++++++++++------- 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 20082187..19e75ceb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2232,7 +2232,7 @@ dependencies = [ [[package]] name = "ruma" version = "0.10.1" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "assign", "js_int", @@ -2253,7 +2253,7 @@ dependencies = [ [[package]] name = "ruma-appservice-api" version = "0.10.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "js_int", "ruma-common", @@ -2265,7 +2265,7 @@ dependencies = [ [[package]] name = "ruma-client-api" version = "0.18.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "as_variant", "assign", @@ -2288,7 +2288,7 @@ dependencies = [ [[package]] name = "ruma-common" version = "0.13.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "as_variant", "base64 0.22.1", @@ -2318,7 +2318,7 @@ dependencies = [ [[package]] name = "ruma-events" version = "0.28.1" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "as_variant", "indexmap 2.2.6", @@ -2341,7 +2341,7 @@ dependencies = [ [[package]] name = "ruma-federation-api" version = "0.9.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "bytes", "http 1.1.0", @@ -2359,7 +2359,7 @@ dependencies = [ [[package]] name = "ruma-identifiers-validation" version = "0.9.5" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "js_int", "thiserror", @@ -2368,7 +2368,7 @@ dependencies = [ [[package]] name = "ruma-identity-service-api" version = "0.9.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "js_int", "ruma-common", @@ -2378,8 +2378,9 @@ dependencies = [ [[package]] name = "ruma-macros" version = "0.13.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ + "cfg-if", "once_cell", "proc-macro-crate", "proc-macro2", @@ -2393,7 +2394,7 @@ dependencies = [ [[package]] name = "ruma-push-gateway-api" version = "0.9.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "js_int", "ruma-common", @@ -2405,7 +2406,7 @@ dependencies = [ [[package]] name = "ruma-server-util" version = "0.3.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "headers", "http 1.1.0", @@ -2418,7 +2419,7 @@ dependencies = [ [[package]] name = "ruma-signatures" version = "0.15.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "base64 0.22.1", "ed25519-dalek", @@ -2434,7 +2435,7 @@ dependencies = [ [[package]] name = "ruma-state-res" version = "0.11.0" -source = "git+https://github.com/ruma/ruma#82417e394076440089cd8ada87485d9a44cc4ba0" +source = "git+https://github.com/ruma/ruma#c06af4385e0e30c48a8e9ca3d488da32102d0db9" dependencies = [ "itertools", "js_int", diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs index 3f3d25d5..baf2f239 100644 --- a/src/api/client_server/membership.rs +++ b/src/api/client_server/membership.rs @@ -97,7 +97,7 @@ pub async fn join_room_by_id_or_alias_route( let (servers, room_id) = match OwnedRoomId::try_from(body.room_id_or_alias) { Ok(room_id) => { - let mut servers = body.server_name.clone(); + let mut servers = body.via.clone(); servers.extend( services() .rooms diff --git a/src/api/server_server.rs b/src/api/server_server.rs index 56dd74d3..f6dc58fe 100644 --- a/src/api/server_server.rs +++ b/src/api/server_server.rs @@ -10,7 +10,7 @@ use crate::{ services, utils, Error, PduEvent, Result, Ruma, }; use axum::{response::IntoResponse, Json}; -use axum_extra::headers::{authorization::Credentials, CacheControl, Header}; +use axum_extra::headers::{CacheControl, Header}; use get_profile_information::v1::ProfileField; use http::header::AUTHORIZATION; @@ -52,7 +52,6 @@ use ruma::{ StateEventType, TimelineEventType, }, serde::{Base64, JsonObject, Raw}, - server_util::authorization::XMatrix, to_device::DeviceIdOrAllDevices, uint, user_id, CanonicalJsonObject, CanonicalJsonValue, EventId, MilliSecondsSinceUnixEpoch, OwnedEventId, OwnedRoomId, OwnedServerName, OwnedServerSigningKeyId, OwnedUserId, RoomId, @@ -275,15 +274,15 @@ where for s in signature_server { http_request.headers_mut().insert( AUTHORIZATION, - XMatrix::parse(&format!( + format!( "X-Matrix origin=\"{}\",destination=\"{}\",key=\"{}\",sig=\"{}\"", services().globals.server_name(), destination, s.0, s.1 - )) - .expect("When Ruma signs JSON, it produces a valid base64 signature. All other types are valid ServerNames or OwnedKeyId") - .encode(), + ) + .try_into() + .unwrap(), ); } } @@ -343,7 +342,7 @@ where response.map_err(|e| { warn!( - "Invalid 200 response from {} on: {} {}", + "Invalid 200 response from {} on: {} {:?}", &destination, url, e ); Error::BadServerResponse("Server returned bad 200 response.") diff --git a/src/database/mod.rs b/src/database/mod.rs index a8d44820..1caf61ca 100644 --- a/src/database/mod.rs +++ b/src/database/mod.rs @@ -425,7 +425,7 @@ impl KeyValueDatabase { } // If the database has any data, perform data migrations before starting - let latest_database_version = 14; + let latest_database_version = 15; if services().users.count()? > 0 { // MIGRATIONS @@ -942,7 +942,7 @@ impl KeyValueDatabase { warn!("Migration: 12 -> 13 finished"); } - if services().globals.database_version()? < 14 { + if services().globals.database_version()? < 15 { // Reconstruct all media using the filesystem db.mediaid_file.clear().unwrap(); @@ -981,23 +981,43 @@ impl KeyValueDatabase { let mut new_key = mediaid[..(mediaid.len() - removed_bytes)].to_vec(); assert!(*new_key.last().unwrap() == 0xff); + let mut shorter_key = new_key.clone(); + shorter_key.extend( + ruma::http_headers::ContentDisposition::new( + ruma::http_headers::ContentDispositionType::Inline, + ) + .to_string() + .as_bytes(), + ); + shorter_key.push(0xff); + shorter_key.extend_from_slice(content_type_bytes); + new_key.extend_from_slice(content_disposition.to_string().as_bytes()); new_key.push(0xff); new_key.extend_from_slice(content_type_bytes); // Some file names are too long. Ignore those. - let _ = fs::rename( + match fs::rename( services().globals.get_media_file(&mediaid), services().globals.get_media_file(&new_key), - ); - db.mediaid_file.insert(&new_key, &[])?; - } else { - db.mediaid_file.insert(&mediaid, &[])?; + ) { + Ok(_) => { + db.mediaid_file.insert(&mediaid, &[])?; + } + Err(_) => { + fs::rename( + services().globals.get_media_file(&mediaid), + services().globals.get_media_file(&shorter_key), + ) + .unwrap(); + db.mediaid_file.insert(&shorter_key, &[])?; + } + } } } - services().globals.bump_database_version(14)?; + services().globals.bump_database_version(15)?; - warn!("Migration: 13 -> 14 finished"); + warn!("Migration: 13 -> 15 finished"); } assert_eq!(