repos
/ orchard main

orchard

mirror

Every site I host, in one repo, along with the Cloudflare Tunnel and Caddy that front them. It's all Go, Vite, and SQLite, and it runs on a desktop at home with nothing listening on an inbound port.

blogbuncaddycloudflare-tunneldockergogolanghomelabhtml-templatemonorepoself-hostedseosqlitestatic-sitetypstuptime-monitoringviteweb-analytics

1.9 KB · 49 lines · HTML Raw History
 1{{ define "main" }}
 2<div class="container-fluid px-4 py-4">
 3  <div class="page-head">
 4    <div>
 5      <div class="auth-eyebrow">security</div>
 6      <h1 class="page-title">{{ .Title }}</h1>
 7    </div>
 8  </div>
 9
10  {{ template "alerts" . }}
11
12  <div class="row g-3">
13    <div class="col-12 col-lg-6">
14      <div class="panel">
15        <div class="panel-title">recovery codes</div>
16        <div class="stat {{ if lt .Remaining 3 }}is-low{{ end }}">{{ .Remaining }}<span class="text-muted" style="font-size:1rem; font-weight:400;"> of 10 left</span></div>
17        <div class="pips" aria-hidden="true">
18          {{ range pips .Remaining }}<span class="pip {{ if . }}is-lit{{ end }}"></span>{{ end }}
19        </div>
20        <p class="auth-hint mt-0">Each works once. A new set invalidates every old code, and is shown
21          once and never again.</p>
22        {{ if .InSudo }}
23        <form method="POST" action="/security/recovery">
24          <button type="submit" class="btn btn-primary btn-sm">Generate a new set</button>
25        </form>
26        {{ else }}
27        <a href="/login?next=/security" class="btn btn-outline-light btn-sm">Sign in again to replace them</a>
28        {{ end }}
29      </div>
30    </div>
31
32    <div class="col-12 col-lg-6">
33      <div class="panel">
34        <div class="panel-title">the phone</div>
35        <dl class="field-list">
36          <div><dt>server</dt><dd>{{ .NtfyHost }}</dd></div>
37          <div><dt>account</dt><dd>{{ .NtfyUser }}</dd></div>
38          <div><dt>topic</dt><dd>{{ .NtfyTopic }}</dd></div>
39        </dl>
40        <p class="auth-hint">The ntfy password is not here and cannot be. ntfy stores it hashed and
41          will not hand one back, and the two ways around that are keeping a second reversible copy
42          on an internet facing box or giving this container the Docker socket. Change it with
43          <code>make ntfy-passwd</code> on the machine.</p>
44      </div>
45    </div>
46  </div>
47</div>
48{{ end }}