trustednetworks
This commit is contained in:
parent
90825fa01b
commit
2c997e3866
4 changed files with 106 additions and 13 deletions
|
@ -11,9 +11,12 @@ import (
|
||||||
"github.com/rs/zerolog/log"
|
"github.com/rs/zerolog/log"
|
||||||
|
|
||||||
"dynatron.me/x/blasphem/pkg/auth/provider"
|
"dynatron.me/x/blasphem/pkg/auth/provider"
|
||||||
"dynatron.me/x/blasphem/pkg/auth/provider/hass"
|
|
||||||
"dynatron.me/x/blasphem/pkg/frontend"
|
"dynatron.me/x/blasphem/pkg/frontend"
|
||||||
"dynatron.me/x/blasphem/pkg/storage"
|
"dynatron.me/x/blasphem/pkg/storage"
|
||||||
|
|
||||||
|
// providers
|
||||||
|
_ "dynatron.me/x/blasphem/pkg/auth/provider/hass"
|
||||||
|
_ "dynatron.me/x/blasphem/pkg/auth/provider/trustednets"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
@ -47,25 +50,26 @@ func (a *Authenticator) InstallRoutes(e *echo.Echo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (a *Authenticator) InitAuth(s storage.Store) error {
|
func (a *Authenticator) InitAuth(s storage.Store) error {
|
||||||
a.flows = make(FlowStore)
|
a.providers = make(map[string]provider.AuthProvider)
|
||||||
a.sessions.init()
|
for _, pI := range provider.Providers {
|
||||||
hap, err := hass.NewHAProvider(s)
|
nProv, err := pI(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX: yuck. use init with a registry or something
|
a.providers[nProv.ProviderType()] = nProv
|
||||||
a.providers = map[string]provider.AuthProvider{
|
|
||||||
hap.ProviderType(): hap,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a.flows = make(FlowStore)
|
||||||
|
|
||||||
|
a.sessions.init()
|
||||||
|
|
||||||
|
var err error
|
||||||
a.store, err = a.newAuthStore(s)
|
a.store, err = a.newAuthStore(s)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ type HomeAssistantProvider struct {
|
||||||
Users []HAUser `json:"users"`
|
Users []HAUser `json:"users"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHAProvider(s storage.Store) (*HomeAssistantProvider, error) {
|
func NewHAProvider(s storage.Store) (provider.AuthProvider, error) {
|
||||||
hap := &HomeAssistantProvider{
|
hap := &HomeAssistantProvider{
|
||||||
AuthProviderBase: provider.AuthProviderBase{
|
AuthProviderBase: provider.AuthProviderBase{
|
||||||
Name: "Home Assistant Local",
|
Name: "Home Assistant Local",
|
||||||
|
@ -121,3 +121,8 @@ func (hap *HomeAssistantProvider) FlowSchema() []provider.FlowSchemaItem {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
provider.Register(HomeAssistant, NewHAProvider)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
package provider
|
package provider
|
||||||
|
|
||||||
|
import (
|
||||||
|
"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
|
type AuthProvider interface { // TODO: this should include stepping
|
||||||
AuthProviderMetadata
|
AuthProviderMetadata
|
||||||
ProviderBase() AuthProviderBase
|
ProviderBase() AuthProviderBase
|
||||||
|
@ -8,6 +16,10 @@ type AuthProvider interface { // TODO: this should include stepping
|
||||||
ValidateCreds(reqMap map[string]interface{}) (user ProviderUser, success bool)
|
ValidateCreds(reqMap map[string]interface{}) (user ProviderUser, success bool)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Register(providerName string, f func(storage.Store) (AuthProvider, error)) {
|
||||||
|
Providers[providerName] = f
|
||||||
|
}
|
||||||
|
|
||||||
type ProviderUser interface {
|
type ProviderUser interface {
|
||||||
AuthProviderMetadata
|
AuthProviderMetadata
|
||||||
ProviderUserData() interface{}
|
ProviderUserData() interface{}
|
||||||
|
|
72
pkg/auth/provider/trustednets/trustednets.go
Normal file
72
pkg/auth/provider/trustednets/trustednets.go
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
package trustednets
|
||||||
|
|
||||||
|
// TODO: This doesn't work at all
|
||||||
|
|
||||||
|
import (
|
||||||
|
"dynatron.me/x/blasphem/pkg/auth/provider"
|
||||||
|
"dynatron.me/x/blasphem/pkg/storage"
|
||||||
|
)
|
||||||
|
|
||||||
|
type User struct {
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
|
||||||
|
provider.AuthProvider `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (hau *User) UserData() interface{} {
|
||||||
|
return UserData{
|
||||||
|
UserID: hau.UserID,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserData struct {
|
||||||
|
UserID string `json:"user_id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
const TrustedNetworks = "trusted_networks"
|
||||||
|
|
||||||
|
func (h *User) ProviderUserData() interface{} { return h.UserData() }
|
||||||
|
|
||||||
|
type TrustedNetworksProvider struct {
|
||||||
|
provider.AuthProviderBase `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func New(s storage.Store) (provider.AuthProvider, error) {
|
||||||
|
hap := &TrustedNetworksProvider{
|
||||||
|
AuthProviderBase: provider.AuthProviderBase{
|
||||||
|
Name: "Trusted Networks",
|
||||||
|
Type: TrustedNetworks,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return hap, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: To implement this, ValidateCreds needs to be changed to accept an http.Request, or the echo context.
|
||||||
|
func (hap *TrustedNetworksProvider) ValidateCreds(rm map[string]interface{}) (provider.ProviderUser, bool) {
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (hap *TrustedNetworksProvider) NewCredData() interface{} {
|
||||||
|
return &UserData{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (hap *TrustedNetworksProvider) FlowSchema() []provider.FlowSchemaItem {
|
||||||
|
return []provider.FlowSchemaItem{
|
||||||
|
{
|
||||||
|
Type: "string",
|
||||||
|
Name: "username",
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Type: "string",
|
||||||
|
Name: "password",
|
||||||
|
Required: true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
provider.Register(TrustedNetworks, New)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue