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.

Allow opt-in open registration

f920a9f12c4ff12e4f47497a084f0201d8914181 · Keenan Nemetz · 16d 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.

forge/config/config.go +9

@@ -50,6 +50,10 @@ type Config struct {
50 50 // PagesCacheBytes caps the in-memory blob cache. The cache is required, not an
51 51 // optimisation: cold git reads are ~1.2 ms p50, warm ones 0.075 ms.
52 52 PagesCacheBytes int64 `toml:"pages_cache_bytes"`
53 // OpenRegistration lets anyone create an account by registering a passkey.
54 // Off by default: an instance with no public contribution policy should not
55 // grow accounts just because it is reachable.
56 OpenRegistration bool `toml:"open_registration"`
53 57 // PublicURL is where this instance is reachable from a browser:
54 58 // "https://forge.example.com" behind a proxy, normally. It is optional for a
55 59 // read-only instance; browser login is enabled only when it is an https URL,
@@ -184,6 +188,11 @@ ssh_addr = "127.0.0.1:2222"
184 188 # print the page for something it just created. Trailing slash is ignored.
185 189 # public_url = "https://forge.example.com"
186 190
191 # Let anyone create an account by registering a passkey. New accounts have no
192 # repository-specific access; each repository's default role still applies.
193 # Off unless you are running an instance that wants public contributions.
194 # open_registration = true
195
187 196 # Reject individual blobs above this size (pre-receive). Point people at
188 197 # git-lfs instead.
189 198 max_blob_bytes = 104857600