This commit is contained in:
JiriUhlir
2026-06-17 12:47:53 +02:00
parent 223f59d750
commit bd256d565c
8 changed files with 550 additions and 34 deletions
+21 -10
View File
@@ -18,9 +18,11 @@ from app.db.users import (
update_user_role,
)
from app.gitea_provisioning import apply_gitea_credentials, sync_gitea_user
from app.logging_config import get_logger
from app.templates.layout import page
router = APIRouter()
logger = get_logger(__name__)
# Gitea handle: začíná alfanumerickým znakem, dál povolen . _ -; max 40 znaků.
GITEA_USERNAME_RE = re.compile(r"^[A-Za-z0-9][A-Za-z0-9._-]{0,39}$")
@@ -383,14 +385,10 @@ def update_gitea_credentials_action(
)
result = apply_gitea_credentials(target, new_username, new_password)
if result.get("status") == "error":
return RedirectResponse(
url="/portal/admin/users?error=" + quote(f"Gitea: {result.get('error')}"),
status_code=303,
)
applied = result.get("applied") or []
if "username" in applied:
errors = result.get("errors") or []
if result.get("renamed"):
set_gitea_username(user_id, result.get("gitea_username") or new_username)
log_audit_event(
@@ -401,12 +399,25 @@ def update_gitea_credentials_action(
metadata={
"username": target.get("username"),
"gitea_username": result.get("gitea_username"),
"applied": applied, # heslo se nikdy nezaznamenává
"applied": applied,
"errors": errors, # heslo se nikdy nezaznamenává
},
)
changed = ", ".join(applied) if applied else "beze změny"
status = result.get("status")
if status == "error":
detail = result.get("error") or "; ".join(errors) or "neznámá chyba"
logger.error("Změna Gitea údajů selhala pro uživatele id=%s: %s", user_id, detail)
return RedirectResponse(url="/portal/admin/users?error=" + quote(f"Gitea: {detail}"), status_code=303)
if errors:
msg = f"Gitea částečně aktualizováno ({', '.join(applied)}). Nepovedlo se: {'; '.join(errors)}"
logger.warning("Gitea údaje částečně pro uživatele id=%s: applied=%s errors=%s", user_id, applied, errors)
return RedirectResponse(url="/portal/admin/users?error=" + quote(msg), status_code=303)
logger.info("Gitea údaje aktualizovány pro uživatele id=%s: %s", user_id, applied)
return RedirectResponse(
url="/portal/admin/users?message=" + quote(f"Gitea přihlašovací údaje aktualizovány ({changed})."),
url="/portal/admin/users?message=" + quote(f"Gitea aktualizováno: {', '.join(applied) or 'beze změny'}."),
status_code=303,
)