Skip to content

Commit

Permalink
Add function ObjectId.is_local (#106)
Browse files Browse the repository at this point in the history
* Add function ObjectId.is_local

* add test

* add test
  • Loading branch information
Nutomic authored Apr 10, 2024
1 parent 779313a commit 54e8a11
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 3 deletions.
12 changes: 9 additions & 3 deletions examples/live_federation/objects/post.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@ pub struct DbPost {
pub text: String,
pub ap_id: ObjectId<DbPost>,
pub creator: ObjectId<DbUser>,
pub local: bool,
}

#[derive(Deserialize, Serialize, Debug)]
Expand Down Expand Up @@ -59,7 +58,15 @@ impl Object for DbPost {
}

async fn into_json(self, _data: &Data<Self::DataType>) -> Result<Self::Kind, Self::Error> {
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(
Expand All @@ -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 {
Expand Down
27 changes: 27 additions & 0 deletions src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -341,3 +341,30 @@ impl<T: Clone> FederationMiddleware<T> {
FederationMiddleware(config)
}
}

#[cfg(test)]
#[allow(clippy::unwrap_used)]
mod test {
use super::*;

async fn config() -> FederationConfig<i32> {
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());
}
}
5 changes: 5 additions & 0 deletions src/fetch/object_id.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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<<Kind as Object>::DataType>) -> bool {
data.config.is_local_url(&self.0)
}
}

/// Need to implement clone manually, to avoid requiring Kind to be Clone
Expand Down

0 comments on commit 54e8a11

Please sign in to comment.