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/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.

Identify accounts by their registered name

62576fa8157d431dcf2d360f3ebe481de77bda03 · Keenan Nemetz · 14d ago · parent 642e5994

Identify accounts by their registered name

Drop the internal account id and display name. Users, keys, passkeys,
invites, sessions, ACL entries, approvals, locks and CI records now all
use the registered name as the single identity.

The roster migrates in place: old id-keyed tables are rebuilt around the
name, and access-rule/lock references are rewritten through the same
mapping. Display-name editing and whoami --id are removed.

core/lfs/transfer.go +6−8

@@ -41,19 +41,17 @@ type Transfer struct {
41 41 Repo string
42 42 // RepoID is the repository's stable id, which is what a lock is keyed by: a
43 43 // rename must not release a lock.
44 RepoID string
45 AccountID string
46 CanRead bool
47 CanWrite bool
44 RepoID string
45 // User is the account name the SSH key resolved to.
46 User string
47 CanRead bool
48 CanWrite bool
48 49 // IsAdmin lets an account release somebody else's lock. The lock store does not
49 50 // read ACLs; the session tells it, so the decision stays in one place.
50 51 IsAdmin bool
51 52 // Locks is the lock table. Nil means this server offers none, and the `locking`
52 53 // capability is not advertised.
53 54 Locks *LockStore
54 // Names renders an account id as a name for messages. Nil means ids are shown,
55 // which is honest but ugly; the SSH server always supplies one.
56 Names func(accountID string) string
57 55 Log *slog.Logger
58 56 }
59 57
@@ -230,7 +228,7 @@ func (t *Transfer) put(op, oid string, pr *pktReader, pw *pktWriter) error {
230 228 return pw.statusLines(code, nil, []string{msg})
231 229 }
232 230 if t.Log != nil {
233 t.Log.Info("lfs upload", "repo", t.Repo, "oid", oid, "bytes", n, "created", created, "user", t.AccountID)
231 t.Log.Info("lfs upload", "repo", t.Repo, "oid", oid, "bytes", n, "created", created, "user", t.User)
234 232 }
235 233 return pw.statusLines(200, nil, nil)
236 234 }