Finalize secret tree page
This commit is contained in:
@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
"""Secrets views."""
|
||||
|
||||
# pyright: reportUnusedFunction=false
|
||||
import os
|
||||
import logging
|
||||
import secrets as pysecrets
|
||||
from typing import Annotated, Any
|
||||
@ -64,57 +64,17 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
current_user: Annotated[LocalUserInfo, Depends(dependencies.get_user_info)],
|
||||
):
|
||||
groups = await admin.get_secret_groups()
|
||||
LOG.info("Groups: %s", groups.model_dump_json(indent=2))
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/index.html.j2",
|
||||
{
|
||||
"groups": groups,
|
||||
"user": current_user,
|
||||
"selected_group": None,
|
||||
"group_path_nodes": ["/"],
|
||||
},
|
||||
)
|
||||
|
||||
# @app.get("/secrets/partial/root_group")
|
||||
# async def get_root_group(
|
||||
# request: Request,
|
||||
# admin: Annotated[AdminBackend, Depends(dependencies.get_admin_backend)],
|
||||
# ):
|
||||
# """Get root group."""
|
||||
# clients = await admin.get_clients()
|
||||
# return templates.TemplateResponse(
|
||||
# request,
|
||||
# "secrets/partials/edit_root.html.j2",
|
||||
# {
|
||||
# "group_path_nodes": [],
|
||||
# "clients": clients,
|
||||
# },
|
||||
# )
|
||||
|
||||
# @app.get("/secrets/partial/secret/{name}")
|
||||
# async def get_secret_tree_detail_partial(
|
||||
# request: Request,
|
||||
# name: str,
|
||||
# admin: Annotated[AdminBackend, Depends(dependencies.get_admin_backend)],
|
||||
# ):
|
||||
# """Get partial secret detail."""
|
||||
# secret = await admin.get_secret(name)
|
||||
# groups = await admin.get_secret_groups(flat=True)
|
||||
# events = await admin.get_audit_log_detailed(limit=10, secret_name=name)
|
||||
|
||||
# if not secret:
|
||||
# raise HTTPException(
|
||||
# status_code=status.HTTP_404_NOT_FOUND, detail="Secret not found"
|
||||
# )
|
||||
# return templates.TemplateResponse(
|
||||
# request,
|
||||
# "secrets/partials/tree_detail.html.j2",
|
||||
# {
|
||||
# "secret": secret,
|
||||
# "groups": groups,
|
||||
# "events": events,
|
||||
# },
|
||||
# )
|
||||
|
||||
@app.get("/secrets/group/")
|
||||
async def show_root_group(
|
||||
request: Request,
|
||||
@ -138,6 +98,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
context["user"] = current_user
|
||||
context["groups"] = groups
|
||||
context["group_path_nodes"] = ["/"]
|
||||
context["selected_group"] = "/"
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request, template_name, context, headers=headers
|
||||
@ -161,8 +122,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
headers: dict[str, str] = {}
|
||||
context: dict[str, Any] = {
|
||||
"group_page": True,
|
||||
"name": group.group_name,
|
||||
"description": group.description,
|
||||
"group": group,
|
||||
"clients": clients,
|
||||
}
|
||||
if request.headers.get("HX-Request"):
|
||||
@ -176,6 +136,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
context["user"] = current_user
|
||||
context["groups"] = groups
|
||||
context["group_path_nodes"] = group.path.split("/")
|
||||
context["selected_group"] = group.path
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request, template_name, context, headers=headers
|
||||
@ -190,7 +151,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
):
|
||||
"""Get secret detail."""
|
||||
secret = await admin.get_secret(name)
|
||||
groups = await admin.get_secret_groups(flat=True)
|
||||
groups = await admin.get_secret_groups()
|
||||
events = await admin.get_audit_log_detailed(limit=10, secret_name=name)
|
||||
|
||||
if not secret:
|
||||
@ -222,35 +183,12 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
context["user"] = current_user
|
||||
context["groups"] = groups
|
||||
context["group_path_nodes"] = group_path
|
||||
context["selected_group"] = None
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request, template_name, context, headers=headers
|
||||
)
|
||||
|
||||
@app.get("/secrets/partial/group/{name}")
|
||||
async def get_group_details(
|
||||
request: Request,
|
||||
name: str,
|
||||
admin: Annotated[AdminBackend, Depends(dependencies.get_admin_backend)],
|
||||
):
|
||||
"""Get group details partial."""
|
||||
group = await admin.get_secret_group(name)
|
||||
if not group:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND, detail="Group not found"
|
||||
)
|
||||
|
||||
clients = await admin.get_clients()
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/partials/group_detail.html.j2",
|
||||
{
|
||||
"name": group.group_name,
|
||||
"description": group.description,
|
||||
"clients": clients,
|
||||
},
|
||||
)
|
||||
|
||||
@app.delete("/secrets/group/{name}")
|
||||
async def delete_secret_group(
|
||||
request: Request,
|
||||
@ -266,11 +204,15 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
|
||||
await admin.delete_secret_group(name)
|
||||
|
||||
headers = {"Hx-Refresh": "true"}
|
||||
new_path = "/secrets/group/"
|
||||
if group.parent_group:
|
||||
new_path = os.path.join(new_path, group.parent_group.path)
|
||||
headers = {"Hx-Redirect": new_path}
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/partials/default_detail.html.j2",
|
||||
"secrets/partials/redirect.html.j2",
|
||||
{"destination": new_path},
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
@ -288,6 +230,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
description=group.description,
|
||||
parent_group=group.parent_group,
|
||||
)
|
||||
|
||||
headers = {"Hx-Refresh": "true"}
|
||||
|
||||
return templates.TemplateResponse(
|
||||
@ -360,8 +303,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
request,
|
||||
"secrets/partials/group_detail.html.j2",
|
||||
{
|
||||
"name": group.group_name,
|
||||
"description": group.description,
|
||||
"group": group,
|
||||
"clients": clients,
|
||||
},
|
||||
headers=headers,
|
||||
@ -449,7 +391,6 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
secret: Annotated[CreateSecret, Form()],
|
||||
):
|
||||
"""Create secret in group."""
|
||||
LOG.info("secret: %s", secret.model_dump_json(indent=2))
|
||||
if secret.value:
|
||||
value = secret.value
|
||||
else:
|
||||
@ -457,24 +398,14 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
|
||||
await admin.add_secret(secret.name, value, secret.clients, group=name)
|
||||
|
||||
headers = {"Hx-Refresh": "true"}
|
||||
new_secret = await admin.get_secret(secret.name)
|
||||
groups = await admin.get_secret_groups()
|
||||
events = await admin.get_audit_log_detailed(limit=10, secret_name=secret.name)
|
||||
new_path = f"/secrets/secret/{secret.name}"
|
||||
|
||||
if not new_secret:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND, detail="Secret not found"
|
||||
)
|
||||
headers = {"Hx-Redirect": new_path}
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/partials/tree_detail.html.j2",
|
||||
{
|
||||
"secret": new_secret,
|
||||
"groups": groups,
|
||||
"events": events,
|
||||
},
|
||||
"secrets/partials/redirect.html.j2",
|
||||
{"destination": new_path},
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
@ -493,23 +424,15 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
|
||||
await admin.add_secret(secret.name, value, secret.clients, group=None)
|
||||
|
||||
headers = {"Hx-Refresh": "true"}
|
||||
new_secret = await admin.get_secret(secret.name)
|
||||
groups = await admin.get_secret_groups()
|
||||
events = await admin.get_audit_log_detailed(limit=10, secret_name=secret.name)
|
||||
new_path = f"/secrets/secret/{secret.name}"
|
||||
|
||||
if not new_secret:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_404_NOT_FOUND, detail="Secret not found"
|
||||
)
|
||||
headers = {"Hx-Redirect": new_path}
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/partials/tree_detail.html.j2",
|
||||
"secrets/partials/redirect.html.j2",
|
||||
{
|
||||
"secret": new_secret,
|
||||
"groups": groups,
|
||||
"events": events,
|
||||
"destination": new_path,
|
||||
},
|
||||
headers=headers,
|
||||
)
|
||||
@ -598,12 +521,23 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
admin: Annotated[AdminBackend, Depends(dependencies.get_admin_backend)],
|
||||
):
|
||||
"""Delete a secret."""
|
||||
secret = await admin.get_secret(name)
|
||||
if not secret:
|
||||
raise HTTPException(status_code=404, detail="Secret not found")
|
||||
new_path = "/secrets/group/"
|
||||
if secret.group:
|
||||
secret_group = await admin.get_secret_group(secret.group)
|
||||
if secret_group:
|
||||
new_path = os.path.join("/secrets/group", secret_group.path)
|
||||
|
||||
await admin.delete_secret(name)
|
||||
headers = {"Hx-Refresh": "true"}
|
||||
headers = {"Hx-Redirect": new_path}
|
||||
# headers["HX-Push-Url"] = request.url.path
|
||||
|
||||
return templates.TemplateResponse(
|
||||
request,
|
||||
"secrets/partials/default_detail.html.j2",
|
||||
"secrets/partials/redirect.html.j2",
|
||||
{"destination": new_path},
|
||||
headers=headers,
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user