Files
tgvpn/internal/config/config.go
T

66 lines
2.1 KiB
Go

package config
import (
"fmt"
"os"
"strconv"
"strings"
)
type Config struct {
BotToken string
BotDebug bool
TelegramAdminID int64
RemnawaveName string
RemnawaveURL string
RemnawaveToken string
RemnawaveCaddy string
RemnawaveSubscription string
}
func Load() (*Config, error) {
token := strings.TrimSpace(os.Getenv("BOT_TOKEN"))
if token == "" {
return nil, fmt.Errorf("BOT_TOKEN не задан")
}
adminID, err := strconv.ParseInt(strings.TrimSpace(os.Getenv("TELEGRAM_ADMIN_ID")), 10, 64)
if err != nil || adminID <= 0 {
return nil, fmt.Errorf("TELEGRAM_ADMIN_ID не задан или неверный")
}
panelURL := strings.TrimRight(strings.TrimSpace(os.Getenv("REMNAWAVE_PANEL_URL")), "/")
if panelURL == "" {
return nil, fmt.Errorf("REMNAWAVE_PANEL_URL не задан")
}
if !strings.HasPrefix(panelURL, "http://") && !strings.HasPrefix(panelURL, "https://") {
return nil, fmt.Errorf("REMNAWAVE_PANEL_URL должен начинаться с http:// или https://")
}
panelToken := strings.TrimSpace(os.Getenv("REMNAWAVE_API_TOKEN"))
if panelToken == "" {
return nil, fmt.Errorf("REMNAWAVE_API_TOKEN не задан (создайте в панели: Settings → API Tokens)")
}
name := strings.TrimSpace(os.Getenv("REMNAWAVE_PANEL_NAME"))
if name == "" {
name = "Панель 1"
}
subURL := strings.TrimRight(strings.TrimSpace(os.Getenv("REMNAWAVE_SUBSCRIPTION_URL")), "/")
if subURL != "" && !strings.HasPrefix(subURL, "http://") && !strings.HasPrefix(subURL, "https://") {
return nil, fmt.Errorf("REMNAWAVE_SUBSCRIPTION_URL должен начинаться с http:// или https://")
}
return &Config{
BotToken: token,
BotDebug: strings.EqualFold(strings.TrimSpace(os.Getenv("BOT_DEBUG")), "true"),
TelegramAdminID: adminID,
RemnawaveName: name,
RemnawaveURL: panelURL,
RemnawaveToken: panelToken,
RemnawaveCaddy: strings.TrimSpace(os.Getenv("REMNAWAVE_CADDY_TOKEN")),
RemnawaveSubscription: subURL,
}, nil
}