You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
3.4 KiB
86 lines
3.4 KiB
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(())
|
|
}
|
|
|