users migrace má nové sloupce gitea_user_id, gitea_sync_status, gitea_sync_error, gitea_synced_at.
Přidal jsem gitea_provisioning.py, který přes Gitea API vytváří, aktivuje, deaktivuje a synchronizuje účty.
Role viewer Gitea účet nemá; developer a admin účet mají.
Změny role a enable/disable v administraci spouští sync do Gitea.
Admin UI v routes/users.py zobrazuje stav Gitea synchronizace a má ruční Sync Gitea.
Google login po přihlášení dorovnává Gitea stav podle portálového uživatele.
Gitea OAuth login je v portálu vypnutý; endpointy zůstaly, ale vrací hlášku, že se má použít Google.
Lokální login se zobrazuje/povolí jen při explicitním AUTH_MODE=local.
Gitea API token se čte z GITEA_ADMIN_TOKEN, případně fallback GITEA_API_TOKEN nebo GITEA_TOKEN. Podřízené Gitea username je deterministicky portal-{user_id}, portálová tabulka zůstává zdroj pravdy.
Ověření: python -m py_compile prošel pro všechny upravené Python soubory.
This commit is contained in:
JiriUhlir
2026-06-10 09:34:56 +02:00
parent 38edf07ff3
commit b1263edac6
7 changed files with 334 additions and 24 deletions
+10 -1
View File
@@ -23,7 +23,11 @@ def ensure_user_columns(con) -> None:
last_login_at TEXT,
auth_provider TEXT,
provider_subject TEXT,
avatar_url TEXT
avatar_url TEXT,
gitea_user_id INTEGER,
gitea_sync_status TEXT NOT NULL DEFAULT 'not_required',
gitea_sync_error TEXT,
gitea_synced_at TEXT
)
"""
)
@@ -45,6 +49,10 @@ def ensure_user_columns(con) -> None:
"auth_provider": "TEXT",
"provider_subject": "TEXT",
"avatar_url": "TEXT",
"gitea_user_id": "INTEGER",
"gitea_sync_status": "TEXT NOT NULL DEFAULT 'not_required'",
"gitea_sync_error": "TEXT",
"gitea_synced_at": "TEXT",
}
for column, definition in defaults.items():
if column not in columns:
@@ -54,6 +62,7 @@ def ensure_user_columns(con) -> None:
if "is_active" in columns and "is_enabled" in columns:
con.execute("UPDATE users SET is_enabled = COALESCE(is_active, 1) WHERE is_enabled IS NULL")
con.execute("UPDATE users SET role = 'viewer' WHERE role IS NULL OR role = ''")
con.execute("UPDATE users SET gitea_sync_status = 'not_required' WHERE gitea_sync_status IS NULL OR gitea_sync_status = ''")
con.execute("UPDATE users SET created_at = CURRENT_TIMESTAMP WHERE created_at IS NULL OR created_at = ''")
con.execute("UPDATE users SET updated_at = COALESCE(created_at, CURRENT_TIMESTAMP) WHERE updated_at IS NULL OR updated_at = ''")
con.execute("CREATE INDEX IF NOT EXISTS idx_users_email ON users(email)")