use crate::{
activities::{generate_activity_id, send_lemmy_activity, verify_is_public, verify_person},
- objects::person::ApubPerson,
+ check_apub_id_valid,
+ fetch_local_site_data,
+ local_instance,
+ objects::{instance::remote_instance_inboxes, person::ApubPerson},
protocol::activities::deletion::delete_user::DeleteUser,
};
-use activitystreams_kinds::{activity::DeleteType, public};
-use lemmy_api_common::{blocking, delete_user_account};
-use lemmy_apub_lib::{
+use activitypub_federation::{
+ core::object_id::ObjectId,
data::Data,
- object_id::ObjectId,
traits::ActivityHandler,
- verify::verify_urls_match,
+ utils::verify_urls_match,
};
-use lemmy_db_schema::source::site::Site;
-use lemmy_utils::LemmyError;
+use activitystreams_kinds::{activity::DeleteType, public};
+use lemmy_api_common::utils::{blocking, delete_user_account};
+use lemmy_utils::error::LemmyError;
use lemmy_websocket::LemmyContext;
+use url::Url;
/// This can be separate from Delete activity because it doesn't need to be handled in shared inbox
/// (cause instance actor doesn't have shared inbox).
#[async_trait::async_trait(?Send)]
impl ActivityHandler for DeleteUser {
type DataType = LemmyContext;
+ type Error = LemmyError;
+
+ fn id(&self) -> &Url {
+ &self.id
+ }
+
+ fn actor(&self) -> &Url {
+ self.actor.inner()
+ }
async fn verify(
&self,
context: &Data<LemmyContext>,
request_counter: &mut i32,
) -> Result<(), LemmyError> {
+ let local_site_data = blocking(context.pool(), fetch_local_site_data).await??;
+ check_apub_id_valid(self.id(), &local_site_data, context.settings())
+ .map_err(LemmyError::from_message)?;
verify_is_public(&self.to, &[])?;
verify_person(&self.actor, context, request_counter).await?;
verify_urls_match(self.actor.inner(), self.object.inner())?;
) -> Result<(), LemmyError> {
let actor = self
.actor
- .dereference(context, context.client(), request_counter)
+ .dereference(context, local_instance(context), request_counter)
.await?;
- delete_user_account(actor.id, context.pool()).await?;
+ delete_user_account(
+ actor.id,
+ context.pool(),
+ context.settings(),
+ context.client(),
+ )
+ .await?;
Ok(())
}
}
cc: vec![],
};
- let remote_sites = blocking(context.pool(), Site::read_remote_sites).await??;
- let inboxes = remote_sites
- .into_iter()
- .map(|s| s.inbox_url.into())
- .collect();
- send_lemmy_activity(context, &delete, &id, actor, inboxes, true).await?;
+ let inboxes = remote_instance_inboxes(context.pool()).await?;
+ send_lemmy_activity(context, delete, actor, inboxes, true).await?;
Ok(())
}
}