Documentation
¶
Index ¶
- Constants
- func SwitchEnvironment(env environment)
- type AIAnthropicConfig
- type AIConfig
- type AIOpenAIConfig
- type AIOpenRouterConfig
- type AdaptersConfig
- type AppConfig
- type BackupConfig
- type BackupS3Config
- type CacheConfig
- type CacheExpirationConfig
- type Config
- type DatabaseConfig
- type DatabaseRuntimeMetadata
- type EnvVar
- type HTTPConfig
- type I18nConfig
- type LogConfig
- type MailConfig
- type ManagedConfig
- type ManagedKeyMetadata
- type ManagedRuntimeMetadata
- type ManagedSettingStatus
- type MetricsConfig
- type OAuthConfig
- type OAuthDiscordConfig
- type OAuthGitHubConfig
- type OAuthGoogleConfig
- type OperationalConstants
- type PasswordTokenConfig
- type PhoneConfig
- type ProcessesConfig
- type RecommenderConfig
- type RuntimeConfig
- type RuntimeMetadata
- type SecurityConfig
- type SecurityHeadersConfig
- type SettingAccess
- type StorageConfig
- type TLSConfig
- type UIConfig
Constants ¶
const ( // TemplateExt stores the extension used for the template files TemplateExt = ".gohtml" // StaticDir stores the directory served as static assets for the example app. StaticDir = "static" // StaticPrefix stores the URL prefix used when serving static files StaticPrefix = "files" )
const ( // EnvLocal represents the local environment EnvLocal environment = "local" // EnvTest represents the test environment EnvTest environment = "test" // EnvDevelop represents the development environment EnvDevelop environment = "dev" // EnvStaging represents the staging environment EnvStaging environment = "staging" // EnvQA represents the qa environment EnvQA environment = "qa" // EnvProduction represents the production environment EnvProduction environment = "prod" // DBModeEmbedded represents an embedded DB being used as a storage backend DBModeEmbedded dbmode = "embedded" // DBModeStandalone represents a standalone DB as being used as a storage backend DBModeStandalone dbmode = "standalone" // RuntimeProfileServerDB is the default profile using an external DB server. RuntimeProfileServerDB runtimeprofile = "server-db" // RuntimeProfileSingleNode is the profile targeting single-node embedding. RuntimeProfileSingleNode runtimeprofile = "single-node" // RuntimeProfileDistributed is the profile targeting distributed processes. RuntimeProfileDistributed runtimeprofile = "distributed" // DBDriverPostgres uses an external Postgres server. DBDriverPostgres dbdriver = "postgres" // DBDriverSQLite uses an embedded SQLite database. DBDriverSQLite dbdriver = "sqlite" // StorageDriverLocal uses the local filesystem via Afero. StorageDriverLocal storagedriver = "local" // StorageDriverMinIO uses MinIO/S3 compatible storage. StorageDriverMinIO storagedriver = "minio" // UIProviderFranken is the default GoShip UI provider. UIProviderFranken uiprovider = "franken" // UIProviderDaisy selects the Daisy UI provider. UIProviderDaisy uiprovider = "daisy" // UIProviderBare selects the minimal bare UI provider. UIProviderBare uiprovider = "bare" )
const ( // DefaultSchemaMigrationsTable is the canonical migration tracking table for core SQL migrations. DefaultSchemaMigrationsTable = "goship_schema_migrations" // MigrationPortabilitySQLCoreV1 is the first portability profile for SQLite-first promotion. MigrationPortabilitySQLCoreV1 = "sql-core-v1" // PromotionPathSQLiteToPostgresManualV1 identifies the first supported promotion workflow. PromotionPathSQLiteToPostgresManualV1 = "sqlite-to-postgres-manual-v1" // ManagedKeyRegistryVersion is the versioned contract identifier for managed-key metadata. ManagedKeyRegistryVersion = "managed-key-registry-v1" // ManagedKeySchemaVersion is the schema version for the managed-key registry payload. ManagedKeySchemaVersion = "managed-key-schema-v1" )
Variables ¶
This section is empty.
Functions ¶
func SwitchEnvironment ¶
func SwitchEnvironment(env environment)
SwitchEnvironment sets the environment variable used to dictate which environment the application is currently running in. This must be called prior to loading the configuration in order for it to take effect.
Types ¶
type AIAnthropicConfig ¶
type AIConfig ¶
type AIConfig struct {
Driver string `env:"AI_DRIVER" env-default:"anthropic"`
Anthropic AIAnthropicConfig
OpenAI AIOpenAIConfig
OpenRouter AIOpenRouterConfig
}
type AIOpenAIConfig ¶
type AIOpenRouterConfig ¶
type AdaptersConfig ¶
type AppConfig ¶
type AppConfig struct {
Name app `env:"PAGODA_APP_NAME"`
SupportEmail string `env:"PAGODA_APP_SUPPORTEMAIL"`
Environment environment `env:"PAGODA_APP_ENVIRONMENT"`
EncryptionKey string `env:"PAGODA_APP_ENCRYPTIONKEY"`
Timeout time.Duration `env:"PAGODA_APP_TIMEOUT"`
PasswordToken PasswordTokenConfig
EmailVerificationTokenExpiration time.Duration `env:"PAGODA_APP_EMAILVERIFICATIONTOKENEXPIRATION"`
OperationalConstants OperationalConstants
PageSize int `env:"PAGODA_APP_PAGESIZE"`
VapidPublicKey string `env:"PAGODA_APP_VAPIDPUBLICKEY"`
VapidPrivateKey string `env:"PAGODA_APP_VAPIDPRIVATEKEY"`
SentryDsn string `env:"PAGODA_APP_SENTRYDSN,SENTRY_DSN"`
TestSentryUrl string `env:"PAGODA_APP_TESTSENTRYURL"`
PublicStripeKey string `env:"PAGODA_APP_PUBLICSTRIPEKEY"`
PrivateStripeKey string `env:"PAGODA_APP_PRIVATESTRIPEKEY"`
StripeWebhookSecret string `env:"PAGODA_APP_STRIPEWEBHOOKSECRET"`
StripeWebhookPath string `env:"PAGODA_APP_STRIPEWEBHOOKPATH"`
AppEncryptionKey string `env:"PAGODA_APP_APPENCRYPTIONKEY"`
FirebaseBase64AccessKeys string `env:"PAGODA_APP_FIREBASEBASE64ACCESSKEYS"`
FirebaseJSONAccessKeys []byte
}
AppConfig stores application configuration
type BackupConfig ¶
type BackupConfig struct {
Driver string `env:"PAGODA_BACKUP_DRIVER" env-default:"sqlite-file"`
SchemaVersion string `env:"PAGODA_BACKUP_SCHEMA_VERSION" env-default:"v1"`
SQLitePath string `env:"PAGODA_BACKUP_SQLITE_PATH"`
S3 BackupS3Config
}
type BackupS3Config ¶
type BackupS3Config struct {
Enabled bool `env:"PAGODA_BACKUP_S3_ENABLED"`
Endpoint string `env:"PAGODA_BACKUP_S3_ENDPOINT"`
Region string `env:"PAGODA_BACKUP_S3_REGION"`
Bucket string `env:"PAGODA_BACKUP_S3_BUCKET"`
Prefix string `env:"PAGODA_BACKUP_S3_PREFIX"`
AccessKey string `env:"PAGODA_BACKUP_S3_ACCESSKEY"`
SecretKey string `env:"PAGODA_BACKUP_S3_SECRETKEY"`
UseSSL bool `env:"PAGODA_BACKUP_S3_USESSL" env-default:"true"`
}
type CacheConfig ¶
type CacheConfig struct {
Hostname string `env:"PAGODA_CACHE_HOSTNAME"`
Port uint16 `env:"PAGODA_CACHE_PORT"`
Password string `env:"PAGODA_CACHE_PASSWORD"`
Database int `env:"PAGODA_CACHE_DATABASE"`
TestDatabase int `env:"PAGODA_CACHE_TESTDATABASE"`
Expiration CacheExpirationConfig `env:"-"`
}
CacheConfig stores the cache configuration
type CacheExpirationConfig ¶
type Config ¶
type Config struct {
HTTP HTTPConfig
App AppConfig
Log LogConfig
Security SecurityConfig
Runtime RuntimeConfig
Managed ManagedConfig
UI UIConfig
Processes ProcessesConfig
Adapters AdaptersConfig
Metrics MetricsConfig
I18n I18nConfig
Cache CacheConfig
Database DatabaseConfig
Mail MailConfig
Phone PhoneConfig
Recommender RecommenderConfig
Storage StorageConfig
Backup BackupConfig
OAuth OAuthConfig
AI AIConfig
}
Config stores complete configuration
func (Config) ManagedSettingStatuses ¶
func (c Config) ManagedSettingStatuses() []ManagedSettingStatus
ManagedSettingStatuses returns the allowlisted managed settings with explicit access state.
func (Config) RuntimeMetadata ¶
func (c Config) RuntimeMetadata() RuntimeMetadata
RuntimeMetadata builds a runtime metadata snapshot using normalized configuration values.
type DatabaseConfig ¶
type DatabaseConfig struct {
Driver dbdriver `env:"PAGODA_DATABASE_DRIVER,PAGODA_DB_DRIVER"`
Path string `env:"PAGODA_DATABASE_PATH,PAGODA_DB_PATH"`
DbMode dbmode `env:"PAGODA_DATABASE_DBMODE"`
EmbeddedDriver string `env:"PAGODA_DATABASE_EMBEDDEDDRIVER"`
EmbeddedConnection string `env:"PAGODA_DATABASE_EMBEDDEDCONNECTION"`
EmbeddedTestConnection string `env:"PAGODA_DATABASE_EMBEDDEDTESTCONNECTION"`
Hostname string `env:"PAGODA_DATABASE_HOSTNAME"`
Port uint16 `env:"PAGODA_DATABASE_PORT"`
User string `env:"PAGODA_DATABASE_USER"`
Password string `env:"PAGODA_DATABASE_PASSWORD"`
DatabaseNameLocal string `env:"PAGODA_DATABASE_DATABASENAMELOCAL"`
DatabaseNameProd string `env:"PAGODA_DATABASE_DATABASENAMEPROD"`
TestDatabase string `env:"PAGODA_DATABASE_TESTDATABASE"`
SslCertPath string `env:"PAGODA_DATABASE_SSLCERTPATH"`
SslMode string `env:"PAGODA_DATABASE_SSLMODE"`
}
DatabaseConfig stores the database configuration
func (DatabaseConfig) RuntimeMetadata ¶
func (d DatabaseConfig) RuntimeMetadata() DatabaseRuntimeMetadata
RuntimeMetadata returns normalized metadata for DB mode, migration compatibility, and promotion path.
type DatabaseRuntimeMetadata ¶
type DatabaseRuntimeMetadata struct {
Mode string `json:"mode"`
Driver string `json:"driver"`
MigrationTrackingTable string `json:"migration_tracking_table"`
MigrationDialect string `json:"migration_dialect"`
MigrationPortability string `json:"migration_portability"`
CompatibleTargets []string `json:"compatible_targets"`
PromotionPath string `json:"promotion_path,omitempty"`
}
DatabaseRuntimeMetadata reports DB mode/driver and promotion compatibility details.
type EnvVar ¶
type EnvVar struct {
Name string `json:"name"`
Aliases []string `json:"aliases,omitempty"`
Type string `json:"type"`
Required bool `json:"required"`
Default string `json:"default,omitempty"`
}
func MissingRequiredEnv ¶
type HTTPConfig ¶
type HTTPConfig struct {
Hostname string `env:"PAGODA_HTTP_HOSTNAME"`
Port uint16 `env:"PAGODA_HTTP_PORT"`
Domain string `env:"PAGODA_HTTP_DOMAIN"`
ReadTimeout time.Duration `env:"PAGODA_HTTP_READTIMEOUT"`
WriteTimeout time.Duration `env:"PAGODA_HTTP_WRITETIMEOUT"`
IdleTimeout time.Duration `env:"PAGODA_HTTP_IDLETIMEOUT"`
SseKeepAlive time.Duration `env:"PAGODA_HTTP_SSEKEEPALIVE"`
TLS TLSConfig
}
HTTPConfig stores HTTP configuration
type I18nConfig ¶
type MailConfig ¶
type MailConfig struct {
Driver string `env:"PAGODA_MAIL_DRIVER,MAIL_DRIVER" env-default:"log"`
FromName string `env:"PAGODA_MAIL_FROM_NAME,MAIL_FROM_NAME" env-default:"GoShip App"`
FromAddress string `env:"PAGODA_MAIL_FROMADDRESS,MAIL_FROM_ADDRESS"`
Hostname string `env:"PAGODA_MAIL_HOSTNAME,MAIL_HOSTNAME"`
HttpPort uint16 `env:"PAGODA_MAIL_HTTPPORT,MAIL_HTTPPORT"`
SmtpPort uint16 `env:"PAGODA_MAIL_SMTPPORT,MAIL_SMTP_PORT"`
User string `env:"PAGODA_MAIL_USER,MAIL_USER"`
Password string `env:"PAGODA_MAIL_PASSWORD,MAIL_PASSWORD"`
SMTP struct {
Host string `env:"PAGODA_MAIL_SMTP_HOST,MAIL_SMTP_HOST"`
Port int `env:"PAGODA_MAIL_SMTP_PORT,MAIL_SMTP_PORT" env-default:"587"`
User string `env:"PAGODA_MAIL_SMTP_USER,MAIL_SMTP_USER"`
Pass string `env:"PAGODA_MAIL_SMTP_PASS,MAIL_SMTP_PASS"`
TLS bool `env:"PAGODA_MAIL_SMTP_TLS,MAIL_SMTP_TLS" env-default:"true"`
}
Resend struct {
APIKey string `env:"PAGODA_MAIL_RESEND_API_KEY,MAIL_RESEND_API_KEY"`
}
ResendAPIKey string `env:"PAGODA_MAIL_RESENDAPIKEY,MAIL_RESENDAPIKEY"`
}
MailConfig stores the mail configuration
type ManagedConfig ¶
type ManagedConfig struct {
Enabled bool `env:"PAGODA_MANAGED_MODE"`
Authority string `env:"PAGODA_MANAGED_AUTHORITY"`
OverridesJSON string `env:"PAGODA_MANAGED_OVERRIDES"`
HooksSecret string `env:"PAGODA_MANAGED_HOOKS_SECRET"`
HooksPreviousSecret string `env:"PAGODA_MANAGED_HOOKS_PREVIOUS_SECRET"`
HooksMaxSkewSeconds int `env:"PAGODA_MANAGED_HOOKS_MAX_SKEW_SECONDS" env-default:"300"`
HooksNonceTTLSeconds int `env:"PAGODA_MANAGED_HOOKS_NONCE_TTL_SECONDS" env-default:"300"`
RuntimeReport runtimeconfig.Report `env:"-"`
}
type ManagedKeyMetadata ¶
type ManagedKeyMetadata struct {
Value string `json:"value"`
Source string `json:"source"`
RollbackTarget string `json:"rollback_target,omitempty"`
}
ManagedKeyMetadata reports the effective value and source for one managed key.
type ManagedRuntimeMetadata ¶
type ManagedRuntimeMetadata struct {
Mode string `json:"mode"`
Authority string `json:"authority,omitempty"`
RegistryVersion string `json:"registry_version"`
SchemaVersion string `json:"schema_version"`
Keys map[string]ManagedKeyMetadata `json:"keys"`
}
ManagedRuntimeMetadata reports effective managed keys and their source layers.
type ManagedSettingStatus ¶
type ManagedSettingStatus struct {
Key string `json:"key"`
Label string `json:"label"`
Value string `json:"value"`
Source runtimeconfig.Source `json:"source"`
Access SettingAccess `json:"access"`
Drift bool `json:"drift,omitempty"`
RollbackTarget string `json:"rollback_target,omitempty"`
}
ManagedSettingStatus reports effective state for one managed-capable setting key.
type MetricsConfig ¶
type MetricsConfig struct {
Enabled bool `env:"PAGODA_METRICS_ENABLED" env-default:"true"`
Path string `env:"PAGODA_METRICS_PATH" env-default:"/metrics"`
Exporter string `env:"PAGODA_METRICS_EXPORTER" env-default:"prometheus"`
Format string `env:"PAGODA_METRICS_FORMAT" env-default:"prometheus-text"`
}
type OAuthConfig ¶
type OAuthConfig struct {
GitHub OAuthGitHubConfig
Google OAuthGoogleConfig
Discord OAuthDiscordConfig
}
type OAuthDiscordConfig ¶
type OAuthGitHubConfig ¶
type OAuthGoogleConfig ¶
type OperationalConstants ¶
type OperationalConstants struct {
NewsletterSignupEnabled bool `env:"PAGODA_APP_OPERATIONALCONSTANTS_NEWSLETTERSIGNUPENABLED,PAGODA_APP_OPERATIONALCONSTANTS_NEWSLETTER_SIGNUP_ENABLED"`
UserSignupEnabled bool `env:"PAGODA_APP_OPERATIONALCONSTANTS_USERSIGNUPENABLED,PAGODA_APP_OPERATIONALCONSTANTS_USERSIGNUPENABLED"`
UserSignupEnabledOnLandingPage bool `env:"PAGODA_APP_OPERATIONALCONSTANTS_USERSIGNUPENABLEDONLANDINGPAGE"`
QuestionInteractionValidLifetimeInDays int `env:"PAGODA_APP_OPERATIONALCONSTANTS_QUESTIONINTERACTIONVALIDLIFETIMEINDAYS"`
NotifEmojiDebounceTime time.Duration `env:"PAGODA_APP_OPERATIONALCONSTANTS_NOTIFEMOJIDEBOUNCETIME"`
NotifyNewAnswerFromUnansweredQuestionDebounceTime time.Duration `env:"PAGODA_APP_OPERATIONALCONSTANTS_NOTIFYNEWANSWERFROMUNANSWEREDQUESTIONDEBOUNCETIME"`
MinAnswerLen int `env:"PAGODA_APP_OPERATIONALCONSTANTS_MINANSWERLEN"`
PaymentsEnabled bool `env:"PAGODA_APP_OPERATIONALCONSTANTS_PAYMENTSENABLED"`
ProTrialTimespanInDays int `env:"PAGODA_APP_OPERATIONALCONSTANTS_PROTRIALTIMESPANINDAYS"`
ProductProCode string `env:"PAGODA_APP_OPERATIONALCONSTANTS_PRODUCTPROCODE"`
ProductProPrice float32 `env:"PAGODA_APP_OPERATIONALCONSTANTS_PRODUCTPROPRICE"`
PaymentFailedGracePeriodInDays int `env:"PAGODA_APP_OPERATIONALCONSTANTS_PAYMENTFAILEDGRACEPERIODINDAYS"`
DeleteStaleNotificationAfterDays int `env:"PAGODA_APP_OPERATIONALCONSTANTS_DELETESTALENOTIFICATIONAFTERDAYS"`
MaxLikedQuestionHistoryFreePlan int `env:"PAGODA_APP_OPERATIONALCONSTANTS_MAXLIKEDQUESTIONHISTORYFREEPLAN"`
}
type PasswordTokenConfig ¶
type PhoneConfig ¶
type ProcessesConfig ¶
type RecommenderConfig ¶
type RecommenderConfig struct {
NumProfilesToMatchAtOnce int `env:"PAGODA_RECOMMENDER_NUMPROFILESTOMATCHATONCE"`
}
type RuntimeConfig ¶
type RuntimeConfig struct {
Profile runtimeprofile `env:"PAGODA_RUNTIME_PROFILE"`
}
type RuntimeMetadata ¶
type RuntimeMetadata struct {
Database DatabaseRuntimeMetadata `json:"database"`
Managed ManagedRuntimeMetadata `json:"managed"`
}
RuntimeMetadata reports normalized runtime capability metadata for status/reporting surfaces.
type SecurityConfig ¶
type SecurityConfig struct {
Headers SecurityHeadersConfig
}
type SecurityHeadersConfig ¶
type SettingAccess ¶
type SettingAccess string
SettingAccess defines whether a setting is locally editable, locked, or controlled externally.
const ( SettingAccessEditable SettingAccess = "editable" SettingAccessReadOnly SettingAccess = "read-only" SettingAccessExternallyManaged SettingAccess = "externally-managed" )
type StorageConfig ¶
type StorageConfig struct {
Driver storagedriver `env:"PAGODA_STORAGE_DRIVER"`
LocalStoragePath string `env:"PAGODA_STORAGE_LOCALSTORAGEPATH" env-default:"./uploads"`
AppBucketName string `env:"PAGODA_STORAGE_APPBUCKETNAME"`
StaticFilesBucketName string `env:"PAGODA_STORAGE_STATICFILESBUCKETNAME"`
S3Endpoint string `env:"PAGODA_STORAGE_S3ENDPOINT"`
S3AccessKey string `env:"PAGODA_STORAGE_S3ACCESSKEY"`
S3SecretKey string `env:"PAGODA_STORAGE_S3SECRETKEY"`
S3UseSSL bool `env:"PAGODA_STORAGE_S3USESSL"`
ProfilePhotoMaxFileSizeMB int64 `env:"PAGODA_STORAGE_PROFILEPHOTOMAXFILESIZEMB"`
PhotosMaxFileSizeMB int64 `env:"PAGODA_STORAGE_PHOTOSMAXFILESIZEMB"`
}