{# The keys programs authenticate with, and what this installation demands of a caller. Keys only. People — who is a member, in what role, whether they are enabled — are the people page's (`users.html`), because a key and a membership are minted, owned and revoked differently, and one page carrying both would blur which control does what. #}{% extends layout %} {% import "macros.html" as m %} {% block content %}

This request

Authentication mode
{{ auth_mode }}
Authenticated
{{ 'yes' if authenticated else 'no' }}
Role
{{ role }}
Credential
{{ credential or '—' }}
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 %}
NamePrefixRoleOwnerAllowed IPsRate limitCreatedExpiresState
{{ key.name }} {{ key.prefix }} {{ key.role }} {{ key.user_id or 'installation' }} {{ key.allowed_ips | join(', ') if key.allowed_ips else 'anywhere' }} {{ key.rate_limit if key.rate_limit is not none else 'default' }} {{ 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 %}

People sign in at the sign-in page and are administered on the people page.

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

{{ panels.providers.data.detail }}

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