Documentation
¶
Index ¶
Constants ¶
View Source
const (
EnvSecret = "SECRET"
)
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Auth ¶
type Auth struct {
Type constant.ConfigAuthType `env:"AUTH_TYPE,default=session" validate:"required,oneof=session"`
SessionSecret string `env:"AUTH_SESSION_SECRET,required" validate:"required_if=Type session"`
SessionProvider constant.ConfigAuthSessionProvider `env:"AUTH_SESSION_PROVIDER,default=single" validate:"required_if=Type session,oneof=single credentials"`
SessionUser string `env:"AUTH_SESSION_USER" validate:"required_if=SessionProvider single"`
SessionPassword string `env:"AUTH_SESSION_PASSWORD" validate:"required_if=SessionProvider single"`
SessionCredentials map[string]string `env:"AUTH_SESSION_CREDENTIALS,separator=|,delimiter=;" validate:"required_if=SessionProvider credentials"`
SessionCleanupEnabled bool `env:"AUTH_SESSION_CLEANUP_ENABLED,default=true"`
SessionCleanupInterval time.Duration `env:"AUTH_SESSION_CLEANUP_INTERVAL,default=1h" validate:"required_if=Type session,gte=0"`
SessionCookieMaxAge time.Duration `env:"AUTH_SESSION_COOKIE_MAX_AGE,default=8h" validate:"required_if=Type session"`
SessionCookieName string `env:"AUTH_SESSION_COOKIE_NAME,default=UPDA_SESSION" validate:"required_if=Type session"`
// if set to non-blank, subdomains send it
SessionCookieDomain *string `env:"AUTH_SESSION_COOKIE_DOMAIN"`
// cookie's scope (/ meaning when browser adds it automatically)
SessionCookiePath string `env:"AUTH_SESSION_COOKIE_PATH,default=/" validate:"required_if=Type session"`
// true means JavaScript cannot access it (recommended)
SessionCookieHttpOnly bool `env:"AUTH_SESSION_COOKIE_HTTP_ONLY,default=true"`
// true means SSL is required, otherwise cookie is not sent
SessionCookieSecure bool `env:"AUTH_SESSION_COOKIE_SECURE,default=true"`
// force mode when browser stores (recommended is strict)
SessionCookieSameSite constant.ConfigAuthSessionSameSite `env:"AUTH_SESSION_COOKIE_SAME_SITE,default=strict" validate:"required_if=Type session,oneof=lax strict"`
SessionCookieSameSiteMode http.SameSite
}
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 {
Encoding constant.ConfigLogEncoding `env:"LOGGING_ENCODING,default=console" validate:"required,oneof=json console"`
EncodingColorize bool `env:"LOGGING_ENCODING_COLORIZE,default=false"`
EncodingErrorKey string `env:"LOGGING_ENCODING_ERROR_KEY,default=error" validate:"required"`
EncodingFileKey string `env:"LOGGING_ENCODING_FILE_KEY,default=file" validate:"required"`
EncodingFuncKey string `env:"LOGGING_ENCODING_FUNC_KEY,default=func" validate:"required"`
EncodingLevelKey string `env:"LOGGING_ENCODING_LEVEL_KEY,default=level" validate:"required"`
EncodingMessageKey string `env:"LOGGING_ENCODING_MESSAGE_KEY,default=msg" validate:"required"`
EncodingStacktraceKey string `env:"LOGGING_ENCODING_STACKTRACE_KEY,default=stacktrace" validate:"required"`
EncodingTimeEncoder constant.ConfigLogTimeEncoder `` /* 134-byte string literal not displayed */
EncodingTimeKey string `env:"LOGGING_ENCODING_TIME_KEY,default=ts" validate:"required"`
Level string `env:"LOGGING_LEVEL,default=info" validate:"required,oneof=trace debug info warn error fatal panic disabled"`
LevelRequests string `env:"LOGGING_LEVEL_REQUESTS,default=disabled" validate:"required,oneof=trace debug info warn error fatal panic disabled"`
}
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"`
RefreshInterval time.Duration `env:"PROMETHEUS_REFRESH_INTERVAL,default=60s" validate:"required_if=Enabled true,gte=0"`
}
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"`
}
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/api/" 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"`
}
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"`
}
Click to show internal directories.
Click to hide internal directories.