summaryrefslogtreecommitdiff
path: root/internal/middlewares/util.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/middlewares/util.go')
-rw-r--r--internal/middlewares/util.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/internal/middlewares/util.go b/internal/middlewares/util.go
index 03b80f557..7a7eb39e4 100644
--- a/internal/middlewares/util.go
+++ b/internal/middlewares/util.go
@@ -1,7 +1,26 @@
package middlewares
import (
+ "crypto/x509"
+
"github.com/valyala/fasthttp"
+
+ "github.com/authelia/authelia/v4/internal/authentication"
+ "github.com/authelia/authelia/v4/internal/authorization"
+ "github.com/authelia/authelia/v4/internal/clock"
+ "github.com/authelia/authelia/v4/internal/configuration/schema"
+ "github.com/authelia/authelia/v4/internal/expression"
+ "github.com/authelia/authelia/v4/internal/metrics"
+ "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/random"
+ "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/templates"
+ "github.com/authelia/authelia/v4/internal/totp"
+ "github.com/authelia/authelia/v4/internal/webauthn"
)
// SetContentTypeApplicationJSON sets the Content-Type header to `application/json; charset=utf-8`.
@@ -13,3 +32,48 @@ func SetContentTypeApplicationJSON(ctx *fasthttp.RequestCtx) {
func SetContentTypeTextPlain(ctx *fasthttp.RequestCtx) {
ctx.SetContentTypeBytes(contentTypeTextPlain)
}
+
+// NewProviders provisions all providers based on the configuration provided.
+func NewProviders(config *schema.Configuration, caCertPool *x509.CertPool) (providers Providers, warns, errs []error) {
+ providers.Random = &random.Cryptographical{}
+ providers.StorageProvider = storage.NewProvider(config, caCertPool)
+ providers.Authorizer = authorization.NewAuthorizer(config)
+ providers.NTP = ntp.NewProvider(&config.NTP)
+ providers.PasswordPolicy = NewPasswordPolicyProvider(config.PasswordPolicy)
+ providers.Regulator = regulation.NewRegulator(config.Regulation, providers.StorageProvider, clock.New())
+ providers.SessionProvider = session.NewProvider(config.Session, caCertPool)
+ providers.TOTP = totp.NewTimeBasedProvider(config.TOTP)
+ providers.UserAttributeResolver = expression.NewUserAttributes(config)
+
+ var err error
+
+ switch {
+ case config.AuthenticationBackend.File != nil:
+ providers.UserProvider = authentication.NewFileUserProvider(config.AuthenticationBackend.File)
+ case config.AuthenticationBackend.LDAP != nil:
+ providers.UserProvider = authentication.NewLDAPUserProvider(config.AuthenticationBackend, caCertPool)
+ }
+
+ if providers.Templates, err = templates.New(templates.Config{EmailTemplatesPath: config.Notifier.TemplatePath}); err != nil {
+ errs = append(errs, err)
+ }
+
+ if providers.MetaDataService, err = webauthn.NewMetaDataProvider(config, providers.StorageProvider); err != nil {
+ errs = append(errs, err)
+ }
+
+ switch {
+ case config.Notifier.SMTP != nil:
+ providers.Notifier = notification.NewSMTPNotifier(config.Notifier.SMTP, caCertPool)
+ case config.Notifier.FileSystem != nil:
+ providers.Notifier = notification.NewFileNotifier(*config.Notifier.FileSystem)
+ }
+
+ providers.OpenIDConnect = oidc.NewOpenIDConnectProvider(config, providers.StorageProvider, providers.Templates)
+
+ if config.Telemetry.Metrics.Enabled {
+ providers.Metrics = metrics.NewPrometheus()
+ }
+
+ return providers, warns, errs
+}