From 54e8a1145f3b3d6785d31a33f715b26b4ef69766 Mon Sep 17 00:00:00 2001 From: Nutomic Date: Wed, 10 Apr 2024 11:31:55 +0200 Subject: [PATCH] Add function ObjectId.is_local (#106) * Add function ObjectId.is_local * add test * add test --- examples/live_federation/objects/post.rs | 12 ++++++++--- src/config.rs | 27 ++++++++++++++++++++++++ src/fetch/object_id.rs | 5 +++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/examples/live_federation/objects/post.rs b/examples/live_federation/objects/post.rs index 9a08b9d..1b19fac 100644 --- a/examples/live_federation/objects/post.rs +++ b/examples/live_federation/objects/post.rs @@ -21,7 +21,6 @@ pub struct DbPost { pub text: String, pub ap_id: ObjectId, pub creator: ObjectId, - pub local: bool, } #[derive(Deserialize, Serialize, Debug)] @@ -59,7 +58,15 @@ impl Object for DbPost { } async fn into_json(self, _data: &Data) -> Result { - unimplemented!() + Ok(Note { + kind: NoteType::Note, + id: self.ap_id, + content: self.text, + attributed_to: self.creator, + to: vec![public()], + tag: vec![], + in_reply_to: None, + }) } async fn verify( @@ -81,7 +88,6 @@ impl Object for DbPost { text: json.content, ap_id: json.id.clone(), creator: json.attributed_to.clone(), - local: false, }; let mention = Mention { diff --git a/src/config.rs b/src/config.rs index b7aea9c..6142cfd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -341,3 +341,30 @@ impl FederationMiddleware { FederationMiddleware(config) } } + +#[cfg(test)] +#[allow(clippy::unwrap_used)] +mod test { + use super::*; + + async fn config() -> FederationConfig { + FederationConfig::builder() + .domain("example.com") + .app_data(1) + .build() + .await + .unwrap() + } + #[tokio::test] + async fn test_url_is_local() -> Result<(), Error> { + let config = config().await; + assert!(config.is_local_url(&Url::parse("http://example.com")?)); + assert!(!config.is_local_url(&Url::parse("http://other.com")?)); + Ok(()) + } + #[tokio::test] + async fn test_get_domain() { + let config = config().await; + assert_eq!("example.com", config.domain()); + } +} diff --git a/src/fetch/object_id.rs b/src/fetch/object_id.rs index d30fe0a..ce52c43 100644 --- a/src/fetch/object_id.rs +++ b/src/fetch/object_id.rs @@ -169,6 +169,11 @@ where Kind::verify(&res.object, redirect_url, data).await?; Kind::from_json(res.object, data).await } + + /// Returns true if the object's domain matches the one defined in [[FederationConfig.domain]]. + pub fn is_local(&self, data: &Data<::DataType>) -> bool { + data.config.is_local_url(&self.0) + } } /// Need to implement clone manually, to avoid requiring Kind to be Clone