login system

This commit is contained in:
2026-06-02 11:31:11 -04:00
parent f6bced78f3
commit a1b120076b
17 changed files with 579 additions and 27 deletions
+70
View File
@@ -54,8 +54,18 @@ def _init_db():
duration_seconds REAL
);
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL UNIQUE,
password_hash TEXT NOT NULL,
role TEXT NOT NULL,
is_active INTEGER NOT NULL DEFAULT 1,
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE INDEX IF NOT EXISTS idx_tests_test_id ON tests (test_id);
CREATE INDEX IF NOT EXISTS idx_tests_device ON tests (device);
CREATE INDEX IF NOT EXISTS idx_users_username ON users (username);
"""
)
@@ -278,4 +288,64 @@ def count_tests():
return row["n"]
def get_user_by_username(username):
with _lock:
row = _conn.execute(
"""
SELECT id, username, password_hash, role, is_active, created_at
FROM users
WHERE username = ?
""",
(username,),
).fetchone()
return dict(row) if row else None
def create_user(username, password_hash, role="viewer", is_active=1):
with _tx():
cursor = _conn.execute(
"""
INSERT INTO users (username, password_hash, role, is_active)
VALUES (?, ?, ?, ?)
""",
(username, password_hash, role, is_active),
)
return cursor.lastrowid
def count_users():
with _lock:
row = _conn.execute("SELECT COUNT(*) AS n FROM users").fetchone()
return row["n"]
def get_user_by_id(user_id):
with _lock:
row = _conn.execute(
"""
SELECT id, username, password_hash, role, is_active, created_at
FROM users
WHERE id = ?
""",
(user_id,),
).fetchone()
return dict(row) if row else None
def get_all_users():
with _lock:
rows = _conn.execute(
"""
SELECT id, username, role, is_active, created_at
FROM users
ORDER BY username ASC
"""
).fetchall()
return [dict(row) for row in rows]
def clear_users():
with _tx():
_conn.execute("DELETE FROM users")
_init_db()