feat: account purge handler, tombstone cleanup, AP tombstone signing + 410
This commit is contained in:
@@ -40,6 +40,7 @@ pub struct DatabaseOutput {
|
||||
pub refresh_session: Arc<dyn RefreshSessionRepository>,
|
||||
pub processed_events: Arc<dyn domain::ports::ProcessedEventLedger>,
|
||||
pub deduplicator: Arc<dyn MovieDeduplicator>,
|
||||
pub account_purger: Arc<dyn domain::ports::AccountPurger>,
|
||||
pub image_ref_command: Arc<dyn ImageRefCommand>,
|
||||
pub image_ref_query: Arc<dyn ImageRefQuery>,
|
||||
pub follow_command: Arc<dyn domain::ports::FollowCommand>,
|
||||
@@ -117,6 +118,10 @@ fn assemble(
|
||||
refresh_session: Arc::new(sqlite::SqliteRefreshSessionAdapter::new(w.pool.clone())) as _,
|
||||
processed_events: Arc::new(sqlite::SqliteProcessedEventLedger::new(w.pool.clone())) as _,
|
||||
deduplicator: w.deduplicator,
|
||||
account_purger: Arc::new(sqlite::SqliteAccountPurger::new(
|
||||
w.pool.clone(),
|
||||
instance.clone(),
|
||||
)) as _,
|
||||
image_ref_command,
|
||||
image_ref_query,
|
||||
follow_command: Arc::clone(&social) as _,
|
||||
|
||||
@@ -123,15 +123,19 @@ pub async fn wire_server_social(
|
||||
})
|
||||
}
|
||||
|
||||
/// The worker's federation event handlers: the ActivityPub delivery handler and
|
||||
/// the follow-accepted outbox backfill.
|
||||
/// The worker's federation event handlers (the ActivityPub delivery handler and
|
||||
/// the follow-accepted outbox backfill) and the notifier that tells followers
|
||||
/// an account was deleted.
|
||||
#[cfg(feature = "federation")]
|
||||
pub async fn wire_worker_handlers(
|
||||
db: &DatabaseOutput,
|
||||
instance: &InstanceIdentity,
|
||||
config: &config::AppConfig,
|
||||
event_publisher: &Arc<dyn EventPublisher>,
|
||||
) -> anyhow::Result<Vec<Arc<dyn domain::ports::EventHandler>>> {
|
||||
) -> anyhow::Result<(
|
||||
Vec<Arc<dyn domain::ports::EventHandler>>,
|
||||
Arc<dyn domain::ports::FederationDeletionNotifier>,
|
||||
)> {
|
||||
let fed_repos = sqlite_federation::wire(db.db_pool.clone(), instance.clone());
|
||||
|
||||
let ap_wire = activitypub::wire(activitypub::ActivityPubDeps {
|
||||
@@ -160,10 +164,13 @@ pub async fn wire_worker_handlers(
|
||||
.await?;
|
||||
|
||||
tracing::info!("federation event handler registered");
|
||||
Ok(vec![
|
||||
ap_wire.event_handler,
|
||||
Arc::new(crate::follow_backfill_handler::FollowBackfillHandler {
|
||||
backfill: ap_wire.backfill,
|
||||
}),
|
||||
])
|
||||
Ok((
|
||||
vec![
|
||||
ap_wire.event_handler,
|
||||
Arc::new(crate::follow_backfill_handler::FollowBackfillHandler {
|
||||
backfill: ap_wire.backfill,
|
||||
}),
|
||||
],
|
||||
ap_wire.deletion_notifier,
|
||||
))
|
||||
}
|
||||
|
||||
@@ -133,9 +133,12 @@ async fn assemble(
|
||||
let image_ref_query = Arc::clone(&db.image_ref_query);
|
||||
|
||||
#[cfg(feature = "federation")]
|
||||
let federation_handlers =
|
||||
let (federation_handlers, deletion_notifier) =
|
||||
crate::federation::wire_worker_handlers(&db, &instance, config, &event_publisher_arc)
|
||||
.await?;
|
||||
#[cfg(not(feature = "federation"))]
|
||||
let deletion_notifier: Arc<dyn domain::ports::FederationDeletionNotifier> =
|
||||
Arc::new(domain::ports::noop::NoopFederationDeletionNotifier);
|
||||
|
||||
let movie_command = db.movie_command;
|
||||
let movie_query = db.movie_query;
|
||||
@@ -148,6 +151,7 @@ async fn assemble(
|
||||
let wrapup_repo = db.wrapup_repo;
|
||||
let refresh_session = db.refresh_session;
|
||||
let processed_events = db.processed_events;
|
||||
let account_purger = db.account_purger;
|
||||
|
||||
let event_publisher = event_publisher_arc;
|
||||
let metadata = metadata_client;
|
||||
@@ -225,6 +229,9 @@ async fn assemble(
|
||||
Arc::new(application::jobs::ProcessedEventsCleanupJob::new(
|
||||
Arc::clone(&processed_events),
|
||||
)),
|
||||
Arc::new(application::jobs::TombstoneCleanupJob::new(Arc::clone(
|
||||
&account_purger,
|
||||
))),
|
||||
];
|
||||
if let Some(job) = enrichment_job {
|
||||
periodic_jobs.push(job);
|
||||
@@ -282,7 +289,15 @@ async fn assemble(
|
||||
let reindex_handler = Arc::new(SearchReindexHandler::new(worker_deps.reindex_search))
|
||||
as Arc<dyn EventHandler>;
|
||||
|
||||
let account_purge = Arc::new(application::users::purge_account::AccountPurgeHandler::new(
|
||||
Arc::clone(&user),
|
||||
deletion_notifier,
|
||||
Arc::clone(&account_purger),
|
||||
Arc::clone(&object_storage),
|
||||
)) as Arc<dyn EventHandler>;
|
||||
|
||||
let mut h = vec![
|
||||
account_purge,
|
||||
poster,
|
||||
cleanup,
|
||||
search_cleanup,
|
||||
|
||||
Reference in New Issue
Block a user