audit logging
This commit is contained in:
@@ -7,6 +7,7 @@ from fastapi.responses import HTMLResponse, RedirectResponse
|
||||
from ..auth import require_user
|
||||
from ..backups import is_backup_path, list_backups
|
||||
from ..config import BACKUP_SCRIPT
|
||||
from ..db.audit import log_audit_event
|
||||
from ..shell import run_command
|
||||
from ..templates.layout import page, render_result
|
||||
|
||||
@@ -44,6 +45,10 @@ def backups_page(request: Request, user=Depends(require_user)):
|
||||
<input readonly value="{restore_cmd}">
|
||||
<button type="button" class="copy-button" data-copy-value="{restore_cmd}" onclick="copyText(this)">Kopírovat</button>
|
||||
</div>
|
||||
<form method="post" action="/portal/backups/restore-trigger">
|
||||
<input type="hidden" name="backup_path" value="{backup_path}">
|
||||
<button type="submit" class="btn-secondary">Evidovat obnovu</button>
|
||||
</form>
|
||||
<div class="muted">Obnova je nebezpečná a musí se spustit ručně přes SSH.</div>
|
||||
</td>
|
||||
<td class="actions-cell">
|
||||
@@ -95,6 +100,15 @@ def backups_page(request: Request, user=Depends(require_user)):
|
||||
def create_backup(user=Depends(require_user)):
|
||||
result = run_command([BACKUP_SCRIPT])
|
||||
status = "OK" if result.returncode == 0 else "FAILED"
|
||||
log_audit_event(
|
||||
user,
|
||||
action="backup_create",
|
||||
target_type="backup",
|
||||
metadata={
|
||||
"status": status,
|
||||
"returncode": result.returncode,
|
||||
},
|
||||
)
|
||||
|
||||
return render_result(
|
||||
title=f"Vytvoření zálohy: {status}",
|
||||
@@ -116,3 +130,23 @@ def delete_backup(backup_path: str = Form(...), user=Depends(require_user)):
|
||||
target.unlink()
|
||||
|
||||
return RedirectResponse(url="/portal/backups", status_code=303)
|
||||
|
||||
|
||||
@router.post("/backups/restore-trigger")
|
||||
def restore_trigger(backup_path: str = Form(...), user=Depends(require_user)):
|
||||
target = Path(backup_path)
|
||||
|
||||
if not is_backup_path(target):
|
||||
return HTMLResponse("Neplatná cesta k záloze", status_code=400)
|
||||
|
||||
log_audit_event(
|
||||
user,
|
||||
action="restore_trigger",
|
||||
target_type="backup",
|
||||
target_id=target.name,
|
||||
metadata={
|
||||
"backup_path": str(target),
|
||||
},
|
||||
)
|
||||
|
||||
return RedirectResponse(url="/portal/backups", status_code=303)
|
||||
|
||||
Reference in New Issue
Block a user