Fixing imports
This commit is contained in:
1 parent
8d37b2ad67
commit
3ebe9a0894
6 files changed
+316
No files matched your search
@@ -43,6 +43,7 @@ from app.models.fit import FitLabel
|
||||
from app.models.unc_thread import UncSeries
|
||||
from app.models.user import User
|
||||
from app.services import augmented_part_sync as augmented_part_sync_service
|
||||
from app.services import danger_zone as danger_zone_service
|
||||
from app.services import fit_matching as fit_matching_service
|
||||
from app.services import jobs
|
||||
from app.services import odata as odata_service
|
||||
@@ -131,6 +132,16 @@ def web_require(*perms: str):
|
||||
return checker
|
||||
|
||||
|
||||
async def web_require_superuser(user: User = Depends(get_current_web_user)) -> User:
|
||||
"""Web dependency: superusers only, no permission-string bypass."""
|
||||
if not user.is_superuser:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_403_FORBIDDEN,
|
||||
detail="You do not have access to this page.",
|
||||
)
|
||||
return user
|
||||
|
||||
|
||||
async def _role_perm_ctx(db: AsyncSession) -> dict:
|
||||
all_perms = await role_crud.list_permissions(db)
|
||||
scopes = sorted({p.name.split(":")[0] for p in all_perms})
|
||||
@@ -3598,3 +3609,45 @@ async def audit_log_page(
|
||||
"admin/audit_log.html",
|
||||
{"user": user, "entries": await audit_crud.list_recent(db)},
|
||||
)
|
||||
|
||||
|
||||
# --- Danger Zone ---------------------------------------------------------------
|
||||
|
||||
|
||||
@router.get("/danger-zone", response_class=HTMLResponse)
|
||||
async def danger_zone_page(
|
||||
request: Request,
|
||||
user: User = Depends(web_require_superuser),
|
||||
):
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"admin/danger_zone.html",
|
||||
{"user": user},
|
||||
)
|
||||
|
||||
|
||||
@router.post("/danger-zone/purge", response_class=HTMLResponse)
|
||||
async def purge_database(
|
||||
request: Request,
|
||||
db: AsyncSession = Depends(get_db),
|
||||
actor: User = Depends(web_require_superuser),
|
||||
):
|
||||
counts = await danger_zone_service.purge_domain_data(db)
|
||||
total = sum(counts.values())
|
||||
breakdown = ", ".join(f"{label} {n}" for label, n in counts.items() if n)
|
||||
await audit_crud.log(
|
||||
db,
|
||||
actor=actor,
|
||||
action="delete",
|
||||
resource_type="Database",
|
||||
resource_id=None,
|
||||
description=(
|
||||
f"Purged all domain data via Danger Zone ({total} row(s) deleted"
|
||||
+ (f": {breakdown})" if breakdown else ")")
|
||||
),
|
||||
)
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"admin/_danger_zone_result.html",
|
||||
{"total": total, "counts": counts},
|
||||
)
|
||||
Reference in new issue
Block a user