You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.6 KiB
Go
74 lines
1.6 KiB
Go
package config
|
|
|
|
import (
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
type Config struct {
|
|
ServerPort string
|
|
BotToken string
|
|
DB DBConfig
|
|
Redis RedisConfig
|
|
Game GameConfig
|
|
Admin AdminConfig
|
|
}
|
|
|
|
type DBConfig struct {
|
|
Host string
|
|
Port string
|
|
User string
|
|
Password string
|
|
Name string
|
|
}
|
|
|
|
func (c DBConfig) DSN() string {
|
|
return "postgres://" + c.User + ":" + c.Password + "@" + c.Host + ":" + c.Port + "/" + c.Name + "?sslmode=disable"
|
|
}
|
|
|
|
type RedisConfig struct {
|
|
Addr string
|
|
}
|
|
|
|
type GameConfig struct {
|
|
TickRate time.Duration
|
|
}
|
|
|
|
type AdminConfig struct {
|
|
BasicAuthUsername string
|
|
BasicAuthPassword string
|
|
BasicAuthRealm string
|
|
}
|
|
|
|
func Load() *Config {
|
|
return &Config{
|
|
ServerPort: envOrDefault("SERVER_PORT", "8080"),
|
|
BotToken: os.Getenv("BOT_TOKEN"),
|
|
DB: DBConfig{
|
|
Host: envOrDefault("DB_HOST", "localhost"),
|
|
Port: envOrDefault("DB_PORT", "5432"),
|
|
User: envOrDefault("DB_USER", "autohero"),
|
|
Password: envOrDefault("DB_PASSWORD", "autohero"),
|
|
Name: envOrDefault("DB_NAME", "autohero"),
|
|
},
|
|
Redis: RedisConfig{
|
|
Addr: envOrDefault("REDIS_ADDR", "localhost:6379"),
|
|
},
|
|
Game: GameConfig{
|
|
TickRate: 100 * time.Millisecond, // 10 ticks per second
|
|
},
|
|
Admin: AdminConfig{
|
|
BasicAuthUsername: os.Getenv("ADMIN_BASIC_AUTH_USERNAME"),
|
|
BasicAuthPassword: os.Getenv("ADMIN_BASIC_AUTH_PASSWORD"),
|
|
BasicAuthRealm: envOrDefault("ADMIN_BASIC_AUTH_REALM", "AutoHero Admin"),
|
|
},
|
|
}
|
|
}
|
|
|
|
func envOrDefault(key, defaultVal string) string {
|
|
if val := os.Getenv(key); val != "" {
|
|
return val
|
|
}
|
|
return defaultVal
|
|
}
|