mirror of
https://github.com/0rangebananaspy/authelia.git
synced 2024-09-14 22:47:21 +07:00
0a970aef8a
This moves the OpenID Connect storage from memory into the SQL storage, making it persistent and allowing it to be used with clustered deployments like the rest of Authelia.
89 lines
2.9 KiB
Go
89 lines
2.9 KiB
Go
package commands
|
|
|
|
import (
|
|
"github.com/authelia/authelia/v4/internal/authentication"
|
|
"github.com/authelia/authelia/v4/internal/authorization"
|
|
"github.com/authelia/authelia/v4/internal/middlewares"
|
|
"github.com/authelia/authelia/v4/internal/notification"
|
|
"github.com/authelia/authelia/v4/internal/ntp"
|
|
"github.com/authelia/authelia/v4/internal/oidc"
|
|
"github.com/authelia/authelia/v4/internal/regulation"
|
|
"github.com/authelia/authelia/v4/internal/session"
|
|
"github.com/authelia/authelia/v4/internal/storage"
|
|
"github.com/authelia/authelia/v4/internal/totp"
|
|
"github.com/authelia/authelia/v4/internal/utils"
|
|
)
|
|
|
|
func getStorageProvider() (provider storage.Provider) {
|
|
switch {
|
|
case config.Storage.PostgreSQL != nil:
|
|
return storage.NewPostgreSQLProvider(config)
|
|
case config.Storage.MySQL != nil:
|
|
return storage.NewMySQLProvider(config)
|
|
case config.Storage.Local != nil:
|
|
return storage.NewSQLiteProvider(config)
|
|
default:
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func getProviders() (providers middlewares.Providers, warnings []error, errors []error) {
|
|
// TODO: Adjust this so the CertPool can be used like a provider.
|
|
autheliaCertPool, warnings, errors := utils.NewX509CertPool(config.CertificatesDirectory)
|
|
if len(warnings) != 0 || len(errors) != 0 {
|
|
return providers, warnings, errors
|
|
}
|
|
|
|
storageProvider := getStorageProvider()
|
|
|
|
var (
|
|
userProvider authentication.UserProvider
|
|
err error
|
|
)
|
|
|
|
switch {
|
|
case config.AuthenticationBackend.File != nil:
|
|
userProvider = authentication.NewFileUserProvider(config.AuthenticationBackend.File)
|
|
case config.AuthenticationBackend.LDAP != nil:
|
|
userProvider = authentication.NewLDAPUserProvider(config.AuthenticationBackend, autheliaCertPool)
|
|
}
|
|
|
|
var notifier notification.Notifier
|
|
|
|
switch {
|
|
case config.Notifier.SMTP != nil:
|
|
notifier = notification.NewSMTPNotifier(config.Notifier.SMTP, autheliaCertPool)
|
|
case config.Notifier.FileSystem != nil:
|
|
notifier = notification.NewFileNotifier(*config.Notifier.FileSystem)
|
|
}
|
|
|
|
ntpProvider := ntp.NewProvider(&config.NTP)
|
|
|
|
clock := utils.RealClock{}
|
|
authorizer := authorization.NewAuthorizer(config)
|
|
sessionProvider := session.NewProvider(config.Session, autheliaCertPool)
|
|
regulator := regulation.NewRegulator(config.Regulation, storageProvider, clock)
|
|
|
|
oidcProvider, err := oidc.NewOpenIDConnectProvider(config.IdentityProviders.OIDC, storageProvider)
|
|
if err != nil {
|
|
errors = append(errors, err)
|
|
}
|
|
|
|
totpProvider := totp.NewTimeBasedProvider(config.TOTP)
|
|
|
|
passwordPolicyProvider := middlewares.NewPasswordPolicyProvider(config.PasswordPolicy)
|
|
|
|
return middlewares.Providers{
|
|
Authorizer: authorizer,
|
|
UserProvider: userProvider,
|
|
Regulator: regulator,
|
|
OpenIDConnect: oidcProvider,
|
|
StorageProvider: storageProvider,
|
|
NTP: ntpProvider,
|
|
Notifier: notifier,
|
|
SessionProvider: sessionProvider,
|
|
TOTP: totpProvider,
|
|
PasswordPolicy: passwordPolicyProvider,
|
|
}, warnings, errors
|
|
}
|