...
1 package database
2
3 import (
4 "context"
5 "encoding/json"
6
7 "github.com/pkg/errors"
8
9 "edge-infra.dev/pkg/edge/iam/config"
10 "edge-infra.dev/pkg/edge/iam/device"
11 )
12
13 func (s *Store) GetDeviceAccount(ctx context.Context, username string) (acct *device.Account, err error) {
14 key := keyFrom(KeyPrefixDeviceAccount, username)
15
16 var doc *Doc
17 if doc, err = s.getDoc(ctx, key); err != nil {
18 return nil, errors.WithMessage(err, "failed to retrieve device account")
19 }
20
21 if doc == nil {
22 return nil, nil
23 }
24
25 data := doc.Value
26 if err := json.Unmarshal(data, &acct); err != nil {
27 return nil, errors.WithMessage(err, "device account schema not valid")
28 }
29 return acct, nil
30 }
31
32 func (s *Store) SaveDeviceAccount(ctx context.Context, acc device.Account) error {
33 key := keyFrom(KeyPrefixDeviceAccount, acc.Username)
34 payload, err := json.Marshal(acc)
35 if err != nil {
36 return errors.WithStack(err)
37 }
38 if err := s.updateDoc(ctx, key, payload, WithExpiration(config.GetPINTTL())); err != nil {
39 return errors.WithStack(err)
40 }
41 return nil
42 }
43
View as plain text