102 lines
2.3 KiB
Go
102 lines
2.3 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strconv"
|
|
)
|
|
|
|
type Config struct {
|
|
Server ServerConfig
|
|
GRPC GRPCConfig
|
|
S3 S3Config
|
|
Auth AuthConfig
|
|
}
|
|
|
|
type ServerConfig struct {
|
|
Port string
|
|
Host string
|
|
}
|
|
|
|
type GRPCConfig struct {
|
|
AuthServiceAddr string
|
|
UserServiceAddr string
|
|
CompetitionServiceAddr string
|
|
TaskServiceAddr string
|
|
SubmissionServiceAddr string
|
|
ResultsServiceAddr string
|
|
ReviewServiceAddr string
|
|
AchievementsServiceAddr string
|
|
}
|
|
|
|
type S3Config struct {
|
|
AccessKeyID string
|
|
SecretAccessKey string
|
|
Region string
|
|
Bucket string
|
|
Endpoint string
|
|
}
|
|
|
|
type AuthConfig struct {
|
|
JWTSecret string
|
|
}
|
|
|
|
func Load() (*Config, error) {
|
|
cfg := &Config{
|
|
Server: ServerConfig{
|
|
Port: getEnv("SERVER_PORT", "8080"),
|
|
Host: getEnv("SERVER_HOST", "0.0.0.0"),
|
|
},
|
|
GRPC: GRPCConfig{
|
|
AuthServiceAddr: getEnvRequired("AUTH_SERVICE_ADDR"),
|
|
UserServiceAddr: getEnvRequired("USER_SERVICE_ADDR"),
|
|
CompetitionServiceAddr: getEnvRequired("COMPETITION_SERVICE_ADDR"),
|
|
TaskServiceAddr: getEnvRequired("TASK_SERVICE_ADDR"),
|
|
SubmissionServiceAddr: getEnvRequired("SUBMISSION_SERVICE_ADDR"),
|
|
ResultsServiceAddr: getEnvRequired("RESULTS_SERVICE_ADDR"),
|
|
ReviewServiceAddr: getEnvRequired("REVIEW_SERVICE_ADDR"),
|
|
AchievementsServiceAddr: getEnvRequired("ACHIEVEMENTS_SERVICE_ADDR"),
|
|
},
|
|
S3: S3Config{
|
|
AccessKeyID: getEnvRequired("AWS_ACCESS_KEY_ID"),
|
|
SecretAccessKey: getEnvRequired("AWS_SECRET_ACCESS_KEY"),
|
|
Region: getEnvRequired("AWS_REGION"),
|
|
Bucket: getEnvRequired("S3_BUCKET"),
|
|
Endpoint: getEnv("S3_ENDPOINT", ""),
|
|
},
|
|
Auth: AuthConfig{
|
|
JWTSecret: getEnv("JWT_SECRET", ""),
|
|
},
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
func getEnv(key, defaultValue string) string {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
return value
|
|
}
|
|
|
|
func getEnvRequired(key string) string {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
panic(fmt.Sprintf("required environment variable %s is not set", key))
|
|
}
|
|
return value
|
|
}
|
|
|
|
func getEnvAsInt(key string, defaultValue int) int {
|
|
valueStr := os.Getenv(key)
|
|
if valueStr == "" {
|
|
return defaultValue
|
|
}
|
|
value, err := strconv.Atoi(valueStr)
|
|
if err != nil {
|
|
return defaultValue
|
|
}
|
|
return value
|
|
}
|