83 lines
2.3 KiB
Go
83 lines
2.3 KiB
Go
/*
|
||
* Copyright (c) 2025, Антон Аксенов
|
||
* This file is part of iptvc project
|
||
* MIT License: https://git.axenov.dev/IPTV/iptvc/src/branch/master/LICENSE
|
||
*/
|
||
|
||
package config
|
||
|
||
import (
|
||
"os"
|
||
"strconv"
|
||
)
|
||
|
||
// Config описывает конфигурацию
|
||
type Config struct {
|
||
DebugMode bool
|
||
Redis RedisConfig
|
||
Http HttpConfig
|
||
}
|
||
|
||
// RedisConfig описывает конфигурацию подключения к Redis
|
||
type RedisConfig struct {
|
||
Host string
|
||
Port uint
|
||
Username string
|
||
Password string
|
||
Db uint
|
||
}
|
||
|
||
// HttpConfig описывает конфигурацию веб-сервера
|
||
type HttpConfig struct {
|
||
Host string
|
||
Port uint
|
||
}
|
||
|
||
// Init инициализирует объект конфигурации из переменных окружения
|
||
func Init() *Config {
|
||
return &Config{
|
||
DebugMode: readEnvBoolean("APP_DEBUG", false),
|
||
Redis: RedisConfig{
|
||
Host: readEnv("REDIS_HOST", ""),
|
||
Port: readEnvInteger("REDIS_PORT", 6379),
|
||
Username: readEnv("REDIS_USERNAME", ""),
|
||
Password: readEnv("REDIS_PASSWORD", ""),
|
||
Db: readEnvInteger("REDIS_DB", 0),
|
||
},
|
||
Http: HttpConfig{
|
||
Host: readEnv("HTTP_HOST", "0.0.0.0"),
|
||
Port: readEnvInteger("HTTP_PORT", 1380),
|
||
},
|
||
}
|
||
}
|
||
|
||
// readEnv считывает строковую переменную окружения с заданным именем или возвращает значение по умолчанию
|
||
func readEnv(key string, defaultValue string) string {
|
||
value, exists := os.LookupEnv(key)
|
||
if exists {
|
||
return value
|
||
}
|
||
|
||
return defaultValue
|
||
}
|
||
|
||
// readEnvBoolean считывает булеву переменную окружения с заданным именем или возвращает значение по умолчанию
|
||
func readEnvBoolean(name string, defaultValue bool) bool {
|
||
valStr := readEnv(name, "")
|
||
val, err := strconv.ParseBool(valStr)
|
||
if err == nil {
|
||
return val
|
||
}
|
||
return defaultValue
|
||
}
|
||
|
||
// readEnvInteger считывает целочисленную переменную окружения с заданным именем или возвращает значение по умолчанию
|
||
func readEnvInteger(name string, defaultValue uint) uint {
|
||
valueStr := readEnv(name, "")
|
||
value, err := strconv.Atoi(valueStr)
|
||
if err == nil {
|
||
return uint(value)
|
||
}
|
||
return defaultValue
|
||
}
|