Add handle_activity() function
This commit is contained in:
parent
c28585ef92
commit
2bf16b260e
2 changed files with 79 additions and 55 deletions
|
@ -142,6 +142,72 @@ pub fn deserialize_into_object_id<'de, D>(
|
|||
Ok(object_id)
|
||||
}
|
||||
|
||||
async fn handle_activity(
|
||||
config: &Config,
|
||||
db_client: &mut impl GenericClient,
|
||||
activity: &Value,
|
||||
is_authenticated: bool,
|
||||
) -> Result<(), HandlerError> {
|
||||
let activity_type = activity["type"].as_str()
|
||||
.ok_or(ValidationError("type property is missing"))?
|
||||
.to_owned();
|
||||
let activity_actor = activity["actor"].as_str()
|
||||
.ok_or(ValidationError("actor property is missing"))?
|
||||
.to_owned();
|
||||
let activity = activity.clone();
|
||||
let maybe_object_type = match activity_type.as_str() {
|
||||
ACCEPT => {
|
||||
handle_accept(config, db_client, activity).await?
|
||||
},
|
||||
ADD => {
|
||||
handle_add(config, db_client, activity).await?
|
||||
},
|
||||
ANNOUNCE => {
|
||||
handle_announce(config, db_client, activity).await?
|
||||
},
|
||||
CREATE => {
|
||||
handle_create(config, db_client, activity, is_authenticated).await?
|
||||
},
|
||||
DELETE => {
|
||||
handle_delete(config, db_client, activity).await?
|
||||
},
|
||||
FOLLOW => {
|
||||
handle_follow(config, db_client, activity).await?
|
||||
},
|
||||
LIKE | EMOJI_REACT => {
|
||||
handle_like(config, db_client, activity).await?
|
||||
},
|
||||
MOVE => {
|
||||
handle_move(config, db_client, activity).await?
|
||||
},
|
||||
REJECT => {
|
||||
handle_reject(config, db_client, activity).await?
|
||||
},
|
||||
REMOVE => {
|
||||
handle_remove(config, db_client, activity).await?
|
||||
},
|
||||
UNDO => {
|
||||
handle_undo(config, db_client, activity).await?
|
||||
},
|
||||
UPDATE => {
|
||||
handle_update(config, db_client, activity).await?
|
||||
},
|
||||
_ => {
|
||||
log::warn!("activity type is not supported: {}", activity);
|
||||
None
|
||||
},
|
||||
};
|
||||
if let Some(object_type) = maybe_object_type {
|
||||
log::info!(
|
||||
"processed {}({}) from {}",
|
||||
activity_type,
|
||||
object_type,
|
||||
activity_actor,
|
||||
);
|
||||
};
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn receive_activity(
|
||||
config: &Config,
|
||||
db_client: &mut impl GenericClient,
|
||||
|
@ -240,58 +306,12 @@ pub async fn receive_activity(
|
|||
};
|
||||
};
|
||||
|
||||
let activity = activity.clone();
|
||||
let maybe_object_type = match activity_type {
|
||||
ACCEPT => {
|
||||
handle_accept(config, db_client, activity).await?
|
||||
},
|
||||
ADD => {
|
||||
handle_add(config, db_client, activity).await?
|
||||
},
|
||||
ANNOUNCE => {
|
||||
handle_announce(config, db_client, activity).await?
|
||||
},
|
||||
CREATE => {
|
||||
handle_create(config, db_client, activity, is_authenticated).await?
|
||||
},
|
||||
DELETE => {
|
||||
handle_delete(config, db_client, activity).await?
|
||||
},
|
||||
FOLLOW => {
|
||||
handle_follow(config, db_client, activity).await?
|
||||
},
|
||||
LIKE | EMOJI_REACT => {
|
||||
handle_like(config, db_client, activity).await?
|
||||
},
|
||||
MOVE => {
|
||||
handle_move(config, db_client, activity).await?
|
||||
},
|
||||
REJECT => {
|
||||
handle_reject(config, db_client, activity).await?
|
||||
},
|
||||
REMOVE => {
|
||||
handle_remove(config, db_client, activity).await?
|
||||
},
|
||||
UNDO => {
|
||||
handle_undo(config, db_client, activity).await?
|
||||
},
|
||||
UPDATE => {
|
||||
handle_update(config, db_client, activity).await?
|
||||
},
|
||||
_ => {
|
||||
log::warn!("activity type is not supported: {}", activity);
|
||||
return Ok(());
|
||||
},
|
||||
};
|
||||
if let Some(object_type) = maybe_object_type {
|
||||
log::info!(
|
||||
"processed {}({}) from {}",
|
||||
activity_type,
|
||||
object_type,
|
||||
activity_actor,
|
||||
);
|
||||
};
|
||||
Ok(())
|
||||
handle_activity(
|
||||
config,
|
||||
db_client,
|
||||
activity,
|
||||
is_authenticated,
|
||||
).await
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
@ -96,9 +96,13 @@ async fn inbox(
|
|||
);
|
||||
let db_client = &mut **get_database_client(&db_pool).await?;
|
||||
receive_activity(&config, db_client, &request, &activity).await
|
||||
.map_err(|err| {
|
||||
log::warn!("failed to process activity ({}): {}", err, activity);
|
||||
err
|
||||
.map_err(|error| {
|
||||
log::warn!(
|
||||
"failed to process activity ({}): {}",
|
||||
error,
|
||||
activity,
|
||||
);
|
||||
error
|
||||
})?;
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue