From c95b2470babba0389760ba53dd52fad23b7f6be6 Mon Sep 17 00:00:00 2001 From: Dominic Date: Tue, 8 Apr 2025 23:11:27 +0200 Subject: [PATCH 1/3] matrix: use /v3/ instead of /r0/ --- mstickerlib/src/matrix/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mstickerlib/src/matrix/mod.rs b/mstickerlib/src/matrix/mod.rs index 4c39acc..514e1de 100644 --- a/mstickerlib/src/matrix/mod.rs +++ b/mstickerlib/src/matrix/mod.rs @@ -135,7 +135,7 @@ pub async fn set_widget(matrix: &Config, sender: String, url: String) -> Result< let answer = CLIENT .get() .put(format!( - "{}/_matrix/client/r0/user/{}/account_data/m.widgets", + "{}/_matrix/client/v3/user/{}/account_data/m.widgets", matrix.homeserver_url, matrix.user )) .query(&[("access_token", &matrix.access_token)]) @@ -159,7 +159,7 @@ pub async fn whoami(matrix: &Config) -> Result { Url::parse(&matrix.homeserver_url)?; //check if homeserver_url is a valid url let answer = CLIENT .get() - .get(format!("{}/_matrix/client/r0/account/whoami", matrix.homeserver_url)) + .get(format!("{}/_matrix/client/v3/account/whoami", matrix.homeserver_url)) .query(&[("access_token", &matrix.access_token)]) .send() .await?; @@ -185,7 +185,7 @@ pub(crate) async fn upload(matrix: &Config, filename: &String, data: Arc pub(crate) async fn upload_ref(matrix: &Config, filename: &String, data: &[u8], mimetype: &str) -> Result { let answer = CLIENT .get() - .post(&format!("{}/_matrix/media/r0/upload", matrix.homeserver_url)) + .post(&format!("{}/_matrix/media/v3/upload", matrix.homeserver_url)) .query(&[("access_token", &matrix.access_token), ("filename", filename)]) .header("Content-Type", mimetype) .body(data.to_owned()) //TODO check for better solution From 99a9dc41a2aa59ef5f084e5b22988a70c5ba4b0c Mon Sep 17 00:00:00 2001 From: Dominic Date: Tue, 8 Apr 2025 23:22:27 +0200 Subject: [PATCH 2/3] strip directories before uploading media --- mstickerlib/src/matrix/mod.rs | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/mstickerlib/src/matrix/mod.rs b/mstickerlib/src/matrix/mod.rs index 514e1de..2614a13 100644 --- a/mstickerlib/src/matrix/mod.rs +++ b/mstickerlib/src/matrix/mod.rs @@ -13,6 +13,7 @@ use serde::{Deserialize, Deserializer, Serialize, Serializer}; use std::{ fmt::{Debug, Display}, ops::Deref, + path::Path, sync::Arc }; use stickerpicker::StickerWidget; @@ -176,17 +177,29 @@ pub async fn whoami(matrix: &Config) -> Result { } } -pub(crate) async fn upload(matrix: &Config, filename: &String, data: Arc>, mimetype: &str) -> Result { - let mut mxc = upload_ref(matrix, filename, data.as_slice(), mimetype).await?; +pub(crate) async fn upload

(matrix: &Config, path: P, data: Arc>, mimetype: &str) -> Result +where + P: AsRef +{ + let mut mxc = upload_ref(matrix, path, data.as_slice(), mimetype).await?; mxc.data = Some(data); Ok(mxc) } -pub(crate) async fn upload_ref(matrix: &Config, filename: &String, data: &[u8], mimetype: &str) -> Result { +pub(crate) async fn upload_ref

(matrix: &Config, path: P, data: &[u8], mimetype: &str) -> Result +where + P: AsRef +{ + let path = path.as_ref(); + let filename = path + .file_name() + .unwrap_or_else(|| path.as_os_str()) + .to_str() + .expect("Not valid UTF-8"); let answer = CLIENT .get() .post(&format!("{}/_matrix/media/v3/upload", matrix.homeserver_url)) - .query(&[("access_token", &matrix.access_token), ("filename", filename)]) + .query(&[("access_token", matrix.access_token.as_str()), ("filename", filename)]) .header("Content-Type", mimetype) .body(data.to_owned()) //TODO check for better solution .send() From 45ff229b8309b51e8a55ba54a3d58d685bda6376 Mon Sep 17 00:00:00 2001 From: Dominic Date: Tue, 8 Apr 2025 23:27:38 +0200 Subject: [PATCH 3/3] prevent // in uri --- mstickerlib/src/matrix/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mstickerlib/src/matrix/mod.rs b/mstickerlib/src/matrix/mod.rs index 2614a13..ed82026 100644 --- a/mstickerlib/src/matrix/mod.rs +++ b/mstickerlib/src/matrix/mod.rs @@ -196,9 +196,10 @@ where .unwrap_or_else(|| path.as_os_str()) .to_str() .expect("Not valid UTF-8"); + let slash = if matrix.homeserver_url.ends_with('/') { "" } else { "/" }; let answer = CLIENT .get() - .post(&format!("{}/_matrix/media/v3/upload", matrix.homeserver_url)) + .post(&format!("{}{slash}_matrix/media/v3/upload", matrix.homeserver_url)) .query(&[("access_token", matrix.access_token.as_str()), ("filename", filename)]) .header("Content-Type", mimetype) .body(data.to_owned()) //TODO check for better solution