Change summary
server/config/repo.go | 7 +------
server/config/user.go | 16 ++++++++++++++--
2 files changed, 15 insertions(+), 8 deletions(-)
Detailed changes
@@ -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
}
@@ -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