deletedbot/config.go

65 lines
1.4 KiB
Go
Raw Normal View History

2024-10-28 16:57:26 +00:00
package main
import (
"github.com/joho/godotenv"
"log"
"os"
"reflect"
)
type config struct {
DbPath string `env:"DB_PATH"`
AdminUsername string `env:"ADMIN_USERNAME" required:"true"`
AdminPassword string `env:"ADMIN_PASSWORD" required:"true"`
Host string `env:"HOST"`
Port string `env:"PORT"`
WebhookDomain string `env:"WEBHOOK_DOMAIN" required:"true"`
RepoURL string `env:"REPO_URL"`
DemoBotURL string `env:"DEMO_BOT_URL"`
PrivacyURL string `env:"PRIVACY_URL"`
TermsURL string `env:"TERMS_URL"`
}
func getConfig() config {
err := godotenv.Load()
if err != nil {
log.Println("Couldn't load from dotenv:", err.Error())
}
conf := config{
DbPath: "db.sqlite",
Host: "0.0.0.0",
Port: "8080",
RepoURL: "https://git.massivebox.net/massivebox/deletedbot",
DemoBotURL: "https://t.me/DeletedBotDemoBot",
PrivacyURL: "privacy",
TermsURL: "terms",
}
v := reflect.ValueOf(&conf).Elem()
t := v.Type()
for i := 0; i < v.NumField(); i++ {
field := v.Field(i)
fieldType := t.Field(i)
envTag := fieldType.Tag.Get("env")
requiredTag := fieldType.Tag.Get("required")
if envTag != "" {
envValue := os.Getenv(envTag)
if envValue != "" {
field.SetString(envValue)
}
}
if requiredTag == "true" && field.String() == "" {
log.Panicf("Required environment variable %s is not set", envTag)
}
}
return conf
}