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.
Create accounts with a key and find the instance config
c36d507302c0f7fb24af6eba390c4121d67318c3 · Keenan Nemetz · 16d ago · parent 3abbe749
Create accounts with a key and find the instance config An account is now written with its first key in one transaction, so a name cannot be claimed without a credential. add-key remains for additional keys, and remote user create forwards the key on stdin. Local commands now resolve the config from --config, VOLE_CONFIG, ./vole.toml, or ~/.vole/vole.toml before falling back to defaults. init prints --config in its next steps when the instance will not be discovered automatically.
server/ssh/admin.go +9−3
| @@ -161,15 +161,21 @@ func (s *Server) adminUser(action string, args []string, actor string, in io.Rea | |||
| 161 | 161 | ||
| 162 | 162 | case "create": | |
| 163 | 163 | if len(args) != 1 { | |
| 164 | return nil, nil, &adminUsageError{msg: "usage: vole-admin user create <name>"} | ||
| 164 | return nil, nil, &adminUsageError{msg: "usage: vole-admin user create <name> (public key on stdin)"} | ||
| 165 | 165 | } | |
| 166 | a, err := s.cfg.Identity.Create(args[0], actor) | ||
| 166 | key, err := readAdminKey(in) | ||
| 167 | if err != nil { | ||
| 168 | return nil, nil, err | ||
| 169 | } | ||
| 170 | a, err := s.cfg.Identity.Create(args[0], key, actor) | ||
| 167 | 171 | if err != nil { | |
| 168 | 172 | return nil, nil, err | |
| 169 | 173 | } | |
| 170 | 174 | return userData(a), func(out, errOut io.Writer) { | |
| 171 | 175 | fmt.Fprintf(out, "%s\t%s\n", a.Name, a.ID) | |
| 172 | fmt.Fprintln(errOut, "no keys yet: this account cannot authenticate until you add one") | ||
| 176 | if len(a.Keys) > 0 { | ||
| 177 | fmt.Fprintf(errOut, "key %s\n", a.Keys[0].Fingerprint) | ||
| 178 | } | ||
| 173 | 179 | }, nil | |
| 174 | 180 | ||
| 175 | 181 | case "add-key": | |