Browse Source
Add option to force resync clients in admin panel
pull/437/head
Daniel García
6 years ago
No known key found for this signature in database
GPG Key ID: FC8A7D14C3CD543A
3 changed files with
37 additions and
5 deletions
-
src/api/admin.rs
-
src/db/models/user.rs
-
src/static/templates/admin/page.hbs
|
|
@ -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(); |
|
|
|
|
|
@ -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(); |
|
|
|
|
|
|
|
|
|
@ -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() }); |
|
|
|