mirror of
https://github.com/LemmyNet/activitypub-federation-rust
synced 2024-11-10 06:04:19 +00:00
Add function ObjectId.is_local (#106)
* Add function ObjectId.is_local * add test * add test
This commit is contained in:
parent
779313ac22
commit
54e8a1145f
3 changed files with 41 additions and 3 deletions
|
@ -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 {
|
||||||
|
|
|
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue