kopia lustrzana https://codeberg.org/nmkj/audon
131 wiersze
3.0 KiB
Go
131 wiersze
3.0 KiB
Go
package main
|
|
|
|
import (
|
|
"net/url"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
)
|
|
|
|
type (
|
|
AppConfig struct {
|
|
AppConfigBase
|
|
Livekit *LivekitConfig
|
|
MongoURL *url.URL
|
|
Database *DBConfig
|
|
Redis *RedisConfig
|
|
}
|
|
|
|
AppConfigBase struct {
|
|
SeesionSecret string `validate:"required,ascii"`
|
|
LocalDomain string `validate:"required,hostname|hostname_port"`
|
|
Environment string `validate:"printascii"`
|
|
}
|
|
|
|
LivekitConfig struct {
|
|
APIKey string `validate:"required,ascii"`
|
|
APISecret string `validate:"required,ascii"`
|
|
Host string `validate:"required,hostname|hostname_port"`
|
|
LocalDomain string `validate:"required,hostname|hostname_port"`
|
|
URL *url.URL
|
|
}
|
|
|
|
DBConfig struct {
|
|
User string `validate:"required,alphanum"`
|
|
Password string `validate:"required,ascii"`
|
|
Host string `validare:"required,hostname_port"`
|
|
Name string `validate:"required,alphanum"`
|
|
}
|
|
|
|
RedisConfig struct {
|
|
Host string `validate:"required,hostname_port"`
|
|
User string `validate:"printascii"`
|
|
Password string `validate:"printascii"`
|
|
}
|
|
)
|
|
|
|
const (
|
|
SESSION_NAME = "session-id"
|
|
SESSION_DATASTORE_NAME = "data"
|
|
)
|
|
|
|
func loadConfig(envname string) (*AppConfig, error) {
|
|
if envname == "" {
|
|
envname = "development"
|
|
}
|
|
|
|
// Set values in .env files to environment variables
|
|
if err := godotenv.Load(".env." + envname + ".local"); err != nil {
|
|
return nil, err
|
|
}
|
|
if _, err := os.Stat(".env"); err == nil {
|
|
if err := godotenv.Load(".env"); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
var appConf AppConfig
|
|
|
|
// Setup base config
|
|
basicConf := AppConfigBase{
|
|
SeesionSecret: os.Getenv("SESSION_SECRET"),
|
|
LocalDomain: os.Getenv("LOCAL_DOMAIN"),
|
|
Environment: envname,
|
|
}
|
|
if basicConf.SeesionSecret == "" {
|
|
basicConf.SeesionSecret = "dev"
|
|
}
|
|
if err := mainValidator.Struct(&basicConf); err != nil {
|
|
return nil, err
|
|
}
|
|
appConf.AppConfigBase = basicConf
|
|
|
|
// Setup MongoDB config
|
|
dbconf := &DBConfig{
|
|
User: os.Getenv("DB_USER"),
|
|
Password: os.Getenv("DB_PASS"),
|
|
Host: os.Getenv("DB_HOST"),
|
|
Name: os.Getenv("DB_NAME"),
|
|
}
|
|
if err := mainValidator.Struct(dbconf); err != nil {
|
|
return nil, err
|
|
}
|
|
appConf.Database = dbconf
|
|
mongoURL := &url.URL{
|
|
Scheme: "mongodb",
|
|
User: url.UserPassword(dbconf.User, dbconf.Password),
|
|
Host: dbconf.Host,
|
|
}
|
|
appConf.MongoURL = mongoURL
|
|
|
|
// Setup Redis config
|
|
redisConf := &RedisConfig{
|
|
Host: os.Getenv("REDIS_HOST"),
|
|
User: os.Getenv("REDIS_USER"),
|
|
Password: os.Getenv("REDIS_PASS"),
|
|
}
|
|
if err := mainValidator.Struct(redisConf); err != nil {
|
|
return nil, err
|
|
}
|
|
appConf.Redis = redisConf
|
|
|
|
// Setup LiveKit config
|
|
lkConf := &LivekitConfig{
|
|
APIKey: os.Getenv("LIVEKIT_API_KEY"),
|
|
APISecret: os.Getenv("LIVEKIT_API_SECRET"),
|
|
Host: os.Getenv("LIVEKIT_HOST"),
|
|
LocalDomain: os.Getenv("LIVEKIT_LOCAL_DOMAIN"),
|
|
}
|
|
if err := mainValidator.Struct(lkConf); err != nil {
|
|
return nil, err
|
|
}
|
|
lkURL := &url.URL{
|
|
Scheme: "https",
|
|
Host: lkConf.LocalDomain,
|
|
}
|
|
lkConf.URL = lkURL
|
|
appConf.Livekit = lkConf
|
|
|
|
return &appConf, nil
|
|
}
|