Add environment variable configuration

This commit is contained in:
Elara 2023-06-09 11:19:07 -07:00
parent a9a3a2094e
commit fed9e6527b
4 changed files with 30 additions and 18 deletions

1
go.mod
View File

@ -3,6 +3,7 @@ module go.elara.ws/lure-updater
go 1.20 go 1.20
require ( require (
github.com/caarlos0/env/v8 v8.0.0
github.com/go-git/go-git/v5 v5.7.0 github.com/go-git/go-git/v5 v5.7.0
github.com/pelletier/go-toml/v2 v2.0.8 github.com/pelletier/go-toml/v2 v2.0.8
github.com/spf13/pflag v1.0.5 github.com/spf13/pflag v1.0.5

2
go.sum
View File

@ -9,6 +9,8 @@ github.com/acomagu/bufpipe v1.0.4/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ
github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
github.com/caarlos0/env/v8 v8.0.0 h1:POhxHhSpuxrLMIdvTGARuZqR4Jjm8AYmoi/JKlcScs0=
github.com/caarlos0/env/v8 v8.0.0/go.mod h1:7K4wMY9bH0esiXSSHlfHLX5xKGQMnkH5Fk4TDSSSzfo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=

View File

@ -19,27 +19,27 @@
package config package config
type Config struct { type Config struct {
Git Git `toml:"git"` Git Git `toml:"git" envPrefix:"GIT_"`
Webhook Webhook `toml:"webhook"` Webhook Webhook `toml:"webhook" envPrefix:"WEBHOOK_"`
} }
type Git struct { type Git struct {
RepoDir string `toml:"repoDir"` RepoDir string `toml:"repoDir" env:"REPO_DIR"`
RepoURL string `toml:"repoURL"` RepoURL string `toml:"repoURL" env:"REPO_URL"`
Commit Commit `toml:"commit"` Commit Commit `toml:"commit" envPrefix:"COMMIT_"`
Credentials Credentials `toml:"credentials"` Credentials Credentials `toml:"credentials" envPrefix:"CREDENTIALS_"`
} }
type Credentials struct { type Credentials struct {
Username string Username string `toml:"username" env:"USERNAME"`
Password string Password string `toml:"password" env:"PASSWORD"`
} }
type Commit struct { type Commit struct {
Name string `toml:"name"` Name string `toml:"name" env:"NAME"`
Email string `toml:"email"` Email string `toml:"email" env:"EMAIL"`
} }
type Webhook struct { type Webhook struct {
PasswordHash string `toml:"pwd_hash"` PasswordHash string `toml:"pwd_hash" env:"PASSWORD_HASH"`
} }

23
main.go
View File

@ -25,6 +25,7 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/caarlos0/env/v8"
"github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5"
"github.com/pelletier/go-toml/v2" "github.com/pelletier/go-toml/v2"
"github.com/spf13/pflag" "github.com/spf13/pflag"
@ -49,6 +50,7 @@ func main() {
pluginDir := pflag.StringP("plugin-dir", "p", "/etc/lure-updater/plugins", "Path to plugin directory") pluginDir := pflag.StringP("plugin-dir", "p", "/etc/lure-updater/plugins", "Path to plugin directory")
serverAddr := pflag.StringP("address", "a", ":8080", "Webhook server address") serverAddr := pflag.StringP("address", "a", ":8080", "Webhook server address")
genHash := pflag.BoolP("gen-hash", "g", false, "Generate a password hash for webhooks") genHash := pflag.BoolP("gen-hash", "g", false, "Generate a password hash for webhooks")
useEnv := pflag.BoolP("use-env", "E", false, "Use environment variables for configuration")
pflag.Parse() pflag.Parse()
if *genHash { if *genHash {
@ -71,13 +73,20 @@ func main() {
} }
cfg := &config.Config{} cfg := &config.Config{}
fl, err := os.Open(*configPath) if *useEnv {
if err != nil { err = env.Parse(cfg)
log.Fatal("Error opening config file").Err(err).Send() if err != nil {
} log.Fatal("Error parsing environment variables").Err(err).Send()
err = toml.NewDecoder(fl).Decode(cfg) }
if err != nil { } else {
log.Fatal("Error decoding config file").Err(err).Send() fl, err := os.Open(*configPath)
if err != nil {
log.Fatal("Error opening config file").Err(err).Send()
}
err = toml.NewDecoder(fl).Decode(cfg)
if err != nil {
log.Fatal("Error decoding config file").Err(err).Send()
}
} }
if _, err := os.Stat(cfg.Git.RepoDir); os.IsNotExist(err) { if _, err := os.Stat(cfg.Git.RepoDir); os.IsNotExist(err) {