Mercurial > gemma
diff config/config.go @ 408:ac23905e64b1
Improve WFS proxy a lot. It now generates signed re-writings.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Wed, 15 Aug 2018 15:55:41 +0200 |
parents | c6290776c65c |
children |
line wrap: on
line diff
--- a/config/config.go Wed Aug 15 15:14:47 2018 +0200 +++ b/config/config.go Wed Aug 15 15:55:41 2018 +0200 @@ -1,11 +1,16 @@ package config import ( + "crypto/sha256" + "fmt" "log" + "sync" homedir "github.com/mitchellh/go-homedir" "github.com/spf13/cobra" "github.com/spf13/viper" + + "gemma.intevation.de/gemma/common" ) // This is not part of the persistent config. @@ -44,6 +49,40 @@ func GeoServerPassword() string { return viper.GetString("geoserver-password") } func GeoServerTables() []string { return viper.GetStringSlice("geoserver-tables") } +var ( + proxyKeyOnce sync.Once + proxyKey []byte + + proxyPrefixOnce sync.Once + proxyPrefix string +) + +func ProxyKey() []byte { + fetchKey := func() { + if proxyKey == nil { + key := []byte(viper.GetString("proxy-key")) + if len(key) == 0 { + key = common.GenerateRandomKey(64) + } + hash := sha256.New() + hash.Write(key) + proxyKey = hash.Sum(nil) + } + } + proxyKeyOnce.Do(fetchKey) + return proxyKey +} + +func ProxyPrefix() string { + fetchPrefix := func() { + if proxyPrefix == "" { + proxyPrefix = fmt.Sprintf("http://%s:%d", WebHost(), WebPort()) + } + } + proxyPrefixOnce.Do(fetchPrefix) + return proxyPrefix +} + var RootCmd = &cobra.Command{ Use: "gemma", Short: "gemma is a server for waterway monitoring and management", @@ -115,6 +154,10 @@ str("geoserver-user", "admin", "GeoServer user") str("geoserver-password", "geoserver", "GeoServer password") strSl("geoserver-tables", geoTables, "tables to publish with GeoServer") + + str("proxy-key", "", `signing key for proxy URLs. Defaults to random key.`) + str("proxy-prefix", "", `URL prefix of proxy. Defaults to "http://${web-host}:${web-port}"`) + } func initConfig() {