mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-06 02:36:49 +00:00
Update the documentation for the Config struct to clarify that environment variables must be prefixed, e.g., with "APP_", to be recognized. This change improves clarity for users configuring the application.
65 lines
2.3 KiB
Go
65 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/joho/godotenv"
|
|
"github.com/sethvargo/go-envconfig"
|
|
)
|
|
|
|
// Config holds the application configuration settings loaded from environment variables
|
|
type Config struct {
|
|
// AppName is the name of the application
|
|
AppName string `env:"APP_NAME, default=rentease"`
|
|
// DatabaseUrl is the connection string for the database
|
|
DatabaseUrl string `env:"DATABASE_URL, required"`
|
|
// SecretKey is the secret key used for JWT token signing
|
|
SecretKey string `env:"SECRET_KEY, required"`
|
|
// SessionSecret is the secret key used for session signing
|
|
SessionSecret string `env:"SESSION_SECRET, required"`
|
|
// ApiKey is the API access key
|
|
ApiKey string `env:"API_KEY, required"`
|
|
// Admin is the email used to access the admin panel
|
|
Admin string `env:"ADMIN, required"`
|
|
// AdminSecret is the password used to access the admin panel
|
|
AdminSecret string `env:"ADMIN_SECRET, required"`
|
|
// Origins is the list of allowed origins
|
|
Origins []string `env:"ORIGINS, required"`
|
|
// Port is the HTTP server port number
|
|
Port int `env:"PORT, default=4200"`
|
|
// Debug enables debug mode when true
|
|
Debug bool `env:"DEBUG, default=false"`
|
|
// ParserBaseUrl is the base url for the parser service
|
|
ParserBaseUrl string `env:"PARSER_BASE_URL, required"`
|
|
// RequestTimeout is the maximum time allowed for a request. It prevents slowloris attacks that result in DDOS
|
|
RequestTimeout time.Duration `env:"REQUEST_TIMEOUT, default=5s"`
|
|
// SentryDsn is the DSN for Sentry error reporting
|
|
SentryDsn string `env:"SENTRY_DSN"`
|
|
}
|
|
|
|
// New creates a [Config] struct. It first parses the environment variables. You can use a .env file.
|
|
// Please note that the env variables must be prefixed, e.g. with "APP_" to be accounted for.
|
|
func New(ctx context.Context) (*Config, error) {
|
|
_ = godotenv.Load()
|
|
config := new(Config)
|
|
if err := envconfig.ProcessWith(ctx, &envconfig.Config{
|
|
Target: config,
|
|
Lookuper: envconfig.PrefixLookuper("APP_", envconfig.OsLookuper()),
|
|
}); err != nil {
|
|
return nil, fmt.Errorf("could not parse environment variables: %w", err)
|
|
}
|
|
|
|
return config, nil
|
|
}
|
|
|
|
// MustConfig is a helper that wraps [New] and panics if an error occurs.
|
|
// Use it in cases a [Config] is required and you want to exit the application if an error occurs.
|
|
func MustConfig(ctx context.Context) *Config {
|
|
c, err := New(ctx)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return c
|
|
}
|