// Package admin defines and implements store for admin-level data like secret key, list of admins and so on package admin import ( "errors" log "github.com/go-pkgz/lgr" ) // Store defines interface returning admins info for given site type Store interface { Key() (key string, err error) Admins(siteID string) (ids []string) Email(siteID string) (email string) } // StaticStore implements keys.Store with a single, predefined key type StaticStore struct { admins []string email string key string } // Key returns static key for all sites, allows empty site func (s *StaticStore) Key() (key string, err error) { if s.key == "" { return "", errors.New("empty key for static key store") } return s.key, nil } // NewStaticStore makes StaticStore instance with given key func NewStaticStore(key string, admins []string, email string) *StaticStore { log.Printf("[DEBUG] admin users %+v, email %s", admins, email) return &StaticStore{key: key, admins: admins, email: email} } // NewStaticKeyStore is a shortcut for making StaticStore for key consumers only func NewStaticKeyStore(key string) *StaticStore { return &StaticStore{key: key, admins: []string{}, email: ""} } // Admins returns static list of admin's ids, the same for all sites func (s *StaticStore) Admins(string) (ids []string) { return s.admins } // Email gets static email address func (s *StaticStore) Email(string) (email string) { return s.email }