Add an Account page for sign-in methods and signed-in devices
/web/account, offered to everyone, lists every browser and client signed in as you, with when each was last used, and signs any of them out, or all but the current one. It sets up, replaces and removes the second factor, and holds the password form, moved from the vault page. Administrators can sign a user out everywhere from the People page. The API gains GET and DELETE /api/v1/auth/sessions and DELETE /api/v1/auth/totp. Sessions are named by a digest of their token, never the token, and record when they were last used. Replacing or removing an active second factor now needs the password and a current code. Server version 0.10.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
318bd68908
commit
f8f634fbf7
@@ -74,6 +74,7 @@ td button{width:auto;margin:0 .25rem .25rem 0;padding:.3rem .5rem;font-size:.8re
|
||||
background:transparent;color:var(--accent);border:1px solid var(--line)}
|
||||
td button.danger,a.danger{color:#b02a37}
|
||||
button.destroy{background:#b02a37}
|
||||
button.secondary{margin-top:.6rem;background:transparent;color:var(--accent);border:1px solid var(--line)}
|
||||
@media(prefers-color-scheme:dark){td button.danger,a.danger{color:#f2b8c0}
|
||||
button.destroy{background:#a3313c}}
|
||||
.inline{display:flex;gap:.6rem;align-items:flex-end;flex-wrap:wrap;margin:0}
|
||||
@@ -186,23 +187,8 @@ by whoever controls the server. Any other setting keeps the key off the server.<
|
||||
vault. Ask an administrator to add you to one.</p>
|
||||
{{end}}
|
||||
|
||||
<details>
|
||||
<summary>Change your account password</summary>
|
||||
<p class="sub">This is the password you sign in with, not any vault's password.
|
||||
Changing it signs out your other sessions.</p>
|
||||
<form method="post" action="/web/password">
|
||||
<input type="hidden" name="csrf" value="{{.CSRF}}">
|
||||
<label for="current_password">Current password</label>
|
||||
<input id="current_password" name="current_password" type="password" autocomplete="current-password" required>
|
||||
<label for="cp_totp">One-time code <small>(if enabled)</small></label>
|
||||
<input id="cp_totp" name="totp" inputmode="numeric" autocomplete="one-time-code">
|
||||
<label for="new_password">New password</label>
|
||||
<input id="new_password" name="new_password" type="password" autocomplete="new-password" minlength="10" required>
|
||||
<label for="new_password2">Repeat new password</label>
|
||||
<input id="new_password2" name="new_password2" type="password" autocomplete="new-password" minlength="10" required>
|
||||
<button type="submit">Change password</button>
|
||||
</form>
|
||||
</details>
|
||||
<p class="note">Your password, two-factor authentication and signed-in devices
|
||||
are on the <a href="/web/account">Account</a> page.</p>
|
||||
{{end}}`))
|
||||
|
||||
var deleteVaultTmpl = template.Must(template.Must(pages.Clone()).Parse(`
|
||||
|
||||
Reference in New Issue
Block a user