config

package
v0.0.0-...-108462a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 30, 2025 License: GPL-3.0 Imports: 24 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EnvSecret = "SECRET"
)

Variables

This section is empty.

Functions

This section is empty.

Types

type App

type App struct {
	TimeZone    string `env:"TZ,default=Etc/UTC" validate:"required"`
	Development bool   `env:"DEVELOPMENT,default=false"`
}

type Auth

type Auth struct {
	AuthMethod           constant.ConfigAuthMode `env:"AUTH_MODE,default=basic_single" validate:"required,oneof=basic_single basic_credentials"`
	BasicAuthUser        string                  `env:"BASIC_AUTH_USER" validate:"required_if=AuthMethod basic_single"`
	BasicAuthPassword    string                  `env:"BASIC_AUTH_PASSWORD" validate:"required_if=AuthMethod basic_single"`
	BasicAuthCredentials map[string]string       `env:"BASIC_AUTH_CREDENTIALS,separator=|,delimiter=;" validate:"required_if=AuthMethod basic_credentials"`
}

type Configuration

type Configuration struct {
	App                      *App
	Auth                     *Auth
	Cors                     *Cors
	Database                 *Database
	Lock                     *Lock
	Logging                  *Logging
	Prometheus               *Prometheus
	Secret                   *Secret
	Server                   *Server
	Task                     *Task
	Webhook                  *Webhook
	Webinterface             *Webinterface
	WebinterfaceCacheControl *WebinterfaceCacheControl
}

func LoadFromEnvironment

func LoadFromEnvironment(ctx context.Context) (*Configuration, *gorm.DB)

type Cors

type Cors struct {
	AllowCredentials bool     `env:"CORS_ALLOW_CREDENTIALS,default=true"`
	AllowOrigins     []string `env:"CORS_ALLOW_ORIGINS,default=*"`
	AllowMethods     []string `env:"CORS_ALLOW_METHODS,default=HEAD,GET,POST,PUT,PATCH,DELETE,OPTIONS"`
	AllowHeaders     []string `env:"CORS_ALLOW_HEADERS,default=Authorization,Content-Type"`
	ExposeHeaders    []string `env:"CORS_EXPOSE_HEADERS,default=*"`
}

type Database

type Database struct {
	Type             constant.ConfigDatabaseType `env:"DB_TYPE,default=postgres" validate:"required,oneof=postgres"`
	MigrationEnabled bool                        `env:"DB_MIGRATION_ENABLED,default=true"`
	PostgresHost     string                      `env:"DB_POSTGRES_HOST,default=localhost" validate:"required_if=Type postgres"`
	PostgresPort     int                         `env:"DB_POSTGRES_PORT,default=5432" validate:"required_if=Type postgres"`
	PostgresName     string                      `env:"DB_POSTGRES_NAME" validate:"required_if=Type postgres"`
	PostgresTimeZone string                      `env:"DB_POSTGRES_TZ,default=Etc/UTC" validate:"required_if=Type postgres"`
	PostgresUser     string                      `env:"DB_POSTGRES_USER" validate:"required_if=Type postgres"`
	PostgresPassword string                      `env:"DB_POSTGRES_PASSWORD" validate:"required_if=Type postgres"`
}

type Lock

type Lock struct {
	RedisEnabled        bool          `env:"LOCK_REDIS_ENABLED,default=false"`
	RedisHost           string        `env:"LOCK_REDIS_HOST,default=localhost" validate:"required_if=RedisEnabled true"`
	RedisPort           int           `env:"LOCK_REDIS_PORT,default=6379" validate:"required_if=RedisEnabled true,numeric,gte=1"`
	RedisDbName         int           `env:"LOCK_REDIS_DB_NAME,default=0" validate:"numeric,gte=0"`
	RedisUsername       string        `env:"LOCK_REDIS_USERNAME"`
	RedisPassword       string        `env:"LOCK_REDIS_PASSWORD"`
	RedisTaskTries      int           `env:"LOCK_REDIS_TASK_LOCK_TRIES,default=1" validate:"required_if=RedisEnabled true,numeric,gte=1"`
	RedisTaskLockAtMost time.Duration `env:"LOCK_REDIS_TASK_LOCK_AT_MOST,default=30s" validate:"required_if=RedisEnabled true,gte=0"`
	RedisTaskRetryDelay time.Duration `env:"LOCK_REDIS_TASK_RETRY_DELAY,default=5s" validate:"required_if=RedisEnabled true,gte=0"`
	RedisUrl            string
}

type Logging

