vw_small

Hardened fork of Vaultwarden (https://github.com/dani-garcia/vaultwarden) with fewer features.
git clone https://git.philomathiclife.com/repos/vw_small
Log | Files | Refs | README

commit 43f9038325b2729016d066fcdaa22799b444dd0b
parent 27872f476edff5aa7d29dc6ac280370a3ba94953
Author: Daniel GarcĂ­a <dani-garcia@users.noreply.github.com>
Date:   Thu,  7 Mar 2019 21:08:33 +0100

Add option to force resync clients in admin panel

Diffstat:
Msrc/api/admin.rs | 6++++++
Msrc/db/models/user.rs | 14++++++++++++++
Msrc/static/templates/admin/page.hbs | 22+++++++++++++++++-----
3 files changed, 37 insertions(+), 5 deletions(-)

diff --git a/src/api/admin.rs b/src/api/admin.rs @@ -26,6 +26,7 @@ pub fn routes() -> Vec<Route> { invite_user, delete_user, deauth_user, + update_revision_users, post_config, delete_config, ] @@ -177,6 +178,11 @@ fn deauth_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult { user.save(&conn) } +#[post("/users/update_revision")] +fn update_revision_users(_token: AdminToken, conn: DbConn) -> EmptyResult { + User::update_all_revisions(&conn) +} + #[post("/config", data = "<data>")] fn post_config(data: Json<ConfigBuilder>, _token: AdminToken) -> EmptyResult { let data: ConfigBuilder = data.into_inner(); diff --git a/src/db/models/user.rs b/src/db/models/user.rs @@ -178,6 +178,20 @@ impl User { } } + pub fn update_all_revisions(conn: &DbConn) -> EmptyResult { + let updated_at = Utc::now().naive_utc(); + + crate::util::retry( + || { + diesel::update(users::table) + .set(users::updated_at.eq(updated_at)) + .execute(&**conn) + }, + 10, + ) + .map_res("Error updating revision date for all users") + } + pub fn update_revision(&mut self, conn: &DbConn) -> EmptyResult { self.updated_at = Utc::now().naive_utc(); diff --git a/src/static/templates/admin/page.hbs b/src/static/templates/admin/page.hbs @@ -37,9 +37,14 @@ </div> - <small class="d-block text-right mt-3"> - <a id="reload-btn" href="">Reload users</a> - </small> + <div class="mt-3"> + <button type="button" class="btn btn-sm btn-link" onclick="updateRevisions();" title="Force all clients to fetch + new data next time they connect. Useful after restoring a backup to remove any stale data."> + Force clients to resync + </button> + + <button type="button" class="btn btn-sm btn-primary float-right" onclick="reload();">Reload users</button> + </div> </div> <div id="invite-form-block" class="align-items-center p-3 mb-3 text-white-50 bg-secondary rounded shadow"> @@ -58,8 +63,9 @@ <div> <h6 class="text-white mb-3">Configuration</h6> <div class="small text-white mb-3"> - NOTE: The settings here override the environment variables. Once saved, it's recommended to stop setting them - to avoid confusion. This does not apply to the read-only section, which can only be set through the environment. + NOTE: The settings here override the environment variables. Once saved, it's recommended to stop setting + them to avoid confusion. This does not apply to the read-only section, which can only be set through the + environment. </div> <form class="form accordion" id="config-form"> {{#each config}} @@ -213,6 +219,12 @@ "Error deauthorizing sessions"); return false; } + function updateRevisions() { + _post("/admin/users/update_revision", + "Success, clients will sync next time they connect", + "Error forcing clients to sync"); + return false; + } function inviteUser() { inv = $("#email-invite"); data = JSON.stringify({ "email": inv.val() });