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.
synctv/internal/provider/provider.go

50 lines
948 B
Go

2 years ago
package provider
import (
"context"
"fmt"
"sync"
"golang.org/x/oauth2"
)
type OAuth2Provider string
var (
providers = make(map[OAuth2Provider]ProviderInterface)
lock sync.Mutex
)
type UserInfo struct {
Username string
ProviderUserID uint
}
type ProviderInterface interface {
Provider() OAuth2Provider
NewConfig(ClientID, ClientSecret string) *oauth2.Config
GetUserInfo(ctx context.Context, config *oauth2.Config, code string) (*UserInfo, error)
}
func RegisterProvider(provider ProviderInterface) {
lock.Lock()
defer lock.Unlock()
providers[provider.Provider()] = provider
}
func (p OAuth2Provider) GetProvider() (ProviderInterface, error) {
lock.Lock()
defer lock.Unlock()
pi, ok := providers[p]
if !ok {
return nil, FormatErrNotImplemented(p)
}
return pi, nil
}
type FormatErrNotImplemented string
func (f FormatErrNotImplemented) Error() string {
return fmt.Sprintf("%s not implemented", string(f))
}