Skip to content
Snippets Groups Projects
Unverified Commit 43f90383 authored by Daniel García's avatar Daniel García
Browse files

Add option to force resync clients in admin panel

parent 27872f47
No related branches found
No related tags found
No related merge requests found
...@@ -26,6 +26,7 @@ pub fn routes() -> Vec<Route> { ...@@ -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 { ...@@ -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();
......
...@@ -178,6 +178,20 @@ impl User { ...@@ -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();
......
...@@ -37,9 +37,14 @@ ...@@ -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 @@ ...@@ -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 @@ ...@@ -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() });
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment