From fedad0f216083b2dc1560b820bc6a8285937d37b Mon Sep 17 00:00:00 2001 From: nato Date: Sun, 5 Feb 2023 15:09:09 -0800 Subject: [PATCH] Host.go: assign registered nicks to users upon connection. --- auth.go | 13 +++++++++++++ host.go | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/auth.go b/auth.go index f26f009..05c1bcf 100644 --- a/auth.go +++ b/auth.go @@ -67,6 +67,7 @@ type Auth struct { settingsMu sync.RWMutex allowlistMode bool + keynamesMode bool opLoader KeyLoader allowlistLoader KeyLoader } @@ -96,6 +97,18 @@ func (a *Auth) SetAllowlistMode(value bool) { a.allowlistMode = value } +func (a *Auth) SetKeynamesMode(value bool) { + a.settingsMu.Lock() + defer a.settingsMu.Unlock() + a.keynamesMode = value +} + +func (a *Auth) Keyname(key ssh.PublicKey) string { + fingerprint := sshd.Fingerprint(key) + name := a.keynamesByFingerprint[fingerprint] + return name +} + // SetPassphrase enables passphrase authentication with the given passphrase. // If an empty passphrase is given, disable passphrase authentication. func (a *Auth) SetPassphrase(passphrase string) { diff --git a/host.go b/host.go index 62276ab..0da784e 100644 --- a/host.go +++ b/host.go @@ -101,6 +101,15 @@ func (h *Host) isOp(conn sshd.Connection) bool { // Connect a specific Terminal to this host and its room. func (h *Host) Connect(term *sshd.Terminal) { id := NewIdentity(term.Conn) + + if h.auth.keynamesMode { + name := h.auth.Keyname(id.PublicKey()) + if len(name) >0 { + id.SetName(name) + id.SetSymbol("✓") + } + } + user := message.NewUserScreen(id, term) user.OnChange = func() { term.SetPrompt(GetPrompt(user))