<labelclass="small">Deleting removes the account, its tokens, keys and memberships for good; what it wrote stays under its name, which stays retired. Type <strong>{{ a.username }}</strong> to confirm:
<selectid="regmode"name="mode">{% for m in ["open", "invite", "closed"] %}<optionvalue="{{ m }}"{% ifmode.as_str() == *m %} selected{% endif %}>{{ m }}</option>{% endfor %}</select>
{% if !invitations.is_empty() %}<ulclass="plain small">{% for (code, used, at) in invitations %}<li><code>{{ code }}</code> {% if used.is_some() %}<spanclass="mute">used</span>{% else %}<ahref="/register?invite={{ code }}">link</a>{% endif %} · {{ at|ago_i }}</li>{% endfor %}</ul>{% endif %}
55
</section>
56
<sectionclass="panel"id="organisations">
57
<h2>Organisations</h2>
58
{% if orgs.is_empty() %}<pclass="mute small">None yet.</p>{% else %}<ulclass="plain">{% for o in orgs %}<li><imgclass="avatar xs"src="/avatar/{{ o.name }}"alt=""><ahref="/{{ o.name }}">{{ o.name }}</a> · <aclass="small"href="/orgs/{{ o.name }}/settings">settings</a></li>{% endfor %}</ul>{% endif %}
59
</section>
60
<sectionclass="panel"id="signin">
61
<h2>Sign in with</h2>
62
<pclass="small mute">A first sign-in links the account with the same verified email, or makes an account when registration is open. Secrets are kept sealed.</p>
{% if let Some(d) = p.default_base %}<labelfor="base-{{ p.id }}">{{ p.name }} address</label><inputtype="url"id="base-{{ p.id }}"name="base"value="{{ p.base }}"placeholder="{{ d }}"autocomplete="off">
70
<pclass="small mute">Empty for {{ d }}; or a self-managed {{ p.name }}, like https://gitlab.example.org. Register the hub there as an application with the scopes <code>openid profile email</code>.</p>{% endif %}
<formclass="card"method="post"action="/admin/mail/test"><inputtype="hidden"name="_csrf"value="{{ shell.csrf }}"><buttontype="submit"{% if !mail_enabled || my_email.is_empty() %} disabled{% endif %}>SEND A TEST{% if !my_email.is_empty() %} TO {{ my_email }}{% endif %}</button></form>
88
<pclass="small mute">{% if mail_enabled %}Mail is on: verification and reset links go by email.{% else %}Mail is off: verification and reset links are issued by hand.{% endif %} An empty URL turns it off. The password stays on the server and is shown masked.</p>
<pclass="small mute">{% if security_contact.is_empty() %}No contact yet, so there is no <code>security.txt</code>.{% else %}Published at <ahref="/.well-known/security.txt">/.well-known/security.txt</a>.{% endif %} Researchers look there (RFC 9116) for where to report a vulnerability in this hub. Its expiry date renews itself.</p>
{% call ai::panel("/admin", assistants, shell.csrf, "Every repository on the site may ask these, unless an organisation or repository turns one off.") %}
{% for r in audit %}<tr><td><timetitle="{{ r.at_ms|when_i }}">{{ r.at_ms|ago_i }}</time></td><td>{{ r.actor }}</td><td><code>{{ r.action }}</code></td><td>{{ r.target }}</td><tdclass="mute">{{ r.detail }}</td></tr>{% endfor %}
107
</table></div>
108
<pclass="pager small"><ahref="/admin#audit">newest</a>{% if let Some(o) = audit_older %} <aclass="go small"href="/admin?audit_before={{ o }}#audit">older</a>{% endif %}</p>