83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package config
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
EnvListenAddr = "SUB2API_CRM_LISTEN_ADDR"
|
|
EnvSQLiteDSN = "SUB2API_CRM_SQLITE_DSN"
|
|
EnvAdminToken = "SUB2API_CRM_ADMIN_TOKEN"
|
|
|
|
DefaultListenAddr = ":8080"
|
|
DefaultSQLiteDSN = "file:sub2api-cn-relay-manager.db?_foreign_keys=on&_busy_timeout=5000"
|
|
)
|
|
|
|
type ServerConfig struct {
|
|
ListenAddr string
|
|
}
|
|
|
|
type DatabaseConfig struct {
|
|
SQLiteDSN string
|
|
}
|
|
|
|
type StartupConfig struct {
|
|
Server ServerConfig
|
|
Database DatabaseConfig
|
|
}
|
|
|
|
func LoadStartupFromEnv() (StartupConfig, error) {
|
|
return loadStartupFromLookupEnv(os.LookupEnv)
|
|
}
|
|
|
|
func loadStartupFromLookupEnv(lookup func(string) (string, bool)) (StartupConfig, error) {
|
|
cfg := StartupConfig{
|
|
Server: ServerConfig{
|
|
ListenAddr: readOptionalEnv(lookup, EnvListenAddr, DefaultListenAddr),
|
|
},
|
|
Database: DatabaseConfig{
|
|
SQLiteDSN: readOptionalEnv(lookup, EnvSQLiteDSN, DefaultSQLiteDSN),
|
|
},
|
|
}
|
|
|
|
return cfg, nil
|
|
}
|
|
|
|
func LoadAdminTokenFromEnv() (string, error) {
|
|
return loadAdminTokenFromLookupEnv(os.LookupEnv)
|
|
}
|
|
|
|
func loadAdminTokenFromLookupEnv(lookup func(string) (string, bool)) (string, error) {
|
|
token := strings.TrimSpace(readRequiredEnv(lookup, EnvAdminToken))
|
|
if token == "" {
|
|
return "", fmt.Errorf("%s is required", EnvAdminToken)
|
|
}
|
|
|
|
return token, nil
|
|
}
|
|
|
|
func readOptionalEnv(lookup func(string) (string, bool), key string, defaultValue string) string {
|
|
value, ok := lookup(key)
|
|
if !ok {
|
|
return defaultValue
|
|
}
|
|
|
|
value = strings.TrimSpace(value)
|
|
if value == "" {
|
|
return defaultValue
|
|
}
|
|
|
|
return value
|
|
}
|
|
|
|
func readRequiredEnv(lookup func(string) (string, bool), key string) string {
|
|
value, ok := lookup(key)
|
|
if !ok {
|
|
return ""
|
|
}
|
|
|
|
return value
|
|
}
|