diff --git a/src/api/admin.rs b/src/api/admin.rs index 415311e7eb398e779d94708c74fc80030590da55..f30855e4d05ffa210fdfe4d8a5b8f903e27b517d 100644 --- a/src/api/admin.rs +++ b/src/api/admin.rs @@ -297,6 +297,11 @@ fn users_overview(_token: AdminToken, conn: DbConn) -> ApiResult<Html<String>> { usr["cipher_count"] = json!(Cipher::count_owned_by_user(&u.uuid, &conn)); usr["attachment_count"] = json!(Attachment::count_by_user(&u.uuid, &conn)); usr["attachment_size"] = json!(get_display_size(Attachment::size_by_user(&u.uuid, &conn) as i32)); + usr["created_at"] = json!(&u.created_at.format("%Y-%m-%d %H:%M:%S").to_string()); + usr["last_active"] = match u.last_active(&conn) { + Some(timestamp) => json!(timestamp.format("%Y-%m-%d %H:%M:%S").to_string()), + None => json!("Never") + }; usr }).collect(); diff --git a/src/db/models/device.rs b/src/db/models/device.rs index 6d6743ffd0d91d9f048165dbfeec19e5ac339a55..0172ffb59ec93e34fa72c64ca1b6c138e4f93553 100644 --- a/src/db/models/device.rs +++ b/src/db/models/device.rs @@ -178,4 +178,15 @@ impl Device { .from_db() }} } + + pub fn find_latest_active_by_user(user_uuid: &str, conn: &DbConn) -> Option<Self> { + db_run! { conn: { + devices::table + .filter(devices::user_uuid.eq(user_uuid)) + .order(devices::updated_at.desc()) + .first::<DeviceDb>(conn) + .ok() + .from_db() + }} + } } diff --git a/src/db/models/user.rs b/src/db/models/user.rs index 32c3cecc447fc167cbd548737dbd989e32a2ad53..a9c6c3d29e807ea02ef405c08e0096bd034d31e0 100644 --- a/src/db/models/user.rs +++ b/src/db/models/user.rs @@ -288,6 +288,13 @@ impl User { users::table.load::<UserDb>(conn).expect("Error loading users").from_db() }} } + + pub fn last_active(&self, conn: &DbConn) -> Option<NaiveDateTime> { + match Device::find_latest_active_by_user(&self.uuid, conn) { + Some(device) => Some(device.updated_at), + None => None + } + } } impl Invitation { diff --git a/src/static/templates/admin/users.hbs b/src/static/templates/admin/users.hbs index c99d92837d0f48874b365b01b80ee187a85fd5f2..9f55b1e46f9f2b9c47bb9c0be50574e0e0f116fd 100644 --- a/src/static/templates/admin/users.hbs +++ b/src/static/templates/admin/users.hbs @@ -21,6 +21,8 @@ <div class="float-left"> <strong>{{Name}}</strong> <span class="d-block">{{Email}}</span> + <span class="d-block">Created at: {{created_at}}</span> + <span class="d-block">Last active: {{last_active}}</span> <span class="d-block"> {{#if TwoFactorEnabled}} <span class="badge badge-success mr-2" title="2FA is enabled">2FA</span>