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.
Allow opt-in open registration
f920a9f12c4ff12e4f47497a084f0201d8914181 · Keenan Nemetz · 15d ago · parent 6c84d387
Allow opt-in open registration Add open_registration, off by default and effective only with an HTTPS public_url. /register creates an account and its first passkey without an administrator; the account row is written only after the WebAuthn ceremony succeeds, so an abandoned registration reserves no name. New accounts start with no repository-specific ACL entries. Add self-service SSH key management on the Account page so a registered contributor can add the key needed to push to their contributor namespace. Cover registration enablement, name validation, deferred account creation, and self-service key add/remove in tests, and document the policy.
docs/configuration.md +24
| @@ -44,6 +44,7 @@ vole admin user list | |||
| 44 | 44 | | `http_addr` | `"127.0.0.1:8080"` | Address for the web interface and anonymous Git clone | | |
| 45 | 45 | | `ssh_addr` | `"127.0.0.1:2222"` | Address for SSH, the authenticated Git transport | | |
| 46 | 46 | | `public_url` | empty | Canonical browser address; must be HTTPS to enable passkey login | | |
| 47 | | `open_registration` | `false` | Let anyone create an account by registering a passkey; requires `public_url` to be HTTPS | | ||
| 47 | 48 | | `max_blob_bytes` | `104857600` (100 MiB) | Largest single file accepted in a push | | |
| 48 | 49 | | `receive_max_bytes` | `1073741824` (1 GiB) | Largest whole push Vole will accept | | |
| 49 | 50 | | `lfs_object_max_bytes` | `2147483648` (2 GiB) | Largest single LFS object | | |
| @@ -73,6 +74,29 @@ created. It is also the WebAuthn relying-party origin: browser login is enabled | |||
| 73 | 74 | only when `public_url` is an `https://` URL. Vole does not change how it routes | |
| 74 | 75 | requests based on this setting. | |
| 75 | 76 | ||
| 77 | ## Open registration | ||
| 78 | |||
| 79 | By default only an administrator can create an account. Set | ||
| 80 | `open_registration = true` to let anyone create one by registering a passkey: | ||
| 81 | |||
| 82 | ```toml | ||
| 83 | public_url = "https://forge.example.com" | ||
| 84 | open_registration = true | ||
| 85 | ``` | ||
| 86 | |||
| 87 | The setting has no effect unless `public_url` is HTTPS. New accounts start with | ||
| 88 | no repository-specific access: each repository's default role still applies. An | ||
| 89 | open-source project that wants outside contributions can publish the repository | ||
| 90 | and set its default role to `contributor`: | ||
| 91 | |||
| 92 | ```sh | ||
| 93 | vole admin acl default demo contributor | ||
| 94 | ``` | ||
| 95 | |||
| 96 | A registered account can add its own SSH key from **Account**, so it can push to | ||
| 97 | the contributor namespace without an administrator. There is no email | ||
| 98 | verification; registration is a deliberate policy choice, not a safe default. | ||
| 99 | |||
| 76 | 100 | ## Running behind a proxy | |
| 77 | 101 | ||
| 78 | 102 | Vole serves plain HTTP. If the instance is public, terminate TLS in a proxy in | |