Move code for building Undo(Follow) activity to builders::undo_follow
This commit is contained in:
parent
50986cd358
commit
e82c6f31fb
4 changed files with 80 additions and 45 deletions
|
@ -415,41 +415,6 @@ pub fn create_activity_accept_follow(
|
||||||
activity
|
activity
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn create_activity_undo_follow(
|
|
||||||
instance_url: &str,
|
|
||||||
actor_profile: &DbActorProfile,
|
|
||||||
follow_request_id: &Uuid,
|
|
||||||
target_actor_id: &str,
|
|
||||||
) -> Activity {
|
|
||||||
let follow_activity_id = get_object_url(
|
|
||||||
instance_url,
|
|
||||||
follow_request_id,
|
|
||||||
);
|
|
||||||
let follow_actor_id = get_actor_url(
|
|
||||||
instance_url,
|
|
||||||
&actor_profile.username,
|
|
||||||
);
|
|
||||||
let object = Object {
|
|
||||||
context: Some(json!(AP_CONTEXT)),
|
|
||||||
id: follow_activity_id,
|
|
||||||
object_type: FOLLOW.to_string(),
|
|
||||||
actor: Some(follow_actor_id),
|
|
||||||
object: Some(target_actor_id.to_owned()),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
let activity_id = format!("{}/undo", object.id);
|
|
||||||
let activity = create_activity(
|
|
||||||
instance_url,
|
|
||||||
&actor_profile.username,
|
|
||||||
UNDO,
|
|
||||||
activity_id,
|
|
||||||
object,
|
|
||||||
vec![target_actor_id.to_string()],
|
|
||||||
vec![],
|
|
||||||
);
|
|
||||||
activity
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::activitypub::actor::Actor;
|
use crate::activitypub::actor::Actor;
|
||||||
|
|
|
@ -1,2 +1,3 @@
|
||||||
pub mod delete_note;
|
pub mod delete_note;
|
||||||
|
pub mod undo_follow;
|
||||||
pub mod update_person;
|
pub mod update_person;
|
||||||
|
|
70
src/activitypub/builders/undo_follow.rs
Normal file
70
src/activitypub/builders/undo_follow.rs
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
use serde_json::json;
|
||||||
|
use uuid::Uuid;
|
||||||
|
|
||||||
|
use crate::activitypub::{
|
||||||
|
activity::{create_activity, Activity, Object},
|
||||||
|
actor::Actor,
|
||||||
|
constants::AP_CONTEXT,
|
||||||
|
deliverer::OutgoingActivity,
|
||||||
|
views::{get_actor_url, get_object_url},
|
||||||
|
vocabulary::{FOLLOW, UNDO},
|
||||||
|
};
|
||||||
|
use crate::config::Instance;
|
||||||
|
use crate::models::profiles::types::DbActorProfile;
|
||||||
|
use crate::models::users::types::User;
|
||||||
|
|
||||||
|
fn build_undo_follow(
|
||||||
|
instance_url: &str,
|
||||||
|
actor_profile: &DbActorProfile,
|
||||||
|
follow_request_id: &Uuid,
|
||||||
|
target_actor_id: &str,
|
||||||
|
) -> Activity {
|
||||||
|
let follow_activity_id = get_object_url(
|
||||||
|
instance_url,
|
||||||
|
follow_request_id,
|
||||||
|
);
|
||||||
|
let follow_actor_id = get_actor_url(
|
||||||
|
instance_url,
|
||||||
|
&actor_profile.username,
|
||||||
|
);
|
||||||
|
let object = Object {
|
||||||
|
context: Some(json!(AP_CONTEXT)),
|
||||||
|
id: follow_activity_id,
|
||||||
|
object_type: FOLLOW.to_string(),
|
||||||
|
actor: Some(follow_actor_id),
|
||||||
|
object: Some(target_actor_id.to_owned()),
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
let activity_id = format!("{}/undo", object.id);
|
||||||
|
let activity = create_activity(
|
||||||
|
instance_url,
|
||||||
|
&actor_profile.username,
|
||||||
|
UNDO,
|
||||||
|
activity_id,
|
||||||
|
object,
|
||||||
|
vec![target_actor_id.to_string()],
|
||||||
|
vec![],
|
||||||
|
);
|
||||||
|
activity
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn prepare_undo_follow(
|
||||||
|
instance: Instance,
|
||||||
|
user: &User,
|
||||||
|
target_actor: &Actor,
|
||||||
|
follow_request_id: &Uuid,
|
||||||
|
) -> OutgoingActivity {
|
||||||
|
let activity = build_undo_follow(
|
||||||
|
&instance.url(),
|
||||||
|
&user.profile,
|
||||||
|
follow_request_id,
|
||||||
|
&target_actor.id,
|
||||||
|
);
|
||||||
|
let recipients = vec![target_actor.clone()];
|
||||||
|
OutgoingActivity {
|
||||||
|
instance,
|
||||||
|
sender: user.clone(),
|
||||||
|
activity,
|
||||||
|
recipients,
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,11 +2,11 @@ use actix_web::{get, post, patch, web, HttpResponse, Scope};
|
||||||
use actix_web_httpauth::extractors::bearer::BearerAuth;
|
use actix_web_httpauth::extractors::bearer::BearerAuth;
|
||||||
use uuid::Uuid;
|
use uuid::Uuid;
|
||||||
|
|
||||||
use crate::activitypub::activity::{
|
use crate::activitypub::activity::create_activity_follow;
|
||||||
create_activity_follow,
|
use crate::activitypub::builders::{
|
||||||
create_activity_undo_follow,
|
undo_follow::prepare_undo_follow,
|
||||||
|
update_person::prepare_update_person,
|
||||||
};
|
};
|
||||||
use crate::activitypub::builders::update_person::prepare_update_person;
|
|
||||||
use crate::activitypub::deliverer::deliver_activity;
|
use crate::activitypub::deliverer::deliver_activity;
|
||||||
use crate::config::Config;
|
use crate::config::Config;
|
||||||
use crate::database::{Pool, get_database_client};
|
use crate::database::{Pool, get_database_client};
|
||||||
|
@ -388,13 +388,12 @@ async fn unfollow_account(
|
||||||
&target.id,
|
&target.id,
|
||||||
).await?;
|
).await?;
|
||||||
// Federate
|
// Federate
|
||||||
let activity = create_activity_undo_follow(
|
prepare_undo_follow(
|
||||||
&config.instance_url(),
|
config.instance(),
|
||||||
¤t_user.profile,
|
¤t_user,
|
||||||
|
&remote_actor,
|
||||||
&follow_request.id,
|
&follow_request.id,
|
||||||
&remote_actor.id,
|
).spawn_deliver();
|
||||||
);
|
|
||||||
deliver_activity(&config, ¤t_user, activity, vec![remote_actor]);
|
|
||||||
},
|
},
|
||||||
Err(DatabaseError::NotFound(_)) => (), // not following
|
Err(DatabaseError::NotFound(_)) => (), // not following
|
||||||
Err(other_error) => return Err(other_error.into()),
|
Err(other_error) => return Err(other_error.into()),
|
||||||
|
|
Loading…
Reference in a new issue