type Logging struct {
	Debug                   bool                              `env:"DEBUG,default=false"`
	Development             bool                              `env:"DEVELOPMENT,default=false"`
	Directory               string                            `env:"LOGGING_DIRECTORY"`
	Encoding                constant.ConfigLogEncoding        `env:"LOGGING_ENCODING,default=json" validate:"required,oneof=json console"`
	EncodingCallerEncoder   constant.ConfigLogCallerEncoder   `env:"LOGGING_ENCODING_CALLER_ENCODER,default=short" validate:"required,oneof=full short"`
	EncodingDurationEncoder constant.ConfigLogDurationEncoder `env:"LOGGING_ENCODING_DURATION_ENCODER,default=seconds" validate:"required,oneof=seconds nanos millis string"`
	EncodingLevelEncoder    constant.ConfigLogLevelEncoder    `` /* 126-byte string literal not displayed */
	EncodingLevelKey        string                            `env:"LOGGING_ENCODING_LEVEL_KEY,default=level" validate:"required_if=Encoding json"`
	EncodingMessageKey      string                            `env:"LOGGING_ENCODING_MESSAGE_KEY,default=msg" validate:"required_if=Encoding json"`
	EncodingStacktraceKey   string                            `env:"LOGGING_ENCODING_STACKTRACE_KEY,default=stacktrace" validate:"required_if=Encoding json"`
	EncodingTimeEncoder     constant.ConfigLogTimeEncoder     `` /* 134-byte string literal not displayed */
	EncodingTimeKey         string                            `env:"LOGGING_ENCODING_TIME_KEY,default=ts" validate:"required_if=Encoding json"`
	Level                   string                            `env:"LOGGING_LEVEL,default=info" validate:"required,oneof=debug info warn error dpanic panic fatal"`
	UTC                     bool                              `env:"LOGGING_UTC"`
}

type Prometheus

type Prometheus struct {
	Enabled            bool   `env:"PROMETHEUS_ENABLED,default=false"`
	Port               int    `env:"PROMETHEUS_PORT,default=8080" validate:"required_if=Enabled true,gte=1"`
	Listen             string `env:"PROMETHEUS_LISTEN"`
	BasePath           string `env:"PROMETHEUS_BASE_PATH,default=/" validate:"required_if=Enabled true"`
	Path               string `env:"PROMETHEUS_METRICS_PATH,default=/metrics" validate:"required_if=Enabled true"`
	SecureTokenEnabled bool   `env:"PROMETHEUS_SECURE_TOKEN_ENABLED,default=true"`
	SecureToken        string `env:"PROMETHEUS_SECURE_TOKEN" validate:"required_if=Enabled true SecureTokenEnabled true"`
}

type Secret

type Secret struct {
	Secret string `env:"SECRET,required" validate:"required"`
}

type Server

type Server struct {
	Port        int           `env:"SERVER_PORT,default=8080" validate:"gte=1"`
	Listen      string        `env:"SERVER_LISTEN"`
	BasePath    string        `env:"SERVER_BASE_PATH,default=/" validate:"required"`
	TlsEnabled  bool          `env:"SERVER_TLS_ENABLED,default=false"`
	TlsCertPath string        `env:"SERVER_TLS_CERT_PATH"`
	TlsKeyPath  string        `env:"SERVER_TLS_KEY_PATH"`
	Timeout     time.Duration `env:"SERVER_TIMEOUT,default=10s" validate:"gte=0"`
}

type Task

