admin/maintenance: sqlite vacuum

This commit is contained in:
Philippe Loctaux 2023-05-06 16:38:22 +02:00
parent ff6c910b2f
commit 37c5127bbc
6 changed files with 52 additions and 12 deletions

View file

@ -536,6 +536,16 @@
},
"query": "update totp_login_requests\n\nset used_at = CURRENT_TIMESTAMP\n\nwhere token is ?"
},
"657fdc2b228b14a6aba717e5083daf48204274ab62d73ec8968bcd0c7568b157": {
"describe": {
"columns": [],
"nullable": [],
"parameters": {
"Right": 0
}
},
"query": "vacuum"
},
"68cfa3d135eb4cdbdbcb3b943518b4ac09c371af689c444eb439a37f91ecf7a5": {
"describe": {
"columns": [],

View file

@ -38,6 +38,15 @@ impl Settings {
.map_err(handle_error)
}
pub async fn vacuum(conn: impl SqliteExecutor<'_>) -> Result<(), Error> {
sqlx::query!("vacuum")
.execute(conn)
.await
.map_err(handle_error)?;
Ok(())
}
pub async fn set_business_name(
conn: impl SqliteExecutor<'_>,
value: Option<&str>,

View file

@ -17,6 +17,7 @@ pub fn routes() -> Vec<Route> {
settings_security,
settings_security_form,
settings_maintenance,
settings_maintenance_form,
admin_apps_list,
admin_apps_new,
admin_apps_new_form,

View file

@ -209,3 +209,29 @@ pub async fn settings_maintenance(
.map(|flash| Page::with_flash(page.clone(), flash))
.unwrap_or_else(|| page.into()))
}
#[derive(Debug, FromForm)]
pub struct CleanForm {
pub vacuum: Option<bool>,
}
#[post("/admin/settings/maintenance", data = "<form>")]
pub async fn settings_maintenance_form(
mut db: Connection<Database>,
_admin: JwtAdmin,
form: Form<CleanForm>,
) -> Result<Flash<Redirect>> {
let (flash_kind, flash_message) = if matches!(form.vacuum, Some(true)) {
Settings::vacuum(&mut **db).await?;
(FlashKind::Success, "Database has been cleaned.")
} else {
(FlashKind::Warning, "Nothing to do.")
};
Ok(Flash::new(
Redirect::to(uri!(settings_maintenance)),
flash_kind,
flash_message,
))
}

View file

@ -75,17 +75,7 @@
</div>
<h3>Do you want to clean the database?</h3>
<div class="mt-2">
This action will <strong>delete</strong> the following:
</div>
<ul class="list-inline mt-1">
<li>Authorization codes</li>
<li>Refresh tokens</li>
<li>TOTP requests</li>
</ul>
<div class="mt-2">
This action will be permanent.
</div>
<div class="mt-2">This might take some time, but should not be long.</div>
</div>
@ -99,7 +89,7 @@
<div class="col">
<form action="" method="post">
<button type="submit" name="clean" value="true" class="btn btn-danger w-100">
<button type="submit" name="vacuum" value="true" class="btn btn-danger w-100">
Clean database
</button>
</form>

View file

@ -41,6 +41,10 @@ impl Settings {
.map(human_bytes))
}
pub async fn vacuum(conn: impl SqliteExecutor<'_>) -> Result<(), Error> {
Ok(DatabaseSettings::vacuum(conn).await?)
}
pub async fn set_business_name(
conn: impl SqliteExecutor<'_>,
business_name: &str,