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:
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() });