1package config
2
3import (
4 "log"
5 "net/mail"
6
7 "github.com/charmbracelet/soft-serve/proto"
8 "github.com/charmbracelet/soft-serve/server/db/types"
9 "golang.org/x/crypto/ssh"
10)
11
12var _ proto.User = &user{}
13
14type user struct {
15 cfg *Config
16 user *types.User
17 keys []*types.PublicKey
18}
19
20func (u *user) Name() string {
21 return u.user.Name
22}
23
24func (u *user) Email() *mail.Address {
25 return u.user.Address()
26}
27
28func (u *user) Login() *string {
29 return u.user.Login
30}
31
32func (u *user) Password() *string {
33 return u.user.Password
34}
35
36func (u *user) IsAdmin() bool {
37 return u.user.Admin
38}
39
40func (u *user) PublicKeys() []ssh.PublicKey {
41 keys := u.keys
42 if keys == nil || len(keys) == 0 {
43 ks, err := u.cfg.db.GetUserPublicKeys(u.user)
44 if err != nil {
45 log.Printf("error getting public keys for %q: %v", u.Name(), err)
46 return nil
47 }
48 u.keys = ks
49 keys = ks
50 }
51 ks := make([]ssh.PublicKey, len(keys))
52 for i, k := range keys {
53 ks[i] = k
54 }
55 return ks
56}