summaryrefslogtreecommitdiff
path: root/experimental/embed/config.go
diff options
context:
space:
mode:
Diffstat (limited to 'experimental/embed/config.go')
-rw-r--r--experimental/embed/config.go71
1 files changed, 71 insertions, 0 deletions
diff --git a/experimental/embed/config.go b/experimental/embed/config.go
new file mode 100644
index 000000000..81d21463b
--- /dev/null
+++ b/experimental/embed/config.go
@@ -0,0 +1,71 @@
+package embed
+
+import (
+ "fmt"
+
+ "github.com/authelia/authelia/v4/internal/configuration"
+ "github.com/authelia/authelia/v4/internal/configuration/schema"
+ "github.com/authelia/authelia/v4/internal/configuration/validator"
+)
+
+// NewConfiguration builds a new configuration given a list of paths and filters. The filters can either be nil or
+// generated using NewNamedConfigFileFilters. This function essentially operates the same as Authelia does normally in
+// configuration steps.
+func NewConfiguration(paths []string, filters []configuration.BytesFilter) (keys []string, config *schema.Configuration, val *schema.StructValidator, err error) {
+ sources := configuration.NewDefaultSourcesWithDefaults(
+ paths,
+ filters,
+ configuration.DefaultEnvPrefix,
+ configuration.DefaultEnvDelimiter,
+ []configuration.Source{configuration.NewMapSource(configuration.Defaults())})
+
+ val = schema.NewStructValidator()
+
+ var definitions *schema.Definitions
+
+ if definitions, err = configuration.LoadDefinitions(val, sources...); err != nil {
+ return nil, nil, nil, err
+ }
+
+ config = &schema.Configuration{}
+
+ if keys, err = configuration.LoadAdvanced(
+ val,
+ "",
+ config,
+ definitions,
+ sources...); err != nil {
+ return nil, nil, nil, err
+ }
+
+ return keys, config, val, nil
+}
+
+// ValidateConfigurationAndKeys performs all configuration validation steps. The provided *schema.StructValidator should
+// at minimum be checked for errors before continuing.
+func ValidateConfigurationAndKeys(config *schema.Configuration, keys []string, val *schema.StructValidator) {
+ ValidateConfigurationKeys(keys, val)
+ ValidateConfiguration(config, val)
+}
+
+// ValidateConfigurationKeys just the keys validation steps. The provided *schema.StructValidator should
+// at minimum be checked for errors before continuing. This should be used prior to using ValidateConfiguration.
+func ValidateConfigurationKeys(keys []string, val *schema.StructValidator) {
+ validator.ValidateKeys(keys, configuration.GetMultiKeyMappedDeprecationKeys(), configuration.DefaultEnvPrefix, val)
+}
+
+// ValidateConfiguration just the configuration validation steps. The provided *schema.StructValidator should
+// at minimum be checked for errors before continuing. This should be used after using ValidateConfigurationKeys.
+func ValidateConfiguration(config *schema.Configuration, val *schema.StructValidator) {
+ validator.ValidateConfiguration(config, val)
+}
+
+// NewNamedConfigFileFilters allows configuring a set of file filters. The officially supported filter has the name
+// 'template'. The only other one at this stage is 'expand-env' which is deprecated.
+func NewNamedConfigFileFilters(names ...string) (filters []configuration.BytesFilter, err error) {
+ if filters, err = configuration.NewFileFilters(names); err != nil {
+ return nil, fmt.Errorf("error occurred loading filters: %w", err)
+ }
+
+ return filters, nil
+}