{# One person managing their own keys. There is no user administration here and there is not meant to be: manicule is single-user until it is feature complete, and roles, invitations and identity providers belong to team mode. What a single operator needs is the two things below — which keys exist, and what this installation currently demands of a caller. #}{% extends layout %} {% import "macros.html" as m %} {% block content %}

This request

Authentication mode
{{ auth_mode }}
Authenticated
{{ 'yes' if authenticated else 'no' }}
Role
{{ role }}
Key
{{ key_name or '—' }} {% if key_id %}{{ key_id }}{% endif %}
Workspace
{{ workspace }}
{% if auth_mode == 'none' %}

With security.auth.mode = none there is no credential to check and the caller is whoever is sitting at this machine — the same authority the command line has. That is only tolerable because a non-loopback bind with authentication off is refused twice: once before a socket exists, and once before an application does.

{% endif %}

Keys

Records, never secrets. Only a digest is stored, so a lost key is reissued rather than recovered — the one copy of a secret is in the response that minted it.

{% if panels.api_keys.ok %} {% if panels.api_keys.data.keys %} {% for key in panels.api_keys.data.keys %} {% endfor %}
NamePrefixRoleCreatedExpiresState
{{ key.name }} {{ key.prefix }} {{ key.role }} {{ key.created_at }} {{ key.expires_at or 'never' }} {{ 'revoked' if key.revoked else 'live' }} {% if not key.revoked %} {% endif %}
{% else %}{{ m.empty('No keys have been minted.') }}{% endif %} {% else %}{{ m.failed(panels.api_keys) }}{% endif %}

Identity providers

{% if panels.providers.ok %}

Mode {{ panels.providers.data.mode }}, {{ panels.providers.data.count }} configured.

{% if panels.providers.data.providers %} {% endif %} {% if panels.providers.data.detail %}

{{ panels.providers.data.detail }}

{% endif %} {% else %}{{ m.failed(panels.providers) }}{% endif %}

There is no interactive login in this build. An endpoint that existed and refused every attempt would read as a bug rather than as a decision, so it is absent and said out loud instead.

{% endblock %}