Commit 79fdea24bf

79fdea24bfbc7c2cc4caae15e8ca91ae8949ef14

parent: 4fa1930038

Verified · cmc

cmc <hello@cleberg.net> · 2026-09-28 08:33 UTC

sshd: unregistered-key settings link from the site URL, scheme and port kept

Ref #268

Layout: unified · split

internal/sshd/sshd.go +3 −2
@@ -18,6 +18,7 @@ import (
18 "path/filepath" 18 "path/filepath"
19 "slices" 19 "slices"
20 "strconv" 20 "strconv"
21 "strings"
21 "sync" 22 "sync"
22 "sync/atomic" 23 "sync/atomic"
23 "time" 24 "time"
@@ -447,9 +448,9 @@ func (s *Server) runAnonymous(ch ssh.Channel, keyB64, cmdline string) int {
447 flag := map[string]string{"open": "--email <address>", "invite": "--invite <code>"}[s.cfg.Registration.Mode] 448 flag := map[string]string{"open": "--email <address>", "invite": "--invite <code>"}[s.cfg.Registration.Mode]
448 fmt.Fprintf(ch.Stderr(), 449 fmt.Fprintf(ch.Stderr(),
449 "this key (%s) is not registered on %s.\n"+ 450 "this key (%s) is not registered on %s.\n"+
450 "already have an account? add it at https://%s/settings#keys\n"+ 451 "already have an account? add it at %s/settings#keys\n"+
451 "new here? ssh git@%s register --username <name> %s\n", 452 "new here? ssh git@%s register --username <name> %s\n",
452 fp, host, host, host, flag) 453 fp, host, strings.TrimSuffix(s.cfg.Server.SiteURL, "/"), host, flag)
453 return protocol.ExitDenied 454 return protocol.ExitDenied
454 } 455 }
455 return control.RunRegister(s.cfg, s.st, pub, argv, ch, ch.Stderr()) 456 return control.RunRegister(s.cfg, s.st, pub, argv, ch, ch.Stderr())
internal/sshd/sshd_test.go +3 −2
@@ -242,7 +242,8 @@ func TestUnregisteredKeyMessageNamesFingerprintAndHost(t *testing.T) {
242 242
243 cfg := config.Default() 243 cfg := config.Default()
244 cfg.Server.Root = root 244 cfg.Server.Root = root
245 cfg.Server.SiteURL = "https://forge.test" 245 // The settings link keeps the site URL's scheme and port.
246 cfg.Server.SiteURL = "http://forge.test:8080/"
246 cfg.Registration.Mode = "open" 247 cfg.Registration.Mode = "open"
247 srv, err := New(cfg, st) 248 srv, err := New(cfg, st)
248 if err != nil { 249 if err != nil {
@@ -289,7 +290,7 @@ func TestUnregisteredKeyMessageNamesFingerprintAndHost(t *testing.T) {
289 } 290 }
290 291
291 fp := ssh.FingerprintSHA256(signer.PublicKey()) 292 fp := ssh.FingerprintSHA256(signer.PublicKey())
292 for _, want := range []string{fp, "forge.test", "https://forge.test/settings#keys", "ssh git@forge.test register"} { 293 for _, want := range []string{fp, "forge.test", "add it at http://forge.test:8080/settings#keys\n", "ssh git@forge.test register"} {
293 if !strings.Contains(stderr.String(), want) { 294 if !strings.Contains(stderr.String(), want) {
294 t.Errorf("message missing %q:\n%s", want, stderr.String()) 295 t.Errorf("message missing %q:\n%s", want, stderr.String())
295 } 296 }