fix: ad-hoc activity normalization
ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis ihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethisihatethis
This commit is contained in:
parent
357e2cd4c0
commit
4bf5835001
1 changed files with 44 additions and 0 deletions
|
@ -164,6 +164,50 @@ impl Normalizer for crate::Context {
|
||||||
async fn insert_activity(&self, activity: impl apb::Activity, tx: &impl ConnectionTrait) -> Result<crate::model::activity::Model, NormalizerError> {
|
async fn insert_activity(&self, activity: impl apb::Activity, tx: &impl ConnectionTrait) -> Result<crate::model::activity::Model, NormalizerError> {
|
||||||
let mut activity_model = AP::activity(&activity)?;
|
let mut activity_model = AP::activity(&activity)?;
|
||||||
|
|
||||||
|
// TODO activity addressing normalization!
|
||||||
|
// since ActivityPub is a mess most software doesnt' really respect addressing, or care
|
||||||
|
// about inserting it correctly.
|
||||||
|
//
|
||||||
|
// * we can assume that Follow activities should *at least* be
|
||||||
|
// addressed to their target, since how would anyone be able to accept it otherwise???
|
||||||
|
//
|
||||||
|
// * announces are messy because everything is in the `to` field. we should probably move
|
||||||
|
// followers to `cc` and keep just as#Public and the original poster in `to`, so that they
|
||||||
|
// get notified but everyone else sees the object again
|
||||||
|
//
|
||||||
|
// * misskey sends us mentions without including us in the `to` field! basically the Create
|
||||||
|
// will have a `tag` mention but it will not include the mentioned user in the `to` field
|
||||||
|
|
||||||
|
match activity_model.activity_type {
|
||||||
|
apb::ActivityType::Follow => {
|
||||||
|
if let Some(ref target) = activity_model.object {
|
||||||
|
if !activity_model.to.0.contains(target) {
|
||||||
|
activity_model.to.0.push(target.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
apb::ActivityType::Announce => {
|
||||||
|
for target in activity_model.to.0.iter() {
|
||||||
|
if target.ends_with("followers") {
|
||||||
|
activity_model.cc.0.push(target.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
activity_model.to.0.retain(|x| !x.ends_with("followers"));
|
||||||
|
},
|
||||||
|
apb::ActivityType::Create => {
|
||||||
|
if let Some(object) = activity.object().get() {
|
||||||
|
for tag in object.tag().flat() {
|
||||||
|
if let Node::Link(l) = tag {
|
||||||
|
if matches!(l.link_type(), Ok(apb::LinkType::Mention)) {
|
||||||
|
activity_model.to.0.push(l.href().to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
_ => {},
|
||||||
|
}
|
||||||
|
|
||||||
let mut active_model = activity_model.clone().into_active_model();
|
let mut active_model = activity_model.clone().into_active_model();
|
||||||
active_model.internal = NotSet;
|
active_model.internal = NotSet;
|
||||||
crate::model::activity::Entity::insert(active_model)
|
crate::model::activity::Entity::insert(active_model)
|
||||||
|
|
Loading…
Reference in a new issue