From b996a07cbdb979fd6d46ee9a766cbe42b3e6ef44 Mon Sep 17 00:00:00 2001 From: William Petit Date: Wed, 20 May 2020 19:23:01 +0200 Subject: [PATCH] Allow configuration overriding with environment variables --- cmd/server/main.go | 4 ++++ go.mod | 1 + go.sum | 4 ++++ internal/config/config.go | 35 +++++++++++++++++++++++------------ internal/route/logout.go | 4 +++- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index 29aa4c6..f6555cd 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -86,6 +86,10 @@ func main() { os.Exit(0) } + if err := config.WithEnvironment(conf); err != nil { + log.Fatalf("%+v", errors.Wrap(err, "could not override config with environment")) + } + // Create service container ctn, err := getServiceContainer(conf) if err != nil { diff --git a/go.mod b/go.mod index 8a13ac9..7959654 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module forge.cadoles.com/wpetit/goweb-oidc go 1.14 require ( + github.com/caarlos0/env/v6 v6.2.2 github.com/coreos/go-oidc v2.2.1+incompatible github.com/davecgh/go-spew v1.1.1 // indirect github.com/dchest/uniuri v0.0.0-20200228104902-7aecb25e1fe5 diff --git a/go.sum b/go.sum index 36a6b8d..5e0a8d8 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,9 @@ github.com/alecthomas/kong v0.1.17-0.20190424132513-439c674f7ae0/go.mod h1:+inYU github.com/alecthomas/kong v0.2.1-0.20190708041108-0548c6b1afae/go.mod h1:+inYUSluD+p4L8KdviBSgzcqEjUQOfC5fQDRFuc36lI= github.com/alecthomas/kong-hcl v0.1.8-0.20190615233001-b21fea9723c8/go.mod h1:MRgZdU3vrFd05IQ89AxUZ0aYdF39BYoNFa324SodPCA= github.com/alecthomas/repr v0.0.0-20180818092828-117648cd9897/go.mod h1:xTS7Pm1pD1mvyM075QCDSRqH6qRLXylzS24ZTpRiSzQ= +github.com/caarlos0/env v3.5.0+incompatible h1:Yy0UN8o9Wtr/jGHZDpCBLpNrzcFLLM2yixi/rBrKyJs= +github.com/caarlos0/env/v6 v6.2.2 h1:R0NIFXaB/LhwuGrjnsldzpnVNjFU/U+hTVHt+cq0yDY= +github.com/caarlos0/env/v6 v6.2.2/go.mod h1:3LpmfcAYCG6gCiSgDLaFR5Km1FRpPwFvBbRcjHar6Sw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk= @@ -116,6 +119,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8= gitlab.com/wpetit/goweb v0.0.0-20200418152305-76dea96a46ce h1:B3inZUHFr/FpA3jb+ZeSSHk3FSpB0xkQ0TjePhRokxw= diff --git a/internal/config/config.go b/internal/config/config.go index 8be9648..6f4074e 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -7,6 +7,7 @@ import ( "github.com/pkg/errors" + "github.com/caarlos0/env/v6" "gopkg.in/yaml.v2" ) @@ -32,19 +33,20 @@ func NewFromFile(filepath string) (*Config, error) { } type HTTPConfig struct { - Address string `yaml:"address"` - CookieAuthenticationKey string `yaml:"cookieAuthenticationKey"` - CookieEncryptionKey string `yaml:"cookieEncryptionKey"` - CookieMaxAge int `yaml:"cookieMaxAge"` - TemplateDir string `yaml:"templateDir"` - PublicDir string `yaml:"publicDir"` + Address string `yaml:"address" env:"HTTP_ADDRESS"` + CookieAuthenticationKey string `yaml:"cookieAuthenticationKey" env:"HTTP_COOKIE_AUTHENTICATION_KEY"` + CookieEncryptionKey string `yaml:"cookieEncryptionKey" env:"HTTP_COOKIE_ENCRYPTION_KEY"` + CookieMaxAge int `yaml:"cookieMaxAge" env:"HTTP_COOKIE_MAX_AGE"` + TemplateDir string `yaml:"templateDir" env:"HTTP_TEMPLATE_DIR"` + PublicDir string `yaml:"publicDir" env:"HTTP_PUBLIC_DIR"` } type OIDCConfig struct { - ClientID string `yaml:"clientId"` - ClientSecret string `yaml:"clientSecret"` - IssuerURL string `ymal:"issuerUrl"` - RedirectURL string `yaml:"redirectUrl"` + ClientID string `yaml:"clientId" env:"OIDC_CLIENT_ID"` + ClientSecret string `yaml:"clientSecret" env:"OIDC_CLIENT_SECRET"` + IssuerURL string `ymal:"issuerUrl" env:"OIDC_ISSUER_URL"` + RedirectURL string `yaml:"redirectUrl" env:"OIDC_REDIRECT_URL"` + PostLogoutRedirectURL string `yaml:"postLogoutRedirectURL" env:"OIDC_POST_LOGOUT_REDIRECT_URL"` } func NewDumpDefault() *Config { @@ -63,8 +65,9 @@ func NewDefault() *Config { PublicDir: "public", }, OIDC: OIDCConfig{ - IssuerURL: "http://localhost:4444/", - RedirectURL: "http://localhost:3002/oauth2/callback", + IssuerURL: "http://localhost:4444/", + RedirectURL: "http://localhost:3002/oauth2/callback", + PostLogoutRedirectURL: "http://localhost:3002", }, } } @@ -81,3 +84,11 @@ func Dump(config *Config, w io.Writer) error { return nil } + +func WithEnvironment(conf *Config) error { + if err := env.Parse(conf); err != nil { + return err + } + + return nil +} diff --git a/internal/route/logout.go b/internal/route/logout.go index a239175..e252b19 100644 --- a/internal/route/logout.go +++ b/internal/route/logout.go @@ -4,6 +4,7 @@ import ( "net/http" oidc "forge.cadoles.com/wpetit/goweb-oidc" + "forge.cadoles.com/wpetit/goweb-oidc/internal/config" "github.com/pkg/errors" "gitlab.com/wpetit/goweb/middleware/container" "gitlab.com/wpetit/goweb/service/session" @@ -11,6 +12,7 @@ import ( func handleLogout(w http.ResponseWriter, r *http.Request) { ctn := container.Must(r.Context()) + conf := config.Must(ctn) sess, err := session.Must(ctn).Get(w, r) if err != nil { @@ -23,5 +25,5 @@ func handleLogout(w http.ResponseWriter, r *http.Request) { client := oidc.Must(ctn) - client.Logout(w, r, "") + client.Logout(w, r, conf.OIDC.PostLogoutRedirectURL) }