mirror of
https://github.com/rjNemo/rentease.git
synced 2026-06-10 04:36:50 +00:00
Introduce Stripe integration for automatic payment ingestion and refund tracking. Adds new fields to the payment model for Stripe IDs and status, Stripe client driver, sync service, cron job, manual API endpoint, and public webhook handler for real-time updates. Includes tests and documentation. Manual cash entry remains supported.
70 lines
2.6 KiB
Go
70 lines
2.6 KiB
Go
package config
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/joho/godotenv"
|
|
"github.com/sethvargo/go-envconfig"
|
|
)
|
|
|
|
// Config holds the application configuration settings loaded from environment variables
|
|
type Config struct {
|
|
// App
|
|
// 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"`
|
|
// Debug enables debug mode when true
|
|
Debug bool `env:"DEBUG, default=false"`
|
|
// LogLevel is the logging level (e.g., debug, info, warn, error)
|
|
LogLevel string `env:"LOG_LEVEL, default=info"`
|
|
// 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"`
|
|
// SentryDsn is the DSN for Sentry error reporting
|
|
SentryDsn string `env:"SENTRY_DSN"`
|
|
// Auth
|
|
// 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"`
|
|
// APIKey is the API access key
|
|
APIKey string `env:"API_KEY, 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"`
|
|
// StripeSecretKey is the API key used to authenticate with Stripe
|
|
StripeSecretKey string `env:"STRIPE_SECRET_KEY"`
|
|
// StripeWebhookSecret is the signing secret for validating Stripe webhooks
|
|
StripeWebhookSecret string `env:"STRIPE_WEBHOOK_SECRET"`
|
|
// StripeConnectAccount is the connected account ID when using Stripe Connect (optional)
|
|
StripeConnectAccount string `env:"STRIPE_CONNECT_ACCOUNT"`
|
|
}
|
|
|
|
// 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
|
|
}
|