package database import ( "context" "encoding/json" "github.com/pkg/errors" "edge-infra.dev/pkg/edge/iam/config" "edge-infra.dev/pkg/edge/iam/device" ) func (s *Store) GetDeviceAccount(ctx context.Context, username string) (acct *device.Account, err error) { key := keyFrom(KeyPrefixDeviceAccount, username) // try and get the doc var doc *Doc if doc, err = s.getDoc(ctx, key); err != nil { return nil, errors.WithMessage(err, "failed to retrieve device account") } // not found if doc == nil { return nil, nil } // found; unmarshal data := doc.Value if err := json.Unmarshal(data, &acct); err != nil { return nil, errors.WithMessage(err, "device account schema not valid") } return acct, nil } func (s *Store) SaveDeviceAccount(ctx context.Context, acc device.Account) error { key := keyFrom(KeyPrefixDeviceAccount, acc.Username) payload, err := json.Marshal(acc) if err != nil { return errors.WithStack(err) } if err := s.updateDoc(ctx, key, payload, WithExpiration(config.GetPINTTL())); err != nil { return errors.WithStack(err) } return nil }