0
0
Fork 0
mirror of https://github.com/dani-garcia/vaultwarden synced 2024-12-15 01:53:43 +01:00

Add option to force resync clients in admin panel

This commit is contained in:
Daniel García 2019-03-07 21:08:33 +01:00
parent 27872f476e
commit 43f9038325
No known key found for this signature in database
GPG key ID: FC8A7D14C3CD543A
3 changed files with 37 additions and 5 deletions

View file

@ -26,6 +26,7 @@ pub fn routes() -> Vec<Route> {
invite_user, invite_user,
delete_user, delete_user,
deauth_user, deauth_user,
update_revision_users,
post_config, post_config,
delete_config, delete_config,
] ]
@ -177,6 +178,11 @@ fn deauth_user(uuid: String, _token: AdminToken, conn: DbConn) -> EmptyResult {
user.save(&conn) 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>")] #[post("/config", data = "<data>")]
fn post_config(data: Json<ConfigBuilder>, _token: AdminToken) -> EmptyResult { fn post_config(data: Json<ConfigBuilder>, _token: AdminToken) -> EmptyResult {
let data: ConfigBuilder = data.into_inner(); let data: ConfigBuilder = data.into_inner();

View file

@ -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 { pub fn update_revision(&mut self, conn: &DbConn) -> EmptyResult {
self.updated_at = Utc::now().naive_utc(); self.updated_at = Utc::now().naive_utc();

View file

@ -37,9 +37,14 @@
</div> </div>
<small class="d-block text-right mt-3"> <div class="mt-3">
<a id="reload-btn" href="">Reload users</a> <button type="button" class="btn btn-sm btn-link" onclick="updateRevisions();" title="Force all clients to fetch
</small> 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>
<div id="invite-form-block" class="align-items-center p-3 mb-3 text-white-50 bg-secondary rounded shadow"> <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> <div>
<h6 class="text-white mb-3">Configuration</h6> <h6 class="text-white mb-3">Configuration</h6>
<div class="small text-white mb-3"> <div class="small text-white mb-3">
NOTE: The settings here override the environment variables. Once saved, it's recommended to stop setting them NOTE: The settings here override the environment variables. Once saved, it's recommended to stop setting
to avoid confusion. This does not apply to the read-only section, which can only be set through the environment. them to avoid confusion. This does not apply to the read-only section, which can only be set through the
environment.
</div> </div>
<form class="form accordion" id="config-form"> <form class="form accordion" id="config-form">
{{#each config}} {{#each config}}
@ -213,6 +219,12 @@
"Error deauthorizing sessions"); "Error deauthorizing sessions");
return false; 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() { function inviteUser() {
inv = $("#email-invite"); inv = $("#email-invite");
data = JSON.stringify({ "email": inv.val() }); data = JSON.stringify({ "email": inv.val() });