Process Follow() activity even if relationship already exists
This commit is contained in:
parent
3993c76c65
commit
d46165f397
1 changed files with 11 additions and 9 deletions
|
@ -35,7 +35,7 @@ use crate::models::relationships::queries::{
|
||||||
follow,
|
follow,
|
||||||
unfollow,
|
unfollow,
|
||||||
};
|
};
|
||||||
use crate::models::users::queries::get_user_by_id;
|
use crate::models::users::queries::get_user_by_name;
|
||||||
use super::activity::{Object, Activity, create_activity_accept_follow};
|
use super::activity::{Object, Activity, create_activity_accept_follow};
|
||||||
use super::actor::Actor;
|
use super::actor::Actor;
|
||||||
use super::deliverer::deliver_activity;
|
use super::deliverer::deliver_activity;
|
||||||
|
@ -476,19 +476,21 @@ pub async fn receive_activity(
|
||||||
.ok_or(HttpError::InternalError)?;
|
.ok_or(HttpError::InternalError)?;
|
||||||
let target_actor_id = get_object_id(activity.object)?;
|
let target_actor_id = get_object_id(activity.object)?;
|
||||||
let target_username = parse_actor_id(&config.instance_url(), &target_actor_id)?;
|
let target_username = parse_actor_id(&config.instance_url(), &target_actor_id)?;
|
||||||
let target_profile = get_profile_by_acct(db_client, &target_username).await?;
|
let target_user = get_user_by_name(db_client, &target_username).await?;
|
||||||
// Create and send 'Accept' activity
|
match follow(db_client, &source_profile.id, &target_user.profile.id).await {
|
||||||
let target_user = get_user_by_id(db_client, &target_profile.id).await?;
|
Ok(_) => (),
|
||||||
|
// Proceed even if relationship already exists
|
||||||
|
Err(DatabaseError::AlreadyExists(_)) => (),
|
||||||
|
Err(other_error) => return Err(other_error.into()),
|
||||||
|
};
|
||||||
|
|
||||||
|
// Send activity
|
||||||
let new_activity = create_activity_accept_follow(
|
let new_activity = create_activity_accept_follow(
|
||||||
&config.instance_url(),
|
&config.instance_url(),
|
||||||
&target_profile,
|
&target_user.profile,
|
||||||
&activity.id,
|
&activity.id,
|
||||||
&source_actor.id,
|
&source_actor.id,
|
||||||
);
|
);
|
||||||
// Save relationship
|
|
||||||
follow(db_client, &source_profile.id, &target_profile.id).await?;
|
|
||||||
|
|
||||||
// Send activity
|
|
||||||
let recipients = vec![source_actor];
|
let recipients = vec![source_actor];
|
||||||
deliver_activity(config, &target_user, new_activity, recipients);
|
deliver_activity(config, &target_user, new_activity, recipients);
|
||||||
PERSON
|
PERSON
|
||||||
|
|
Loading…
Reference in a new issue