config

package
v0.1.23 Latest Latest
Warning

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

Go to latest
Published: May 26, 2026 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AccessPolicy added in v0.1.10

type AccessPolicy struct {
	AllowedEmailEnabled bool `env:"AUTHARA_ACCESS_POLICY_ALLOWLIST_ENABLED,default=false"`
}

type Admin added in v0.1.23

type Admin struct {
	AuditRetentionDays int `env:"AUTHARA_ADMIN_AUDIT_RETENTION_DAYS,default=180"`
}

type Cache added in v0.1.21

type Cache struct {
	Provider      string `env:"AUTHARA_CACHE_PROVIDER,default=noop"`
	RedisHost     string `env:"AUTHARA_REDIS_HOST,default=localhost"`
	RedisPort     int    `env:"AUTHARA_REDIS_PORT,default=6379"`
	RedisPassword string `env:"AUTHARA_REDIS_PASSWORD"`
	RedisDB       int    `env:"AUTHARA_REDIS_DB,default=0"`
}

type Challenge added in v0.1.12

type Challenge struct {
	Enabled             bool          `env:"AUTHARA_CHALLENGE_ENABLED,default=false"`
	TTL                 time.Duration `env:"AUTHARA_CHALLENGE_TTL,default=30m"`
	VerificationCodeTTL time.Duration `env:"AUTHARA_CHALLENGE_VERIFICATION_CODE_TTL,default=10m"`
	MaxAttempts         int           `env:"AUTHARA_CHALLENGE_MAX_ATTEMPTS,default=5"`
	MaxResends          int           `env:"AUTHARA_CHALLENGE_MAX_RESENDS,default=3"`
	MinResendInterval   time.Duration `env:"AUTHARA_CHALLENGE_MIN_RESEND_INTERVAL,default=30s"`
}

type Config

type Config struct {
	Values       Values
	DB           DB
	Cache        Cache
	Logging      Logging
	OAuth        OAuth
	Token        Token
	Session      Session
	RateLimit    RateLimit
	Webhook      Webhook
	AccessPolicy AccessPolicy
	Admin        Admin
	Challenge    Challenge
	Email        Email
}

func Load

func Load() (*Config, error)

type DB

type DB struct {
	Host     string `env:"POSTGRESQL_HOST,required"`
	Port     int    `env:"POSTGRESQL_PORT,required"`
	Username string `env:"POSTGRESQL_USERNAME,required"`
	Password string `env:"POSTGRESQL_PASSWORD,required"`
	Database string `env:"POSTGRESQL_DATABASE,required"`
	Schema   string `env:"POSTGRESQL_SCHEMA,default=authara"`
	Timezone string `env:"POSTGRESQL_TIMEZONE,default=UTC"`
	LogSQL   bool   `env:"POSTGRESQL_LOG_SQL,default=false"`

	MaxOpenConns    int           `env:"AUTHARA_DB_MAX_OPEN_CONNS,default=40"`
	MaxIdleConns    int           `env:"AUTHARA_DB_MAX_IDLE_CONNS,default=20"`
	ConnMaxLifetime time.Duration `env:"AUTHARA_DB_CONN_MAX_LIFETIME,default=30m"`
	ConnMaxIdleTime time.Duration `env:"AUTHARA_DB_CONN_MAX_IDLE_TIME,default=5m"`
}

type Email added in v0.1.12

type Email struct {
	Provider string `env:"AUTHARA_EMAIL_PROVIDER,default=noop"`
	From     string `env:"AUTHARA_EMAIL_FROM"`

	SMTPHost     string        `env:"AUTHARA_EMAIL_SMTP_HOST"`
	SMTPPort     int           `env:"AUTHARA_EMAIL_SMTP_PORT,default=587"`
	SMTPUsername string        `env:"AUTHARA_EMAIL_SMTP_USERNAME"`
	SMTPPassword string        `env:"AUTHARA_EMAIL_SMTP_PASSWORD"`
	SMTPTLS      bool          `env:"AUTHARA_EMAIL_SMTP_TLS,default=true"`
	SMTPTimeout  time.Duration `env:"AUTHARA_EMAIL_SMTP_TIMEOUT,default=10s"`

	WorkerCount        int           `env:"AUTHARA_EMAIL_WORKER_COUNT,default=2"`
	WorkerPollInterval time.Duration `env:"AUTHARA_EMAIL_WORKER_POLL_INTERVAL,default=2s"`
	JobMaxAttempts     int           `env:"AUTHARA_EMAIL_JOB_MAX_ATTEMPTS,default=10"`
	CleanupSentAfter   time.Duration `env:"AUTHARA_EMAIL_CLEANUP_SENT_AFTER,default=720h"`    // 30d
	CleanupFailedAfter time.Duration `env:"AUTHARA_EMAIL_CLEANUP_FAILED_AFTER,default=2160h"` // 90d
}

type Logging

type Logging struct {
	Level string `env:"LOG_LEVEL"`
}

type OAuth

type OAuth struct {
	Providers []string `env:"AUTHARA_OAUTH_PROVIDERS"`

	GoogleClientID string `env:"AUTHARA_OAUTH_GOOGLE_CLIENT_ID"`
}

type RateLimit

