config

package
v0.11.0 Latest Latest
Warning

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

Go to latest
Published: Aug 3, 2026 License: MIT Imports: 11 Imported by: 0

Documentation

Index

Constants

View Source
const (
	OrgModePersonal = "personal"
	OrgModeSingle   = "single"
	OrgModeMulti    = "multi"
)

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
	UI           UI
	OAuth        OAuth
	Token        Token
	Session      Session
	RateLimit    RateLimit
	Webhook      Webhook
	AccessPolicy AccessPolicy
	Admin        Admin
	InternalAPI  InternalAPI
	Organization Organization
	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 InternalAPI added in v0.1.24

type InternalAPI struct {
	Token string `env:"AUTHARA_INTERNAL_API_TOKEN"`
}

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 Organization added in v0.1.24

type Organization struct {
	Mode                                string `env:"AUTHARA_ORG_MODE,default=single"`
	PublicOrganizationManagementEnabled bool   `env:"AUTHARA_PUBLIC_ORGANIZATION_MANAGEMENT_ENABLED,default=false"`
	InvitationEmailIncludeCode          bool   `env:"AUTHARA_INVITATION_EMAIL_INCLUDE_CODE,default=false"`
	InvitationTTLRaw                    string `env:"AUTHARA_ORGANIZATION_INVITATION_TTL,default=168h"`

	InvitationTTL time.Duration
}

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 UI added in v0.10.0

type UI struct {
	DefaultReturnTo string `env:"AUTHARA_DEFAULT_RETURN_TO,default=/"`
}

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"`
	Timeout              time.Duration `env:"AUTHARA_WEBHOOK_TIMEOUT,default=5s"`
	WorkerCount          int           `env:"AUTHARA_WEBHOOK_WORKER_COUNT,default=2"`
	MaxDeliveryAttempts  int           `env:"AUTHARA_WEBHOOK_MAX_DELIVERY_ATTEMPTS,default=3"`
	ProcessingStaleAfter time.Duration `env:"AUTHARA_WEBHOOK_PROCESSING_STALE_AFTER,default=2m"`
	StaleReaperInterval  time.Duration `env:"AUTHARA_WEBHOOK_STALE_REAPER_INTERVAL,default=1m"`
	DeliveredRetention   time.Duration `env:"AUTHARA_WEBHOOK_DELIVERED_RETENTION,default=24h"`
	FailedRetention      time.Duration `env:"AUTHARA_WEBHOOK_FAILED_RETENTION,default=720h"`
	CleanupInterval      time.Duration `env:"AUTHARA_WEBHOOK_CLEANUP_INTERVAL,default=1h"`
	MaintenanceBatchSize int           `env:"AUTHARA_WEBHOOK_MAINTENANCE_BATCH_SIZE,default=1000"`

	URL             string
	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