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}