Support unmanaged secrets
This commit is contained in:
@ -3,6 +3,8 @@
|
||||
{% include '/secrets/partials/client_list_inner.html.j2' %}
|
||||
</ul>
|
||||
</div>
|
||||
{% if secret.secret %}
|
||||
<div class="w-full my-2" id="secretclientaction">
|
||||
{% include '/secrets/partials/client_assign_button.html.j2' %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
@ -1,7 +1,9 @@
|
||||
<div class="w-full">
|
||||
<div class="mb-4">
|
||||
<h3 class="text-xl font-semibold dark:text-white">Group {{name}}</h3>
|
||||
<span class="text-sm text-gray-500 dark:text-gray-400">{{ description }}</span>
|
||||
{% if description %}
|
||||
<span class="text-sm text-gray-500 dark:text-gray-400">{{ description }}</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<sl-details summary="Create secret">
|
||||
|
||||
@ -31,6 +31,12 @@
|
||||
|
||||
|
||||
<h3 class="mb-4 text-xl font-semibold dark:text-white">{{secret.name}}</h3>
|
||||
{% if secret.description %}
|
||||
<span class="text-sm text-gray-500 dark:text-gray-400">{{ secret.description }}</span>
|
||||
{% endif %}
|
||||
{% if not secret.secret %}
|
||||
<p class="text-sm text-gray-500 dark:text-gray-400 italic">This secret was created outside of sshecret-admin. It cannot be decrypted, and therefore fewer options are available here.</p>
|
||||
{% endif %}
|
||||
<div class="htmx-indicator secret-spinner">
|
||||
<div role="status">
|
||||
<svg aria-hidden="true" class="inline w-6 h-6 text-gray-200 animate-spin dark:text-gray-600 fill-blue-600" viewBox="0 0 100 101" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
@ -46,6 +52,7 @@
|
||||
{% include '/secrets/partials/client_secret_details.html.j2' %}
|
||||
</div>
|
||||
</sl-details>
|
||||
{% if secret.secret %}
|
||||
<sl-details summary="Read/Update Secret">
|
||||
<div id="secretvalue">
|
||||
<div class="mb-6">
|
||||
@ -103,6 +110,7 @@
|
||||
</form>
|
||||
</sl-details>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
<sl-details summary="Events">
|
||||
<table class="min-w-full divide-y divide-gray-200 dark:divide-gray-600" id="last-audit-events">
|
||||
<thead class="bg-gray-50 dark:bg-gray-700">
|
||||
|
||||
@ -64,6 +64,7 @@ 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",
|
||||
@ -73,46 +74,46 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
},
|
||||
)
|
||||
|
||||
@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/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)
|
||||
# @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,
|
||||
},
|
||||
)
|
||||
# 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(
|
||||
@ -573,7 +574,7 @@ def create_router(dependencies: FrontendDependencies) -> APIRouter:
|
||||
admin: Annotated[AdminBackend, Depends(dependencies.get_admin_backend)],
|
||||
):
|
||||
"""Add a secret to a client."""
|
||||
await admin.create_client_secret(client, name)
|
||||
await admin.create_client_secret(("id", client), name)
|
||||
secret = await admin.get_secret(name)
|
||||
if not secret:
|
||||
raise HTTPException(
|
||||
|
||||
Reference in New Issue
Block a user