feat: Allow admins to disable the login capability of an account

# Conflicts:
#	src/admin/user/commands.rs
This commit is contained in:
timedout
2026-01-06 20:28:12 +00:00
parent 3483059e1c
commit 1c816850ed
5 changed files with 103 additions and 2 deletions
+14
View File
@@ -78,6 +78,7 @@ struct Data {
userid_password: Arc<Map>,
userid_suspension: Arc<Map>,
userid_lock: Arc<Map>,
userid_login_disabled: Arc<Map>,
userid_selfsigningkeyid: Arc<Map>,
userid_usersigningkeyid: Arc<Map>,
useridprofilekey_value: Arc<Map>,
@@ -117,6 +118,7 @@ impl crate::Service for Service {
userid_password: args.db["userid_password"].clone(),
userid_suspension: args.db["userid_suspension"].clone(),
userid_lock: args.db["userid_lock"].clone(),
userid_login_disabled: args.db["userid_login_disabled"].clone(),
userid_selfsigningkeyid: args.db["userid_selfsigningkeyid"].clone(),
userid_usersigningkeyid: args.db["userid_usersigningkeyid"].clone(),
useridprofilekey_value: args.db["useridprofilekey_value"].clone(),
@@ -295,6 +297,18 @@ impl Service {
}
}
pub fn disable_login(&self, user_id: &UserId) {
self.db.userid_login_disabled.insert(user_id, "1");
}
pub fn enable_login(&self, user_id: &UserId) {
self.db.userid_login_disabled.remove(user_id);
}
pub async fn is_login_disabled(&self, user_id: &UserId) -> bool {
self.db.userid_login_disabled.get(user_id).await.is_ok()
}
/// Check if account is active, infallible
pub async fn is_active(&self, user_id: &UserId) -> bool {
!self.is_deactivated(user_id).await.unwrap_or(true)