Add function ObjectId.is_local (#106)

* Add function ObjectId.is_local

* add test

* add test
This commit is contained in:
Nutomic 2024-04-10 11:31:55 +02:00 committed by GitHub
parent 779313ac22
commit 54e8a1145f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 41 additions and 3 deletions

View file

@ -21,7 +21,6 @@ pub struct DbPost {
pub text: String, pub text: String,
pub ap_id: ObjectId<DbPost>, pub ap_id: ObjectId<DbPost>,
pub creator: ObjectId<DbUser>, pub creator: ObjectId<DbUser>,
pub local: bool,
} }
#[derive(Deserialize, Serialize, Debug)] #[derive(Deserialize, Serialize, Debug)]
@ -59,7 +58,15 @@ impl Object for DbPost {
} }
async fn into_json(self, _data: &Data<Self::DataType>) -> Result<Self::Kind, Self::Error> { 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( async fn verify(
@ -81,7 +88,6 @@ impl Object for DbPost {
text: json.content, text: json.content,
ap_id: json.id.clone(), ap_id: json.id.clone(),
creator: json.attributed_to.clone(), creator: json.attributed_to.clone(),
local: false,
}; };
let mention = Mention { let mention = Mention {

View file

@ -341,3 +341,30 @@ impl<T: Clone> FederationMiddleware<T> {
FederationMiddleware(config) 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());
}
}

View file

@ -169,6 +169,11 @@ where
Kind::verify(&res.object, redirect_url, data).await?; Kind::verify(&res.object, redirect_url, data).await?;
Kind::from_json(res.object, 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 /// Need to implement clone manually, to avoid requiring Kind to be Clone