diff options
| author | James Elliott <james-d-elliott@users.noreply.github.com> | 2025-03-09 01:53:44 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-09 01:53:44 +1100 |
| commit | 9241731a4dd5592b4a02b5352c903b4d06b6f4ab (patch) | |
| tree | 5184b98751912a261ff70fd8721b9cd4f1c98f1e /experimental/embed/config.go | |
| parent | bbcb38ab9ff35e69d5d52a71ab56346749f5e8b1 (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.go | 71 |
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 +} |
