mirror of
https://github.com/pikami/cosmium.git
synced 2025-02-02 22:18:38 +00:00
98 lines
2.8 KiB
Go
98 lines
2.8 KiB
Go
package config
|
|
|
|
import (
|
|
"flag"
|
|
"fmt"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/pikami/cosmium/internal/logger"
|
|
)
|
|
|
|
const (
|
|
DefaultAccountKey = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw=="
|
|
EnvPrefix = "COSMIUM_"
|
|
ExplorerBaseUrlLocation = "/_explorer"
|
|
)
|
|
|
|
func ParseFlags() ServerConfig {
|
|
host := flag.String("Host", "localhost", "Hostname")
|
|
port := flag.Int("Port", 8081, "Listen port")
|
|
explorerPath := flag.String("ExplorerDir", "", "Path to cosmos-explorer files")
|
|
tlsCertificatePath := flag.String("Cert", "", "Hostname")
|
|
tlsCertificateKey := flag.String("CertKey", "", "Hostname")
|
|
initialDataPath := flag.String("InitialData", "", "Path to JSON containing initial state")
|
|
accountKey := flag.String("AccountKey", DefaultAccountKey, "Account key for authentication")
|
|
disableAuthentication := flag.Bool("DisableAuth", false, "Disable authentication")
|
|
disableTls := flag.Bool("DisableTls", false, "Disable TLS, serve over HTTP")
|
|
persistDataPath := flag.String("Persist", "", "Saves data to given path on application exit")
|
|
logLevel := NewEnumValue("info", []string{"debug", "info", "error", "silent"})
|
|
flag.Var(logLevel, "LogLevel", fmt.Sprintf("Sets the logging level %s", logLevel.AllowedValuesList()))
|
|
|
|
flag.Parse()
|
|
setFlagsFromEnvironment()
|
|
|
|
config := ServerConfig{}
|
|
config.Host = *host
|
|
config.Port = *port
|
|
config.ExplorerPath = *explorerPath
|
|
config.TLS_CertificatePath = *tlsCertificatePath
|
|
config.TLS_CertificateKey = *tlsCertificateKey
|
|
config.InitialDataFilePath = *initialDataPath
|
|
config.PersistDataFilePath = *persistDataPath
|
|
config.DisableAuth = *disableAuthentication
|
|
config.DisableTls = *disableTls
|
|
config.AccountKey = *accountKey
|
|
config.LogLevel = logLevel.value
|
|
|
|
config.PopulateCalculatedFields()
|
|
|
|
return config
|
|
}
|
|
|
|
func (c *ServerConfig) PopulateCalculatedFields() {
|
|
c.DatabaseAccount = c.Host
|
|
c.DatabaseDomain = c.Host
|
|
c.DatabaseEndpoint = fmt.Sprintf("https://%s:%d/", c.Host, c.Port)
|
|
c.ExplorerBaseUrlLocation = ExplorerBaseUrlLocation
|
|
|
|
switch c.LogLevel {
|
|
case "debug":
|
|
logger.LogLevel = logger.LogLevelDebug
|
|
case "info":
|
|
logger.LogLevel = logger.LogLevelInfo
|
|
case "error":
|
|
logger.LogLevel = logger.LogLevelError
|
|
case "silent":
|
|
logger.LogLevel = logger.LogLevelSilent
|
|
default:
|
|
logger.LogLevel = logger.LogLevelInfo
|
|
}
|
|
}
|
|
|
|
func (c *ServerConfig) ApplyDefaultsToEmptyFields() {
|
|
if c.Host == "" {
|
|
c.Host = "localhost"
|
|
}
|
|
if c.Port == 0 {
|
|
c.Port = 8081
|
|
}
|
|
if c.AccountKey == "" {
|
|
c.AccountKey = DefaultAccountKey
|
|
}
|
|
}
|
|
|
|
func setFlagsFromEnvironment() (err error) {
|
|
flag.VisitAll(func(f *flag.Flag) {
|
|
name := EnvPrefix + strings.ToUpper(strings.Replace(f.Name, "-", "_", -1))
|
|
if value, ok := os.LookupEnv(name); ok {
|
|
err2 := flag.Set(f.Name, value)
|
|
if err2 != nil {
|
|
err = fmt.Errorf("failed setting flag from environment: %w", err2)
|
|
}
|
|
}
|
|
})
|
|
|
|
return
|
|
}
|