Add handler for Reject(Follow) activity

This commit is contained in:
silverpill 2021-09-20 21:06:48 +00:00
parent d2adda2034
commit 602e4ec229
3 changed files with 33 additions and 3 deletions

View file

@ -14,7 +14,11 @@ use crate::models::profiles::queries::{
update_profile,
};
use crate::models::profiles::types::ProfileUpdateData;
use crate::models::relationships::queries::{accept_follow_request, follow, unfollow};
use crate::models::relationships::queries::{
follow_request_accepted,
follow_request_rejected,
follow, unfollow,
};
use crate::models::users::queries::get_user_by_id;
use super::activity::{Object, Activity, create_activity_accept_follow};
use super::actor::Actor;
@ -64,7 +68,13 @@ pub async fn receive_activity(
.map_err(|_| ValidationError("invalid object"))?;
// TODO: reject if object ID contains wrong instance URI
let follow_request_id = parse_object_id(&object.id)?;
accept_follow_request(db_client, &follow_request_id).await?;
follow_request_accepted(db_client, &follow_request_id).await?;
},
(REJECT, FOLLOW) => {
let object: Object = serde_json::from_value(activity.object)
.map_err(|_| ValidationError("invalid object"))?;
let follow_request_id = parse_object_id(&object.id)?;
follow_request_rejected(db_client, &follow_request_id).await?;
},
(CREATE, NOTE) => {
let object: Object = serde_json::from_value(activity.object)

View file

@ -2,6 +2,7 @@
pub const ACCEPT: &str = "Accept";
pub const CREATE: &str = "Create";
pub const FOLLOW: &str = "Follow";
pub const REJECT: &str = "Reject";
pub const UNDO: &str = "Undo";
pub const UPDATE: &str = "Update";

View file

@ -165,7 +165,7 @@ pub async fn create_follow_request(
Ok(request)
}
pub async fn accept_follow_request(
pub async fn follow_request_accepted(
db_client: &mut impl GenericClient,
request_id: &Uuid,
) -> Result<(), DatabaseError> {
@ -188,6 +188,25 @@ pub async fn accept_follow_request(
Ok(())
}
pub async fn follow_request_rejected(
db_client: &impl GenericClient,
request_id: &Uuid,
) -> Result<(), DatabaseError> {
let status_sql: i16 = FollowRequestStatus::Rejected.into();
let updated_count = db_client.execute(
"
UPDATE follow_request
SET request_status = $1
WHERE id = $2
",
&[&status_sql, &request_id],
).await?;
if updated_count == 0 {
return Err(DatabaseError::NotFound("follow request"));
}
Ok(())
}
pub async fn delete_follow_request(
db_client: &impl GenericClient,
source_id: &Uuid,