committed by
GitHub
3 changed files with 196 additions and 31 deletions
@ -0,0 +1,86 @@ |
|||
use crate::{ |
|||
api::{self, purge_auth_requests}, |
|||
db::{models::SsoAuth, DbPool}, |
|||
Error, |
|||
}; |
|||
|
|||
use crate::api::core::two_factor::duo_oidc::purge_duo_contexts; |
|||
|
|||
#[derive(Clone, Copy, Debug)] |
|||
pub enum ScheduledJob { |
|||
SendPurge, |
|||
TrashPurge, |
|||
Incomplete2faNotifications, |
|||
EmergencyRequestTimeout, |
|||
EmergencyNotificationReminder, |
|||
AuthRequestPurge, |
|||
DuoContextPurge, |
|||
EventCleanup, |
|||
PurgeIncompleteSsoAuth, |
|||
} |
|||
|
|||
const ALL_JOBS: [ScheduledJob; 9] = [ |
|||
ScheduledJob::SendPurge, |
|||
ScheduledJob::TrashPurge, |
|||
ScheduledJob::Incomplete2faNotifications, |
|||
ScheduledJob::EmergencyRequestTimeout, |
|||
ScheduledJob::EmergencyNotificationReminder, |
|||
ScheduledJob::AuthRequestPurge, |
|||
ScheduledJob::DuoContextPurge, |
|||
ScheduledJob::EventCleanup, |
|||
ScheduledJob::PurgeIncompleteSsoAuth, |
|||
]; |
|||
|
|||
impl ScheduledJob { |
|||
pub const fn as_str(self) -> &'static str { |
|||
match self { |
|||
ScheduledJob::SendPurge => "send_purge", |
|||
ScheduledJob::TrashPurge => "trash_purge", |
|||
ScheduledJob::Incomplete2faNotifications => "incomplete_2fa_notifications", |
|||
ScheduledJob::EmergencyRequestTimeout => "emergency_request_timeout", |
|||
ScheduledJob::EmergencyNotificationReminder => "emergency_notification_reminder", |
|||
ScheduledJob::AuthRequestPurge => "auth_request_purge", |
|||
ScheduledJob::DuoContextPurge => "duo_context_purge", |
|||
ScheduledJob::EventCleanup => "event_cleanup", |
|||
ScheduledJob::PurgeIncompleteSsoAuth => "purge_incomplete_sso_auth", |
|||
} |
|||
} |
|||
|
|||
pub fn from_str(name: &str) -> Option<Self> { |
|||
match name { |
|||
"send_purge" => Some(ScheduledJob::SendPurge), |
|||
"trash_purge" => Some(ScheduledJob::TrashPurge), |
|||
"incomplete_2fa_notifications" => Some(ScheduledJob::Incomplete2faNotifications), |
|||
"emergency_request_timeout" => Some(ScheduledJob::EmergencyRequestTimeout), |
|||
"emergency_notification_reminder" => Some(ScheduledJob::EmergencyNotificationReminder), |
|||
"auth_request_purge" => Some(ScheduledJob::AuthRequestPurge), |
|||
"duo_context_purge" => Some(ScheduledJob::DuoContextPurge), |
|||
"event_cleanup" => Some(ScheduledJob::EventCleanup), |
|||
"purge_incomplete_sso_auth" => Some(ScheduledJob::PurgeIncompleteSsoAuth), |
|||
_ => None, |
|||
} |
|||
} |
|||
|
|||
pub fn names() -> Vec<&'static str> { |
|||
ALL_JOBS.iter().map(|job| job.as_str()).collect() |
|||
} |
|||
} |
|||
|
|||
pub async fn run(pool: DbPool, job: ScheduledJob) -> Result<(), Error> { |
|||
info!("Running job: {}", job.as_str()); |
|||
|
|||
match job { |
|||
ScheduledJob::SendPurge => api::purge_sends(pool).await, |
|||
ScheduledJob::TrashPurge => api::purge_trashed_ciphers(pool).await, |
|||
ScheduledJob::Incomplete2faNotifications => api::send_incomplete_2fa_notifications(pool).await, |
|||
ScheduledJob::EmergencyRequestTimeout => api::emergency_request_timeout_job(pool).await, |
|||
ScheduledJob::EmergencyNotificationReminder => api::emergency_notification_reminder_job(pool).await, |
|||
ScheduledJob::AuthRequestPurge => purge_auth_requests(pool).await, |
|||
ScheduledJob::DuoContextPurge => purge_duo_contexts(pool).await, |
|||
ScheduledJob::EventCleanup => api::event_cleanup_job(pool).await, |
|||
ScheduledJob::PurgeIncompleteSsoAuth => SsoAuth::delete_expired(pool).await?, |
|||
} |
|||
|
|||
info!("Finished job: {}", job.as_str()); |
|||
Ok(()) |
|||
} |
|||
Loading…
Reference in new issue