type RateLimit struct {
	LoginIPLimit        int    `env:"AUTHARA_RATE_LIMIT_LOGIN_IP_LIMIT,default=5"`
	LoginIPWindowRaw    string `env:"AUTHARA_RATE_LIMIT_LOGIN_IP_WINDOW,default=1m"`
	LoginEmailLimit     int    `env:"AUTHARA_RATE_LIMIT_LOGIN_EMAIL_LIMIT,default=10"`
	LoginEmailWindowRaw string `env:"AUTHARA_RATE_LIMIT_LOGIN_EMAIL_WINDOW,default=1h"`

	SignupIPLimit        int    `env:"AUTHARA_RATE_LIMIT_SIGNUP_IP_LIMIT,default=3"`
	SignupIPWindowRaw    string `env:"AUTHARA_RATE_LIMIT_SIGNUP_IP_WINDOW,default=1h"`
	SignupEmailLimit     int    `env:"AUTHARA_RATE_LIMIT_SIGNUP_EMAIL_LIMIT,default=3"`
	SignupEmailWindowRaw string `env:"AUTHARA_RATE_LIMIT_SIGNUP_EMAIL_WINDOW,default=24h"`

	PasswordResetIPLimit        int    `env:"AUTHARA_RATE_LIMIT_PASSWORD_RESET_IP_LIMIT,default=5"`
	PasswordResetIPWindowRaw    string `env:"AUTHARA_RATE_LIMIT_PASSWORD_RESET_IP_WINDOW,default=1h"`
	PasswordResetEmailLimit     int    `env:"AUTHARA_RATE_LIMIT_PASSWORD_RESET_EMAIL_LIMIT,default=3"`
	PasswordResetEmailWindowRaw string `env:"AUTHARA_RATE_LIMIT_PASSWORD_RESET_EMAIL_WINDOW,default=24h"`

	PasskeyLoginIPLimit     int    `env:"AUTHARA_RATE_LIMIT_PASSKEY_LOGIN_IP_LIMIT,default=30"`
	PasskeyLoginIPWindowRaw string `env:"AUTHARA_RATE_LIMIT_PASSKEY_LOGIN_IP_WINDOW,default=10m"`

	ChallengeVerifyIPLimit     int    `env:"AUTHARA_RATE_LIMIT_CHALLENGE_VERIFY_IP_LIMIT,default=30"`
	ChallengeVerifyIPWindowRaw string `env:"AUTHARA_RATE_LIMIT_CHALLENGE_VERIFY_IP_WINDOW,default=10m"`

	ChallengeResendIPLimit     int    `env:"AUTHARA_RATE_LIMIT_CHALLENGE_RESEND_IP_LIMIT,default=10"`
	ChallengeResendIPWindowRaw string `env:"AUTHARA_RATE_LIMIT_CHALLENGE_RESEND_IP_WINDOW,default=1h"`

	CleanupEvery int `env:"AUTHARA_RATE_LIMIT_CLEANUP_EVERY,default=200"`
	MaxEntries   int `env:"AUTHARA_RATE_LIMIT_MAX_ENTRIES,default=50000"`

	LoginIPWindow            time.Duration
	LoginEmailWindow         time.Duration
	SignupIPWindow           time.Duration
	SignupEmailWindow        time.Duration
	PasswordResetIPWindow    time.Duration
	PasswordResetEmailWindow time.Duration
	PasskeyLoginIPWindow     time.Duration
	ChallengeVerifyIPWindow  time.Duration
	ChallengeResendIPWindow  time.Duration
}

type Session

type Session struct {
	SessionTTLDays          int    `env:"AUTHARA_SESSION_TTL_DAYS,default=60"`
	RefreshTokenTTLDays     int    `env:"AUTHARA_REFRESH_TOKEN_TTL_DAYS,default=14"`
	RefreshTokenRotationRaw string `env:"AUTHARA_REFRESH_TOKEN_ROTATION_INTERVAL,default=24h"`

	SessionTTL           time.Duration
	RefreshTokenTTL      time.Duration
	RefreshTokenRotation time.Duration
}

type Token

type Token struct {
	Issuer                string            `env:"AUTHARA_JWT_ISSUER,required"`
	ActiveKeyID           string            `env:"AUTHARA_JWT_ACTIVE_KEY_ID,required"`
	Keys                  map[string]string `env:"AUTHARA_JWT_KEYS,required"`
	AccessTokenTTLMinutes int               `env:"AUTHARA_ACCESS_TOKEN_TTL_MINUTES,default=10"`

	AccessTokenTTL time.Duration
	KeySet         *token.KeySet
}

type Values

type Values struct {
	AppEnv            string `env:"APP_ENV,default=dev"`
	PublicURL         string `env:"PUBLIC_URL,required"`
	TrustProxyHeaders bool   `env:"AUTHARA_TRUST_PROXY_HEADERS,default=false"`

	HttpAddr string
}

type Webhook added in v0.1.3

type Webhook struct {
	URLRaw        string   `env:"AUTHARA_WEBHOOK_URL"`
	Secret        string   `env:"AUTHARA_WEBHOOK_SECRET"`
	EnabledEvents []string `env:"AUTHARA_WEBHOOK_ENABLED_EVENTS"`
	TimeoutRaw    string   `env:"AUTHARA_WEBHOOK_TIMEOUT,default=5s"`

	URL             string
	Timeout         time.Duration
	EnabledEventSet map[string]struct{}
}

func (*Webhook) Enabled added in v0.1.3

func (w *Webhook) Enabled() bool

func (*Webhook) EventEnabled added in v0.1.3

func (w *Webhook) EventEnabled(name string) bool

Jump to

Keyboard shortcuts

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