diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-02-05 15:35:01 -1000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-02-05 15:35:01 -1000 |
| commit | 0a1001eb0bd2d1f7c0624ae1ef8ae7ccdb3447d4 (patch) | |
| tree | caf04d4f505bb12751579e2f0f1730ead7a9e2e2 /web/templates/passkeys_list.html | |
| parent | 1eab4d59454fa5999675d51b99e77ac6580aba95 (diff) | |
Add passkey (WebAuthn) authentication support
Enable passwordless login via passkeys as an alternative to password auth.
Users register passkeys from Settings; the login page offers both options.
WebAuthn is optional — only active when WEBAUTHN_RP_ID and WEBAUTHN_ORIGIN
env vars are set.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'web/templates/passkeys_list.html')
| -rw-r--r-- | web/templates/passkeys_list.html | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/web/templates/passkeys_list.html b/web/templates/passkeys_list.html new file mode 100644 index 0000000..4e05461 --- /dev/null +++ b/web/templates/passkeys_list.html @@ -0,0 +1,24 @@ +{{define "passkeys_list.html"}} +<div class="items-list"> + {{if .Passkeys}} + {{range .Passkeys}} + <div class="item-row" id="passkey-{{.ID}}"> + <div class="item-name"> + <strong>{{if .Name}}{{.Name}}{{else}}Passkey{{end}}</strong> + <div class="item-desc">Added {{.CreatedAt.Format "Jan 2, 2006"}}</div> + </div> + <button class="btn btn-danger btn-sm" + hx-delete="/passkeys/{{.ID}}" + hx-target="#passkey-{{.ID}}" + hx-swap="outerHTML" + hx-headers='{"X-CSRF-Token": "{{$.CSRFToken}}"}' + hx-confirm="Delete this passkey?"> + Delete + </button> + </div> + {{end}} + {{else}} + <div class="empty-state">No passkeys registered. Register one to enable passwordless login.</div> + {{end}} +</div> +{{end}} |
