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.
Unify terminology across the web UI and docs
ab326d3ac1fd947a9df45f31f6dc10ab38627882 · Keenan Nemetz · 14d ago · parent 5b814e99
Unify terminology across the web UI and docs Use account, repository, change request, enrollment link, instance admin, and sign in/out consistently. Rename the access guide to accounts-and-access.md, update its links, and record the canonical terms and retained command/URL spellings in the documentation index.
server/web/auth_handlers.go +6−6
| @@ -26,7 +26,7 @@ func (w *Web) LoginPage(rw http.ResponseWriter, r *http.Request) { | |||
| 26 | 26 | Registration bool | |
| 27 | 27 | Reason string | |
| 28 | 28 | }{ | |
| 29 | Page: w.page(r, "Log in"), | ||
| 29 | Page: w.page(r, "Sign in"), | ||
| 30 | 30 | Next: next, | |
| 31 | 31 | Enabled: w.enabled(), | |
| 32 | 32 | Registration: w.registrationEnabled(), | |
| @@ -71,7 +71,7 @@ func (w *Web) InvitePage(rw http.ResponseWriter, r *http.Request) { | |||
| 71 | 71 | ||
| 72 | 72 | func authReason(a *Auth) string { | |
| 73 | 73 | if a == nil { | |
| 74 | return "browser login is not configured" | ||
| 74 | return "browser sign-in is not configured" | ||
| 75 | 75 | } | |
| 76 | 76 | return a.Disabled | |
| 77 | 77 | } | |
| @@ -134,17 +134,17 @@ func (w *Web) LoginFinish(rw http.ResponseWriter, r *http.Request) { | |||
| 134 | 134 | } | |
| 135 | 135 | acct, err := w.Ident.Find(c.Name) | |
| 136 | 136 | if err != nil || !acct.Active() { | |
| 137 | writeJSONError(rw, http.StatusUnauthorized, "login failed") | ||
| 137 | writeJSONError(rw, http.StatusUnauthorized, "sign-in failed") | ||
| 138 | 138 | return | |
| 139 | 139 | } | |
| 140 | 140 | user, err := w.waUser(acct) | |
| 141 | 141 | if err != nil { | |
| 142 | writeJSONError(rw, http.StatusUnauthorized, "login failed") | ||
| 142 | writeJSONError(rw, http.StatusUnauthorized, "sign-in failed") | ||
| 143 | 143 | return | |
| 144 | 144 | } | |
| 145 | 145 | cred, err := w.Auth.WA.FinishLogin(user, c.Data, r) | |
| 146 | 146 | if err != nil { | |
| 147 | writeJSONError(rw, http.StatusUnauthorized, "login failed") | ||
| 147 | writeJSONError(rw, http.StatusUnauthorized, "sign-in failed") | ||
| 148 | 148 | return | |
| 149 | 149 | } | |
| 150 | 150 | if err := w.Ident.UpdateCredential(cred.ID, cred.Authenticator.SignCount, time.Now().UTC()); err != nil { | |
| @@ -360,7 +360,7 @@ func (w *Web) Logout(rw http.ResponseWriter, r *http.Request) { | |||
| 360 | 360 | } | |
| 361 | 361 | w.clearCookie(rw, sessionCookieName) | |
| 362 | 362 | if w.devAccount != nil { | |
| 363 | // Log out must stick even though loopback would otherwise sign us back | ||
| 363 | // Signing out must stick even though loopback would otherwise sign us back | ||
| 364 | 364 | // in. /dev/login clears this opt-out. | |
| 365 | 365 | w.clearCookieFor(rw, devSessionCookieName, false) | |
| 366 | 366 | http.SetCookie(rw, &http.Cookie{ | |