/* * 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 }