65 lines
1.4 KiB
Go
65 lines
1.4 KiB
Go
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
|
|
|
|
}
|