Move code that processes incoming Note objects to a separate function

This commit is contained in:
silverpill 2021-11-07 16:48:47 +00:00
parent 5cd79eb9b6
commit 284840463c

View file

@ -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(