vole
Clone
Read only, no credentials:
https://rodent.software/git/vole.git
Write over SSH with a registered key:
git clone ssh://git@0.0.0.0:2222/vole.git
A free and open-source forge that lives in your Git repo.
|
f09ef39e
Keenan Nemetz
15d ago
|
1 | {{define "login"}} |
| 2 | {{template "header" .}} | |
| 3 | {{if not .Enabled}} | |
| 4 | <div class="auth"> | |
| 5 | <div class="card"> | |
|
ab326d3a
Keenan Nemetz
14d ago
|
6 | <h1>Sign in</h1> |
|
f09ef39e
Keenan Nemetz
15d ago
|
7 | <p class="muted">{{.Reason}}</p> |
| 8 | </div> | |
| 9 | </div> | |
| 10 | {{else}} | |
| 11 | <form class="auth" data-auth="login" data-next="{{.Next}}"> | |
| 12 | <div class="card form-card"> | |
|
ab326d3a
Keenan Nemetz
14d ago
|
13 | <h1>Sign in</h1> |
|
f09ef39e
Keenan Nemetz
15d ago
|
14 | <label>Account name |
| 15 | <input type="text" name="username" autocomplete="username webauthn" required autofocus> | |
| 16 | </label> | |
|
ad79b7ab
Keenan Nemetz
2d ago
|
17 | <p class="muted">Your browser can offer a saved passkey in this field; otherwise type your account name and continue.</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
18 | <p class="error" data-auth-error></p> |
| 19 | {{if .Registration}} | |
|
ed03b3d1
Keenan Nemetz
2h ago
|
20 | <p class="muted">No account yet? <a href="/-/register">Create one</a>.</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
21 | {{else}} |
|
ab326d3a
Keenan Nemetz
14d ago
|
22 | <p class="muted">No account yet? Ask an instance admin for a one-time enrollment link.</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
23 | {{end}} |
| 24 | </div> | |
| 25 | <div class="form-actions"><button type="submit">Use a passkey</button></div> | |
| 26 | </form> | |
| 27 | {{end}} | |
| 28 | {{template "footer" .}} | |
| 29 | {{end}} | |
| 30 | ||
| 31 | {{define "register"}} | |
| 32 | {{template "header" .}} | |
| 33 | <form class="auth" data-auth="register"> | |
| 34 | <div class="card form-card"> | |
| 35 | <h1>Create an account</h1> | |
| 36 | <p class="muted">Pick a name and register a passkey. You can add an SSH key after signing in.</p> | |
| 37 | <label>Account name | |
| 38 | <input type="text" name="username" pattern="[a-z0-9][a-z0-9_-]{1,31}" maxlength="32" autocomplete="username webauthn" required autofocus> | |
| 39 | </label> | |
| 40 | <p class="error" data-auth-error></p> | |
| 41 | <p class="muted">Names are 2–32 characters: lowercase letters, digits, <code>-</code> and <code>_</code>. | |
| 42 | The account name is permanent — it is the folder your branches live under and cannot be | |
|
62576fa8
Keenan Nemetz
14d ago
|
43 | changed later.</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
44 | </div> |
| 45 | <div class="form-actions"><button type="submit">Create account and passkey</button></div> | |
| 46 | </form> | |
| 47 | {{template "footer" .}} | |
| 48 | {{end}} | |
| 49 | ||
| 50 | {{define "invite"}} | |
| 51 | {{template "header" .}} | |
|
edf9db6e
Keenan Nemetz
12d ago
|
52 | {{if .Enabled}} |
| 53 | <form class="auth" data-auth="invite"> | |
|
f09ef39e
Keenan Nemetz
15d ago
|
54 | <div class="card form-card"> |
|
edf9db6e
Keenan Nemetz
12d ago
|
55 | <h1>Enrollment link</h1> |
| 56 | <p class="muted">Register this device as a passkey for the account this link belongs to. | |
| 57 | The link works once. The account name appears once the passkey is created.</p> | |
|
f09ef39e
Keenan Nemetz
15d ago
|
58 | <p class="error" data-auth-error></p> |
| 59 | </div> | |
| 60 | <div class="form-actions"><button type="submit">Create a passkey</button></div> | |
| 61 | </form> | |
| 62 | {{else}} | |
| 63 | <div class="auth"> | |
| 64 | <div class="card"> | |
| 65 | <h1>Enrollment link</h1> | |
|
edf9db6e
Keenan Nemetz
12d ago
|
66 | <p class="muted">{{.Reason}}</p> |
|
f09ef39e
Keenan Nemetz
15d ago
|
67 | </div> |
| 68 | </div> | |
| 69 | {{end}} | |
| 70 | {{template "footer" .}} | |
| 71 | {{end}} |