mirror of
https://github.com/documize/community.git
synced 2025-07-19 13:19:43 +02:00
73 lines
1.8 KiB
Go
73 lines
1.8 KiB
Go
package integratedauth
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
|
|
"github.com/microsoft/go-mssqldb/msdsn"
|
|
)
|
|
|
|
var (
|
|
providers map[string]Provider
|
|
DefaultProviderName string
|
|
|
|
ErrProviderCannotBeNil = errors.New("provider cannot be nil")
|
|
ErrProviderNameMustBePopulated = errors.New("provider name must be populated")
|
|
)
|
|
|
|
func init() {
|
|
providers = make(map[string]Provider)
|
|
}
|
|
|
|
// GetIntegratedAuthenticator calls the authProvider specified in the 'authenticator' connection string parameter, if supplied.
|
|
// Otherwise fails back to the DefaultProviderName implementation for the platform.
|
|
func GetIntegratedAuthenticator(config msdsn.Config) (IntegratedAuthenticator, error) {
|
|
authenticatorName, ok := config.Parameters["authenticator"]
|
|
if !ok {
|
|
provider, err := getProvider(DefaultProviderName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
p, err := provider.GetIntegratedAuthenticator(config)
|
|
// we ignore the error in this case to force a fallback to sqlserver authentication.
|
|
// this preserves the original behaviour
|
|
if err != nil {
|
|
return nil, nil
|
|
}
|
|
|
|
return p, nil
|
|
}
|
|
|
|
provider, err := getProvider(authenticatorName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return provider.GetIntegratedAuthenticator(config)
|
|
}
|
|
|
|
func getProvider(name string) (Provider, error) {
|
|
provider, ok := providers[name]
|
|
|
|
if !ok {
|
|
return nil, fmt.Errorf("provider %v not found", name)
|
|
}
|
|
|
|
return provider, nil
|
|
}
|
|
|
|
// SetIntegratedAuthenticationProvider stores a named authentication provider. It should be called before any connections are created.
|
|
func SetIntegratedAuthenticationProvider(providerName string, p Provider) error {
|
|
if p == nil {
|
|
return ErrProviderCannotBeNil
|
|
}
|
|
|
|
if providerName == "" {
|
|
return ErrProviderNameMustBePopulated
|
|
}
|
|
|
|
providers[providerName] = p
|
|
|
|
return nil
|
|
}
|