package provider import ( "net/http" "dynatron.me/x/blasphem/pkg/flow" "dynatron.me/x/blasphem/pkg/storage" ) type Constructor func(storage.Store) (AuthProvider, error) var Providers = make(map[string]Constructor) type AuthProvider interface { // TODO: this should include stepping AuthProviderMetadata ProviderBase() AuthProviderBase FlowSchema() flow.Schema NewCredData() interface{} ValidateCreds(r *http.Request, reqMap map[string]interface{}) (user ProviderUser, success bool) EqualCreds(c1, c2 ProviderUser) bool Lookup(ProviderUser) ProviderUser } func Register(providerName string, f func(storage.Store) (AuthProvider, error)) { Providers[providerName] = f } type ProviderUser interface { // TODO: make sure this is sane with all the ProviderUser and UserData type stuff UserData() ProviderUser Provider() AuthProvider } type AuthProviderBase struct { Name string `json:"name"` ID *string `json:"id"` Type string `json:"type"` } type AuthProviderMetadata interface { ProviderName() string ProviderID() *string ProviderType() string } func (bp *AuthProviderBase) ProviderName() string { return bp.Name } func (bp *AuthProviderBase) ProviderID() *string { return bp.ID } func (bp *AuthProviderBase) ProviderType() string { return bp.Type } func (bp *AuthProviderBase) ProviderBase() AuthProviderBase { return *bp }