/admin/secrets tager imod et token eller kodeord og krypterer det med det samme med PVE-værtens offentlige X25519-nøgle (sealed box: HKDF-SHA256 + ChaCha20-Poly1305, navnet som associated data). Kun ciphertext gemmes; portalen kan ikke læse det igen. På værten henter secret-drop get <navn> det én gang og sletter kopien her. Claude-Session: https://claude.ai/code/session_012LCTmU2ewo8tnM1dByYAoG
46 lines
2.6 KiB
HTML
46 lines
2.6 KiB
HTML
{% extends "base.html" %}
|
|
{% block title %}Admin — hemmeligheder{% endblock %}
|
|
{% block body %}
|
|
<p><a href="/admin" class="wt-muted">← Admin</a></p>
|
|
<h1>Hemmeligheder til Claude</h1>
|
|
<p class="wt-lead">Indsæt et token, en nøgle eller et kodeord her i stedet for i chatten. Det krypteres med det samme med serverens offentlige nøgle, og kun den krypterede udgave gemmes. Portalen kan ikke selv læse det igen. Bed derefter Claude om at hente det under navnet du giver det. Det kan kun hentes én gang.</p>
|
|
{% if saved %}<div class="wt-flash">{{ saved }}</div>{% endif %}
|
|
{% if gemt %}
|
|
<section class="wt-card" style="margin:1rem 0;padding:1rem 1.2rem;border:2px solid var(--color-accent, #38bdf8)">
|
|
<strong>Gemt krypteret som <code>{{ gemt }}</code>.</strong>
|
|
Skriv fx til Claude: <em>“hent hemmeligheden {{ gemt }}”</em>. Værdien vises ikke igen her.
|
|
</section>
|
|
{% endif %}
|
|
|
|
<form method="post" action="/admin/secrets" autocomplete="off" style="margin:1.2rem 0 2rem;max-width:40rem">
|
|
<label style="display:block;margin:.6rem 0">Navn <span class="wt-muted">(små bogstaver, fx github-token)</span>
|
|
<input class="wt-input" name="navn" required pattern="[a-z0-9][a-z0-9._\-]{0,63}" maxlength="64" autocomplete="off" spellcheck="false" placeholder="github-token"></label>
|
|
<label style="display:block;margin:.6rem 0">Værdi
|
|
<textarea class="wt-input" name="vaerdi" required rows="4" autocomplete="off" spellcheck="false" autocapitalize="off"
|
|
style="font-family:ui-monospace,monospace;-webkit-text-security:disc" placeholder="indsæt her"></textarea></label>
|
|
<label style="display:block;margin:.6rem 0">Note <span class="wt-muted">(valgfri, ikke hemmelig: hvad er det til?)</span>
|
|
<input class="wt-input" name="note" maxlength="200" autocomplete="off" placeholder="fx fine-grained token til homebrew-tap"></label>
|
|
<button class="wt-btn wt-btn--primary" type="submit">Gem krypteret</button>
|
|
</form>
|
|
|
|
<h2 style="font-size:1.1rem">Venter på at blive hentet</h2>
|
|
{% if ventende %}
|
|
<table class="wt-table">
|
|
<thead><tr><th>Navn</th><th>Note</th><th>Gemt</th><th>Af</th><th></th></tr></thead>
|
|
<tbody>
|
|
{% for v in ventende %}
|
|
<tr>
|
|
<td><code>{{ v.name }}</code></td>
|
|
<td>{{ v.note }}</td>
|
|
<td>{{ v.alder }}</td>
|
|
<td>{{ v.by }}</td>
|
|
<td><form method="post" action="/admin/secrets/{{ v.name }}/slet" style="margin:0"><button class="wt-btn" type="submit">Slet</button></form></td>
|
|
</tr>
|
|
{% endfor %}
|
|
</tbody>
|
|
</table>
|
|
{% else %}
|
|
<p class="wt-muted">Ingen. Når Claude har hentet en hemmelighed, forsvinder den herfra.</p>
|
|
{% endif %}
|
|
{% endblock %}
|