package auth import ( "encoding/json" "fmt" "github.com/rs/zerolog/log" "dynatron.me/x/blasphem/pkg/storage" ) const ( AuthStoreKey = "auth" ) type AuthStore interface { User(UserID) *User } type authStore struct { Users []User `json:"users"` Groups interface{} `json:"groups"` Credentials []Credential `json:"credentials"` userMap map[UserID]*User } func (a *Authenticator) newAuthStore(s storage.Store) (as *authStore, err error) { as = &authStore{} err = s.Get(AuthStoreKey, as) as.userMap = make(map[UserID]*User) for _, u := range as.Users { as.userMap[u.ID] = &u log.Debug().Interface("user", u).Msg("user") } for _, c := range as.Credentials { prov := a.Provider(c.AuthProviderType) if prov == nil { return nil, fmt.Errorf("no such provider %s", c.AuthProviderType) } pd := prov.NewCredData() if c.DataRaw != nil { err := json.Unmarshal(*c.DataRaw, pd) if err != nil { return nil, err } } } return } func (s *authStore) User(uid UserID) *User { return s.userMap[uid] }