Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/vole.git

Write over SSH with a registered key:

git clone ssh://git@rodent.software:2222/vole.git

A free and open-source forge that lives in your Git repo.

Refresh the web surface with Everforest, readable type, and clearer navigation

796ac8c0ce77461174cf520d5fad4dea37744662 · Keenan Nemetz · 12d ago · parent ac00929f

server/web/templates/account.html +77−41

@@ -7,49 +7,81 @@
7 7 </div>
8 8 </div>
9 9
10 <h2>Appearance</h2>
11 <div class="card form-card">
12 <label>Theme
13 <select data-theme-select aria-label="Theme">
14 <option value="system" selected>System</option>
15 <option value="everforest-dark-hard">Everforest Dark · Hard</option>
16 <option value="everforest-dark-medium">Everforest Dark · Medium</option>
17 <option value="everforest-dark-soft">Everforest Dark · Soft</option>
18 <option value="everforest-light-hard">Everforest Light · Hard</option>
19 <option value="everforest-light-medium">Everforest Light · Medium</option>
20 <option value="everforest-light-soft">Everforest Light · Soft</option>
21 </select>
22 </label>
23 <label>Text size
24 <select data-font-scale-select aria-label="Text size">
25 <option value="small">Small · 90%</option>
26 <option value="medium" selected>Medium · 100%</option>
27 <option value="large">Large · 110%</option>
28 </select>
29 </label>
30 <p class="muted">Both are stored in this browser, not on your account. System follows your operating system and uses the medium contrast. Text size scales labels, prose, and code.</p>
31 </div>
32
10 33 <h2>SSH keys</h2>
11 34 {{if .Account.Keys}}
12 <table>
13 <tr><th>Fingerprint</th><th>Type</th><th>Comment</th><th></th></tr>
14 {{range .Account.Keys}}
15 <tr>
16 <td class="sha">{{.Fingerprint}}</td>
17 <td class="muted">{{.Type}}</td>
18 <td class="muted">{{.Comment}}</td>
19 <td>
20 <form method="post" action="/account/keys/remove">
21 <input type="hidden" name="csrf" value="{{$.CSRF}}">
22 <input type="hidden" name="fingerprint" value="{{.Fingerprint}}">
23 <button class="link" type="submit">remove</button>
24 </form>
25 </td>
26 </tr>
27 {{end}}
28 </table>
35 <div class="panel">
36 <table>
37 <thead><tr><th>Fingerprint</th><th>Type</th><th>Comment</th><th></th></tr></thead>
38 <tbody>
39 {{range .Account.Keys}}
40 <tr>
41 <td class="sha">{{.Fingerprint}}</td>
42 <td class="muted">{{.Type}}</td>
43 <td class="muted">{{.Comment}}</td>
44 <td>
45 <form method="post" action="/account/keys/remove">
46 <input type="hidden" name="csrf" value="{{$.CSRF}}">
47 <input type="hidden" name="fingerprint" value="{{.Fingerprint}}">
48 <button class="link" type="submit">remove</button>
49 </form>
50 </td>
51 </tr>
52 {{end}}
53 </tbody>
54 </table>
55 </div>
29 56 {{else}}
30 57 <p class="muted">No SSH keys yet.</p>
31 58 {{end}}
32 59 <form method="post" action="/account/keys" class="form-block">
33 60 <input type="hidden" name="csrf" value="{{.CSRF}}">
34 <div class="card form-card">
35 <label>Public key <textarea name="key" rows="3" placeholder="ssh-ed25519 AAAA... you@example.com" required></textarea></label>
61 <label for="public-key">Add public key</label>
62 <div class="card form-card key-card">
63 <textarea id="public-key" name="key" rows="3" placeholder="ssh-ed25519 AAAA... you@example.com" required></textarea>
36 64 </div>
37 65 <div class="form-actions"><button type="submit">{{icon "plus"}}Add SSH key</button></div>
38 66 </form>
39 67
40 68 <h2>Passkeys</h2>
41 69 {{if .Credentials}}
42 <table>
43 <tr><th>Credential</th><th>Label</th><th>Created</th><th>Last used</th></tr>
44 {{range .Credentials}}
45 <tr>
46 <td class="sha">{{credid .ID}}</td>
47 <td>{{if .Label}}{{.Label}}{{else}}passkey{{end}}</td>
48 <td class="muted">{{since .Created.Unix}}</td>
49 <td class="muted">{{if .LastUsed.IsZero}}never{{else}}{{since .LastUsed.Unix}}{{end}}</td>
50 </tr>
51 {{end}}
52 </table>
70 <div class="panel">
71 <table>
72 <thead><tr><th>Credential</th><th>Label</th><th>Created</th><th>Last used</th></tr></thead>
73 <tbody>
74 {{range .Credentials}}
75 <tr>
76 <td class="sha">{{credid .ID}}</td>
77 <td>{{if .Label}}{{.Label}}{{else}}passkey{{end}}</td>
78 <td class="muted">{{since .Created.Unix}}</td>
79 <td class="muted">{{if .LastUsed.IsZero}}never{{else}}{{since .LastUsed.Unix}}{{end}}</td>
80 </tr>
81 {{end}}
82 </tbody>
83 </table>
84 </div>
53 85 {{else}}
54 86 <p class="muted">No passkeys yet.</p>
55 87 {{end}}
@@ -69,17 +101,21 @@
69 101
70 102 <h2>Sessions</h2>
71 103 {{if .Sessions}}
72 <table>
73 <tr><th>Created</th><th>Last seen</th><th>Expires</th><th>Client</th></tr>
74 {{range .Sessions}}
75 <tr>
76 <td class="muted">{{since .Created.Unix}}</td>
77 <td class="muted">{{since .LastSeen.Unix}}</td>
78 <td class="muted">{{.Expires.Format "2006-01-02 15:04"}}</td>
79 <td class="muted">{{.UserAgent}}</td>
80 </tr>
81 {{end}}
82 </table>
104 <div class="panel">
105 <table>
106 <thead><tr><th>Created</th><th>Last seen</th><th>Expires</th><th>Client</th></tr></thead>
107 <tbody>
108 {{range .Sessions}}
109 <tr>
110 <td class="muted">{{since .Created.Unix}}</td>
111 <td class="muted">{{since .LastSeen.Unix}}</td>
112 <td class="muted">{{.Expires.Format "2006-01-02 15:04"}}</td>
113 <td class="muted">{{.UserAgent}}</td>
114 </tr>
115 {{end}}
116 </tbody>
117 </table>
118 </div>
83 119 {{else}}
84 120 <p class="muted">No sessions.</p>
85 121 {{end}}