Files
update-server/app/repositories/admin_user_repository.py
T

136 lines
3.7 KiB
Python

import db
def list_users():
conn = db.get_conn()
rows = conn.execute(
"""SELECT id,username,display_name,roles,status,created_at,updated_at,last_login_at
FROM admin_users
ORDER BY id ASC"""
).fetchall()
conn.close()
return rows
def has_any_user() -> bool:
conn = db.get_conn()
row = conn.execute("SELECT 1 FROM admin_users LIMIT 1").fetchone()
conn.close()
return bool(row)
def get_user(username: str):
conn = db.get_conn()
row = conn.execute("SELECT * FROM admin_users WHERE username=?", (username,)).fetchone()
conn.close()
return row
def create_user(username: str, password_hash: str, display_name: str, roles: str, status: str = "active") -> None:
conn = db.get_conn()
conn.execute(
"""INSERT INTO admin_users(username,password_hash,display_name,roles,status)
VALUES(?,?,?,?,?)""",
(username, password_hash, display_name, roles, status),
)
conn.commit()
conn.close()
def update_user_profile(username: str, display_name: str, roles: str) -> int:
conn = db.get_conn()
cur = conn.execute(
"UPDATE admin_users SET display_name=?,roles=?,updated_at=datetime('now') WHERE username=?",
(display_name, roles, username),
)
conn.commit()
count = cur.rowcount
conn.close()
return count
def update_password(username: str, password_hash: str) -> int:
conn = db.get_conn()
cur = conn.execute(
"UPDATE admin_users SET password_hash=?,updated_at=datetime('now') WHERE username=?",
(password_hash, username),
)
conn.commit()
count = cur.rowcount
conn.close()
return count
def count_active_super_admins() -> int:
conn = db.get_conn()
rows = conn.execute(
"SELECT roles FROM admin_users WHERE status='active'"
).fetchall()
conn.close()
count = 0
for row in rows:
if "super_admin" in (row["roles"] or ""):
count += 1
return count
def set_user_status(username: str, status: str) -> int:
conn = db.get_conn()
cur = conn.execute(
"UPDATE admin_users SET status=?,updated_at=datetime('now') WHERE username=?",
(status, username),
)
conn.commit()
count = cur.rowcount
conn.close()
return count
def revoke_refresh_tokens_for_user(username: str) -> int:
conn = db.get_conn()
cur = conn.execute(
"UPDATE admin_refresh_tokens SET revoked_at=datetime('now') WHERE username=? AND revoked_at IS NULL",
(username,),
)
conn.commit()
count = cur.rowcount
conn.close()
return count
def mark_login(username: str) -> None:
conn = db.get_conn()
conn.execute("UPDATE admin_users SET last_login_at=datetime('now') WHERE username=?", (username,))
conn.commit()
conn.close()
def save_refresh_token(token_id: str, username: str, token_hash: str, expires_at: str, user_agent: str, ip: str) -> None:
conn = db.get_conn()
conn.execute(
"""INSERT INTO admin_refresh_tokens(token_id,username,token_hash,expires_at,user_agent,ip)
VALUES(?,?,?,?,?,?)""",
(token_id, username, token_hash, expires_at, user_agent, ip),
)
conn.commit()
conn.close()
def get_refresh_token(token_id: str):
conn = db.get_conn()
row = conn.execute("SELECT * FROM admin_refresh_tokens WHERE token_id=?", (token_id,)).fetchone()
conn.close()
return row
def revoke_refresh_token(token_id: str) -> int:
conn = db.get_conn()
cur = conn.execute(
"UPDATE admin_refresh_tokens SET revoked_at=datetime('now') WHERE token_id=? AND revoked_at IS NULL",
(token_id,),
)
conn.commit()
count = cur.rowcount
conn.close()
return count