Move code that processes incoming Note objects to a separate function
This commit is contained in:
parent
5cd79eb9b6
commit
284840463c
1 changed files with 98 additions and 89 deletions
|
@ -97,36 +97,11 @@ async fn get_or_fetch_profile_by_actor_id(
|
||||||
Ok(profile)
|
Ok(profile)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn receive_activity(
|
pub async fn process_note(
|
||||||
config: &Config,
|
config: &Config,
|
||||||
db_pool: &Pool,
|
db_client: &mut impl GenericClient,
|
||||||
_username: String,
|
object: Object,
|
||||||
activity_raw: Value,
|
|
||||||
) -> Result<(), HttpError> {
|
) -> Result<(), HttpError> {
|
||||||
let activity: Activity = serde_json::from_value(activity_raw)
|
|
||||||
.map_err(|_| ValidationError("invalid activity"))?;
|
|
||||||
let activity_type = activity.activity_type;
|
|
||||||
let object_type = activity.object.get("type")
|
|
||||||
.and_then(|val| val.as_str())
|
|
||||||
.unwrap_or("Unknown")
|
|
||||||
.to_owned();
|
|
||||||
let db_client = &mut **get_database_client(&db_pool).await?;
|
|
||||||
match (activity_type.as_str(), object_type.as_str()) {
|
|
||||||
(ACCEPT, FOLLOW) => {
|
|
||||||
let object: Object = serde_json::from_value(activity.object)
|
|
||||||
.map_err(|_| ValidationError("invalid object"))?;
|
|
||||||
let follow_request_id = parse_object_id(&config.instance_url(), &object.id)?;
|
|
||||||
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(&config.instance_url(), &object.id)?;
|
|
||||||
follow_request_rejected(db_client, &follow_request_id).await?;
|
|
||||||
},
|
|
||||||
(CREATE, NOTE) => {
|
|
||||||
let object: Object = serde_json::from_value(activity.object)
|
|
||||||
.map_err(|_| ValidationError("invalid object"))?;
|
|
||||||
let mut maybe_parent_object_id = object.in_reply_to.clone();
|
let mut maybe_parent_object_id = object.in_reply_to.clone();
|
||||||
let mut objects = vec![object];
|
let mut objects = vec![object];
|
||||||
// Fetch ancestors by going through inReplyTo references
|
// Fetch ancestors by going through inReplyTo references
|
||||||
|
@ -216,6 +191,40 @@ pub async fn receive_activity(
|
||||||
};
|
};
|
||||||
create_post(db_client, &author.id, post_data).await?;
|
create_post(db_client, &author.id, post_data).await?;
|
||||||
}
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn receive_activity(
|
||||||
|
config: &Config,
|
||||||
|
db_pool: &Pool,
|
||||||
|
_username: String,
|
||||||
|
activity_raw: Value,
|
||||||
|
) -> Result<(), HttpError> {
|
||||||
|
let activity: Activity = serde_json::from_value(activity_raw)
|
||||||
|
.map_err(|_| ValidationError("invalid activity"))?;
|
||||||
|
let activity_type = activity.activity_type;
|
||||||
|
let object_type = activity.object.get("type")
|
||||||
|
.and_then(|val| val.as_str())
|
||||||
|
.unwrap_or("Unknown")
|
||||||
|
.to_owned();
|
||||||
|
let db_client = &mut **get_database_client(&db_pool).await?;
|
||||||
|
match (activity_type.as_str(), object_type.as_str()) {
|
||||||
|
(ACCEPT, FOLLOW) => {
|
||||||
|
let object: Object = serde_json::from_value(activity.object)
|
||||||
|
.map_err(|_| ValidationError("invalid object"))?;
|
||||||
|
let follow_request_id = parse_object_id(&config.instance_url(), &object.id)?;
|
||||||
|
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(&config.instance_url(), &object.id)?;
|
||||||
|
follow_request_rejected(db_client, &follow_request_id).await?;
|
||||||
|
},
|
||||||
|
(CREATE, NOTE) => {
|
||||||
|
let object: Object = serde_json::from_value(activity.object)
|
||||||
|
.map_err(|_| ValidationError("invalid object"))?;
|
||||||
|
process_note(config, db_client, object).await?;
|
||||||
},
|
},
|
||||||
(LIKE, _) => {
|
(LIKE, _) => {
|
||||||
let author = get_or_fetch_profile_by_actor_id(
|
let author = get_or_fetch_profile_by_actor_id(
|
||||||
|
|
Loading…
Reference in a new issue