From 0078c31a3a10b71814ad2d27493cdc3185c821cb Mon Sep 17 00:00:00 2001 From: Ayman Bagabas Date: Tue, 6 Dec 2022 19:25:36 -0500 Subject: [PATCH] feat(access): lazy load user keys from db --- server/config/repo.go | 7 +------ server/config/user.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/server/config/repo.go b/server/config/repo.go index 6898b7819ea4ae45ba01c30658d13d841dc9e97f..2c2010cf18dd3e8a1c7d86bfb329abb6111b2086 100644 --- a/server/config/repo.go +++ b/server/config/repo.go @@ -150,14 +150,9 @@ func (r *repo) Collabs() []proto.User { return collabs } for i, c := range cs { - ks, err := r.cfg.db.GetUserPublicKeys(c) - if err != nil { - log.Printf("error getting public keys for %q: %v", c.Name, err) - continue - } u := &user{ + cfg: r.cfg, user: c, - keys: ks, } collabs[i] = u } diff --git a/server/config/user.go b/server/config/user.go index f382010be2d99a6c9cef7c234ec36c8c3137f3d6..dc703b09b40b9a8d76e013205c249cd0362b19c0 100644 --- a/server/config/user.go +++ b/server/config/user.go @@ -1,6 +1,7 @@ package config import ( + "log" "net/mail" "github.com/charmbracelet/soft-serve/proto" @@ -11,6 +12,7 @@ import ( var _ proto.User = &user{} type user struct { + cfg *Config user *types.User keys []*types.PublicKey } @@ -36,8 +38,18 @@ func (u *user) IsAdmin() bool { } func (u *user) PublicKeys() []ssh.PublicKey { - ks := make([]ssh.PublicKey, len(u.keys)) - for i, k := range u.keys { + keys := u.keys + if keys == nil || len(keys) == 0 { + ks, err := u.cfg.db.GetUserPublicKeys(u.user) + if err != nil { + log.Printf("error getting public keys for %q: %v", u.Name(), err) + return nil + } + u.keys = ks + keys = ks + } + ks := make([]ssh.PublicKey, len(keys)) + for i, k := range keys { ks[i] = k } return ks