type Task struct {
	UpdateCleanStaleEnabled  bool          `env:"TASK_UPDATE_CLEAN_STALE_ENABLED,default=true"`
	UpdateCleanStaleInterval time.Duration `env:"TASK_EVENT_CLEAN_STALE_INTERVAL,default=1h" validate:"required_if=UpdateCleanStaleEnabled true,gt=0"`
	UpdateCleanStaleMaxAge   time.Duration `env:"TASK_UPDATE_CLEAN_STALE_MAX_AGE,default=720h" validate:"required_if=UpdateCleanStaleEnabled true,gt=0"`

	EventCleanStaleEnabled  bool          `env:"TASK_EVENT_CLEAN_STALE_ENABLED,default=false"`
	EventCleanStaleInterval time.Duration `env:"TASK_EVENT_CLEAN_STALE_INTERVAL,default=8h" validate:"required_if=EventCleanStaleEnabled true,gt=0"`
	EventCleanStaleMaxAge   time.Duration `env:"TASK_EVENT_CLEAN_STALE_MAX_AGE,default=2190h" validate:"required_if=EventCleanStaleEnabled true,gt=0"`

	ActionsEnqueueEnabled   bool          `env:"TASK_ACTIONS_ENQUEUE_ENABLED,default=true"`
	ActionsEnqueueInterval  time.Duration `env:"TASK_ACTIONS_ENQUEUE_INTERVAL,default=10s" validate:"required_if=ActionsEnqueueEnabled true,gt=0"`
	ActionsEnqueueBatchSize int           `env:"TASK_ACTIONS_ENQUEUE_BATCH_SIZE,default=1" validate:"required_if=ActionsEnqueueEnabled true,numeric,gte=1"`

	ActionsInvokeEnabled    bool          `env:"TASK_ACTIONS_INVOKE_ENABLED,default=true"`
	ActionsInvokeInterval   time.Duration `env:"TASK_ACTIONS_INVOKE_INTERVAL,default=10s" validate:"required_if=ActionsInvokeEnabled true,gt=0"`
	ActionsInvokeBatchSize  int           `env:"TASK_ACTIONS_INVOKE_BATCH_SIZE,default=1" validate:"required_if=ActionsInvokeEnabled true,numeric,gte=1"`
	ActionsInvokeMaxRetries int           `env:"TASK_ACTIONS_INVOKE_MAX_RETRIES,default=3" validate:"required_if=ActionsInvokeEnabled true,numeric,gte=1"`

	ActionsCleanStaleEnabled  bool          `env:"TASK_ACTIONS_CLEAN_STALE_ENABLED,default=true"`
	ActionsCleanStaleInterval time.Duration `env:"TASK_ACTIONS_CLEAN_STALE_INTERVAL,default=12h" validate:"required_if=ActionsCleanStaleEnabled true,gt=0"`
	ActionsCleanStaleMaxAge   time.Duration `env:"TASK_ACTIONS_CLEAN_STALE_MAX_AGE,default=720h" validate:"required_if=ActionsCleanStaleEnabled true,gt=0"`

	PrometheusRefreshInterval time.Duration `env:"TASK_PROMETHEUS_REFRESH_INTERVAL,default=60s" validate:"required,gte=0"`
}

type Webhook

type Webhook struct {
	TokenLength int `env:"WEBHOOKS_TOKEN_LENGTH,default=32" validate:"required,numeric,gte=4"`
}

type Webinterface

type Webinterface struct {
	Enabled          bool   `env:"WEB_INTERFACE_ENABLED,default=true"`
	ApiUrl           string `env:"WEB_INTERFACE_API_URL,default=http://localhost:8080" validate:"required_if=Enabled true"`
	Title            string `env:"WEB_INTERFACE_TITLE,default=upda" validate:"required_if=Enabled true"`
	DarkThemeEnabled bool   `env:"WEB_INTERFACE_DARK_THEME_ENABLED,default=false"`
	FooterEnabled    bool   `env:"WEB_INTERFACE_FOOTER_ENABLED,default=true"`
}

type WebinterfaceCacheControl

type WebinterfaceCacheControl struct {
	Enabled              bool           `env:"WEB_INTERFACE_CC_ENABLED,default=true"`
	MustRevalidate       bool           `env:"WEB_INTERFACE_CC_MUST_REVALIDATE,default=true"`
	NoCache              bool           `env:"WEB_INTERFACE_CC_NO_CACHE,default=false"`
	NoStore              bool           `env:"WEB_INTERFACE_CC_NO_STORE,default=false"`
	NoTransform          bool           `env:"WEB_INTERFACE_CC_NO_TRANSFORM,default=false"`
	Public               bool           `env:"WEB_INTERFACE_CC_PUBLIC,default=true"`
	Private              bool           `env:"WEB_INTERFACE_CC_PRIVATE,default=false"`
	ProxyRevalidate      bool           `env:"WEB_INTERFACE_CC_PROXY_REVALIDATE,default=true"`
	MaxAge               *time.Duration `env:"WEB_INTERFACE_CC_MAX_AGE,noinit,default=48h"`
	SMaxAge              *time.Duration `env:"WEB_INTERFACE_CC_SMAX_AGE,noinit"`
	Immutable            bool           `env:"WEB_INTERFACE_CC_IMMUTABLE,default=false"`
	StaleWhileRevalidate *time.Duration `env:"WEB_INTERFACE_CC_STALE_WHILE_REVALIDATE,noinit"`
	StaleIfError         *time.Duration `env:"WEB_INTERFACE_CC_STALE_IF_ERROR,noinit"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL