mirror of
https://github.com/versia-pub/versia-go.git
synced 2025-12-06 06:28:18 +01:00
100 lines
1.9 KiB
Go
100 lines
1.9 KiB
Go
package config
|
|
|
|
import (
|
|
"git.devminer.xyz/devminer/unitel"
|
|
"github.com/joho/godotenv"
|
|
"github.com/rs/zerolog/log"
|
|
"net/url"
|
|
"os"
|
|
"regexp"
|
|
"strconv"
|
|
)
|
|
|
|
type Config struct {
|
|
Port int
|
|
|
|
PublicAddress *url.URL
|
|
Host string
|
|
SharedInboxURL *url.URL
|
|
|
|
InstanceName string
|
|
InstanceDescription *string
|
|
|
|
NATSURI string
|
|
NATSStreamName string
|
|
|
|
DatabaseURI string
|
|
|
|
Telemetry unitel.Opts
|
|
ForwardTracesTo *regexp.Regexp
|
|
}
|
|
|
|
var C Config
|
|
|
|
func Load() {
|
|
if err := godotenv.Load(".env.local", ".env"); err != nil {
|
|
log.Warn().Err(err).Msg("Failed to load .env file")
|
|
}
|
|
|
|
publicAddress, err := url.Parse(os.Getenv("PUBLIC_ADDRESS"))
|
|
if err != nil {
|
|
log.Fatal().Err(err).Msg("Failed to parse PUBLIC_ADDRESS")
|
|
}
|
|
|
|
var forwardTracesTo *regexp.Regexp
|
|
if raw := optionalEnvStr("FORWARD_TRACES_TO"); raw != nil {
|
|
if forwardTracesTo, err = regexp.Compile(*raw); err != nil {
|
|
log.Fatal().Err(err).Str("raw", *raw).Msg("Failed to compile")
|
|
}
|
|
}
|
|
|
|
C = Config{
|
|
Port: getEnvInt("VERSIA_PORT", 80),
|
|
|
|
PublicAddress: publicAddress,
|
|
Host: publicAddress.Host,
|
|
SharedInboxURL: publicAddress.ResolveReference(&url.URL{Path: "/api/inbox"}),
|
|
|
|
InstanceName: os.Getenv("INSTANCE_NAME"),
|
|
InstanceDescription: optionalEnvStr("INSTANCE_DESCRIPTION"),
|
|
|
|
NATSURI: os.Getenv("NATS_URI"),
|
|
NATSStreamName: getEnvStr("NATS_STREAM_NAME", "versia-go"),
|
|
DatabaseURI: os.Getenv("DATABASE_URI"),
|
|
|
|
ForwardTracesTo: forwardTracesTo,
|
|
Telemetry: unitel.ParseOpts("versia-go"),
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func optionalEnvStr(key string) *string {
|
|
value := os.Getenv(key)
|
|
if value == "" {
|
|
return nil
|
|
}
|
|
return &value
|
|
}
|
|
|
|
func getEnvStr(key, default_ string) string {
|
|
if value, ok := os.LookupEnv(key); ok {
|
|
return value
|
|
}
|
|
|
|
return default_
|
|
}
|
|
|
|
func getEnvInt(key string, default_ int) int {
|
|
if value, ok := os.LookupEnv(key); ok {
|
|
parsed, err := strconv.Atoi(value)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return parsed
|
|
}
|
|
|
|
return default_
|
|
}
|