mirror of https://github.com/synctv-org/synctv
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.7 KiB
Go
76 lines
1.7 KiB
Go
package providers
|
|
|
|
import (
|
|
"github.com/synctv-org/synctv/internal/provider"
|
|
"github.com/zijiren233/gencontainer/rwmap"
|
|
)
|
|
|
|
var (
|
|
enabledProviders rwmap.RWMap[provider.OAuth2Provider, struct{}]
|
|
allProviders rwmap.RWMap[provider.OAuth2Provider, provider.Interface]
|
|
)
|
|
|
|
func InitProvider(p provider.OAuth2Provider, c provider.Oauth2Option) (provider.Interface, error) {
|
|
pi, ok := allProviders.Load(p)
|
|
if !ok {
|
|
return nil, FormatNotImplementedError(p)
|
|
}
|
|
pi.Init(c)
|
|
return pi, nil
|
|
}
|
|
|
|
func RegisterProvider(ps ...provider.Interface) {
|
|
for _, p := range ps {
|
|
allProviders.Store(p.Provider(), p)
|
|
}
|
|
}
|
|
|
|
func GetProvider(p provider.OAuth2Provider) (provider.Interface, error) {
|
|
_, ok := enabledProviders.Load(p)
|
|
if !ok {
|
|
return nil, FormatNotImplementedError(p)
|
|
}
|
|
pi, ok := allProviders.Load(p)
|
|
if !ok {
|
|
return nil, FormatNotImplementedError(p)
|
|
}
|
|
return pi, nil
|
|
}
|
|
|
|
func AllProvider() map[provider.OAuth2Provider]provider.Interface {
|
|
m := make(map[provider.OAuth2Provider]provider.Interface)
|
|
allProviders.Range(func(key string, value provider.Interface) bool {
|
|
m[key] = value
|
|
return true
|
|
})
|
|
return m
|
|
}
|
|
|
|
func EnabledProvider() *rwmap.RWMap[provider.OAuth2Provider, struct{}] {
|
|
return &enabledProviders
|
|
}
|
|
|
|
func EnableProvider(p provider.OAuth2Provider) error {
|
|
_, ok := allProviders.Load(p)
|
|
if !ok {
|
|
return FormatNotImplementedError(p)
|
|
}
|
|
enabledProviders.Store(p, struct{}{})
|
|
return nil
|
|
}
|
|
|
|
func DisableProvider(p provider.OAuth2Provider) error {
|
|
_, ok := allProviders.Load(p)
|
|
if !ok {
|
|
return FormatNotImplementedError(p)
|
|
}
|
|
enabledProviders.Delete(p)
|
|
return nil
|
|
}
|
|
|
|
type FormatNotImplementedError string
|
|
|
|
func (f FormatNotImplementedError) Error() string {
|
|
return string(f) + " is not implemented"
|
|
}
|