Add admin user rename
This commit is contained in:
30
core/auth.py
30
core/auth.py
@@ -210,6 +210,36 @@ class AuthManager:
|
||||
logger.info(f"Deleted user '{username}' (by {requesting_user}); revoked {revoked} active session(s)")
|
||||
return True
|
||||
|
||||
def rename_user(self, old_username: str, new_username: str, requesting_user: str) -> bool:
|
||||
"""Rename a user in auth config and active sessions. Admin only."""
|
||||
old_username = old_username.strip().lower()
|
||||
new_username = new_username.strip().lower()
|
||||
requesting_user = (requesting_user or "").strip().lower()
|
||||
if not old_username or not new_username:
|
||||
return False
|
||||
if old_username not in self.users:
|
||||
return False
|
||||
if new_username in self.users:
|
||||
return False
|
||||
if not self.users.get(requesting_user, {}).get("is_admin"):
|
||||
return False
|
||||
self._config.setdefault("users", {})[new_username] = self._config["users"].pop(old_username)
|
||||
self._save()
|
||||
|
||||
renamed_sessions = 0
|
||||
with self._sessions_lock:
|
||||
for sess in self._sessions.values():
|
||||
if (sess or {}).get("username") == old_username:
|
||||
sess["username"] = new_username
|
||||
renamed_sessions += 1
|
||||
if renamed_sessions:
|
||||
self._save_sessions()
|
||||
logger.info(
|
||||
"Renamed user '%s' -> '%s' (by %s); updated %d active session(s)",
|
||||
old_username, new_username, requesting_user, renamed_sessions,
|
||||
)
|
||||
return True
|
||||
|
||||
def is_admin(self, username: str) -> bool:
|
||||
return self.users.get(username, {}).get("is_admin", False)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user