59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
package config
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"fmt"
|
|
"os"
|
|
)
|
|
|
|
type Config struct {
|
|
DatabaseURL string
|
|
JWTSecret string
|
|
EncryptionKey []byte
|
|
Port string
|
|
ScraperURL string
|
|
AdminEmail string
|
|
AdminPassword string
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
dbURL := os.Getenv("DATABASE_URL")
|
|
if dbURL == "" {
|
|
return nil, fmt.Errorf("DATABASE_URL is required")
|
|
}
|
|
|
|
jwtSecret := os.Getenv("JWT_SECRET")
|
|
if jwtSecret == "" {
|
|
return nil, fmt.Errorf("JWT_SECRET is required")
|
|
}
|
|
|
|
encHex := os.Getenv("ENCRYPTION_KEY")
|
|
if encHex == "" {
|
|
return nil, fmt.Errorf("ENCRYPTION_KEY is required")
|
|
}
|
|
encKey, err := hex.DecodeString(encHex)
|
|
if err != nil || len(encKey) != 32 {
|
|
return nil, fmt.Errorf("ENCRYPTION_KEY must be a valid 32-byte hex string")
|
|
}
|
|
|
|
port := os.Getenv("PORT")
|
|
if port == "" {
|
|
port = "8080"
|
|
}
|
|
|
|
scraperURL := os.Getenv("SCRAPER_URL")
|
|
if scraperURL == "" {
|
|
scraperURL = "http://scraper:3001"
|
|
}
|
|
|
|
return &Config{
|
|
DatabaseURL: dbURL,
|
|
JWTSecret: jwtSecret,
|
|
EncryptionKey: encKey,
|
|
Port: port,
|
|
ScraperURL: scraperURL,
|
|
AdminEmail: os.Getenv("ADMIN_EMAIL"),
|
|
AdminPassword: os.Getenv("ADMIN_PASSWORD"),
|
|
}, nil
|
|
}
|