AnthoLume/config/config.go

125 lines
3.0 KiB
Go
Raw Normal View History

2023-09-18 23:57:18 +00:00
package config
import (
"fmt"
2023-09-18 23:57:18 +00:00
"os"
"path"
"runtime/debug"
"strings"
log "github.com/sirupsen/logrus"
"github.com/snowzach/rotatefilehook"
2023-09-18 23:57:18 +00:00
)
type Config struct {
// Server Config
Version string
ListenPort string
// DB Configuration
DBType string
DBName string
// Data Paths
2023-09-18 23:57:18 +00:00
ConfigPath string
DataPath string
// Miscellaneous Settings
RegistrationEnabled bool
2023-10-07 01:25:56 +00:00
SearchEnabled bool
2023-10-31 10:28:22 +00:00
DemoMode bool
LogLevel string
// Cookie Settings
CookieSessionKey string
CookieSecure bool
CookieHTTPOnly bool
2023-09-18 23:57:18 +00:00
}
type UTCFormatter struct {
log.Formatter
}
func (u UTCFormatter) Format(e *log.Entry) ([]byte, error) {
e.Time = e.Time.UTC()
return u.Formatter.Format(e)
}
// TODO
var commitDetails = func() string {
commitDetails := "unknown"
if info, ok := debug.ReadBuildInfo(); ok {
for _, setting := range info.Settings {
if setting.Key == "vcs.revision" {
commitDetails = setting.Value[0:7]
} else if setting.Key == "vcs.modified" {
if setting.Value == "true" {
commitDetails += "-dirty"
}
}
}
}
return commitDetails
}()
2023-09-18 23:57:18 +00:00
func Load() *Config {
fmt.Println(commitDetails)
c := &Config{
2023-11-18 15:14:57 +00:00
Version: "0.0.1",
DBType: trimLowerString(getEnv("DATABASE_TYPE", "SQLite")),
2023-11-04 23:40:32 +00:00
DBName: trimLowerString(getEnv("DATABASE_NAME", "antholume")),
ConfigPath: getEnv("CONFIG_PATH", "/config"),
DataPath: getEnv("DATA_PATH", "/data"),
ListenPort: getEnv("LISTEN_PORT", "8585"),
RegistrationEnabled: trimLowerString(getEnv("REGISTRATION_ENABLED", "false")) == "true",
2023-10-31 10:28:22 +00:00
DemoMode: trimLowerString(getEnv("DEMO_MODE", "false")) == "true",
2023-10-07 01:25:56 +00:00
SearchEnabled: trimLowerString(getEnv("SEARCH_ENABLED", "false")) == "true",
CookieSessionKey: trimLowerString(getEnv("COOKIE_SESSION_KEY", "")),
LogLevel: trimLowerString(getEnv("LOG_LEVEL", "info")),
CookieSecure: trimLowerString(getEnv("COOKIE_SECURE", "true")) == "true",
CookieHTTPOnly: trimLowerString(getEnv("COOKIE_HTTP_ONLY", "true")) == "true",
2023-09-18 23:57:18 +00:00
}
// Log Level
logLevel, err := log.ParseLevel(c.LogLevel)
if err != nil {
logLevel = log.InfoLevel
}
// Log Formatter
ttyLogFormatter := &UTCFormatter{&log.TextFormatter{FullTimestamp: true}}
fileLogFormatter := &UTCFormatter{&log.TextFormatter{FullTimestamp: true, DisableColors: true}}
// Log Rotater
rotateFileHook, err := rotatefilehook.NewRotateFileHook(rotatefilehook.RotateFileConfig{
Filename: path.Join(c.ConfigPath, "logs/antholume.log"),
MaxSize: 50,
MaxBackups: 3,
MaxAge: 30,
Level: logLevel,
Formatter: fileLogFormatter,
})
if err != nil {
log.Fatal("[config.Load] Unable to initialize file rotate hook")
}
log.SetLevel(logLevel)
log.SetFormatter(ttyLogFormatter)
log.AddHook(rotateFileHook)
return c
2023-09-18 23:57:18 +00:00
}
func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok {
return value
}
return fallback
}
func trimLowerString(val string) string {
return strings.ToLower(strings.TrimSpace(val))
}