use crate::{
activity_lists::SharedInboxActivities,
check_is_apub_id_valid,
- context::{WithContext, WithContextJson},
+ context::WithContext,
fetcher::user_or_community::UserOrCommunity,
http::{community::receive_group_inbox, person::receive_person_inbox},
insert_activity,
traits::{ActivityHandler, ActorType},
APUB_JSON_CONTENT_TYPE,
};
-use lemmy_db_schema::{source::activity::Activity, DbPool};
+use lemmy_db_schema::source::activity::Activity;
use lemmy_utils::{location_info, LemmyError};
use lemmy_websocket::LemmyContext;
use log::info;
let actor = ObjectId::<UserOrCommunity>::new(activity_data.actor)
.dereference(context, request_counter)
.await?;
- verify_signature(&request, &actor.public_key().context(location_info!())?)?;
+ verify_signature(&request, &actor.public_key())?;
- // Do nothing if we received the same activity before
- if is_activity_already_known(context.pool(), &activity_data.id).await? {
- return Ok(HttpResponse::Ok().finish());
- }
info!("Verifying activity {}", activity_data.id.to_string());
activity
.verify(&Data::new(context.clone()), request_counter)
// Log the activity, so we avoid receiving and parsing it twice. Note that this could still happen
// if we receive the same activity twice in very quick succession.
- insert_activity(&activity_data.id, &activity, false, true, context.pool()).await?;
+ let object_value = serde_json::to_value(&activity)?;
+ insert_activity(&activity_data.id, object_value, false, true, context.pool()).await?;
info!("Receiving activity {}", activity_data.id.to_string());
activity
fn create_json_apub_response(data: serde_json::Value) -> HttpResponse<Body> {
HttpResponse::Ok()
.content_type(APUB_JSON_CONTENT_TYPE)
- .json(WithContextJson::new(data))
+ .json(data)
}
fn create_apub_tombstone_response<T>(data: &T) -> HttpResponse<Body>
}
}
-pub(crate) async fn is_activity_already_known(
- pool: &DbPool,
- activity_id: &Url,
-) -> Result<bool, LemmyError> {
- let activity_id = activity_id.to_owned().into();
- let existing = blocking(pool, move |conn| {
- Activity::read_from_apub_id(conn, &activity_id)
- })
- .await?;
- match existing {
- Ok(_) => Ok(true),
- Err(_) => Ok(false),
- }
-}
-
fn assert_activity_not_local(id: &Url, hostname: &str) -> Result<(), LemmyError> {
let activity_domain = id.domain().context(location_info!())?;