summaryrefslogtreecommitdiff
path: root/experimental/embed/config.go
diff options
context:
space:
mode:
authorJames Elliott <james-d-elliott@users.noreply.github.com>2025-03-09 01:53:44 +1100
committerGitHub <noreply@github.com>2025-03-09 01:53:44 +1100
commit9241731a4dd5592b4a02b5352c903b4d06b6f4ab (patch)
tree5184b98751912a261ff70fd8721b9cd4f1c98f1e /experimental/embed/config.go
parentbbcb38ab9ff35e69d5d52a71ab56346749f5e8b1 (diff)
feat(embed): make authelia embedable (#8841)
This adds a highly experimental option for developers looking to embed Authelia within another go binary. Closes #5803 Signed-off-by: James Elliott <james-d-elliott@users.noreply.github.com>
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
+}