diff --git a/cozy-oauth-proxy b/cozy-oauth-proxy index 665cef01aaceacd4b768b43cd98468ec32d713e4..6468dd2954e8651fd15fab17b787f9f826467053 100755 Binary files a/cozy-oauth-proxy and b/cozy-oauth-proxy differ diff --git a/main.go b/main.go index 8eccee418ddb8eb035d32e131ca0c0f7c798cc5b..8d184d05ab97cea4fe40ccc4e5fa562d001a4b36 100644 --- a/main.go +++ b/main.go @@ -3,6 +3,7 @@ package main import ( "encoding/json" "flag" + "io" "io/ioutil" "net/http" "net/url" @@ -14,7 +15,9 @@ import ( ) var ( - httpPort = flag.Int("http_port", 80, "HTTP port to serve on (defaults to 80)") + httpPort = flag.Int("http_port", LookupEnvOrInt("HTTP_PORT", 80), "HTTP port to serve on (defaults to 80)") + logLevel = flag.String("loglevel", LookupEnvOrString("LOGLEVEL", "debug"), "log level (debug, info, warning, error) (defaults to debug)") + redirectURI = flag.String("redirect_uri", LookupEnvOrString("REDIRECT_URI", "https://oauth-proxy.wf.alpha.grandlyon.com/redirect"), "Redirect URI (defaults to https://oauth-proxy.wf.alpha.grandlyon.com/redirect)") ) type TokenResponse struct { @@ -28,6 +31,24 @@ type TokenResponse struct { UsagePointId string `json:"usage_points_id"` } +func LookupEnvOrString(key string, defaultVal string) string { + if val, ok := os.LookupEnv(key); ok { + return val + } + return defaultVal +} + +func LookupEnvOrInt(key string, defaultVal int) int { + if val, ok := os.LookupEnv(key); ok { + v, err := strconv.Atoi(val) + if err != nil { + log.Fatalf("LookupEnvOrInt[%s]: %v", key, err) + } + return v + } + return defaultVal +} + func main() { // Parse the flags flag.Parse() @@ -41,12 +62,28 @@ func main() { FullTimestamp: true, TimestampFormat: "2006-01-02 15:04:05", }) - // TODO(SBL): Level should be configurable via flag - //log.SetLevel(log.WarnLevel) - log.SetLevel(log.DebugLevel) + + // Configure log level + switch strings.ToLower(*logLevel) { + case "error": + log.SetLevel(log.ErrorLevel) + case "warning": + log.SetLevel(log.WarnLevel) + case "info": + log.SetLevel(log.InfoLevel) + case "debug": + log.SetLevel(log.DebugLevel) + default: + log.SetLevel(log.DebugLevel) + log.Fatalf("Unknown logging level %s. Choose between debug, info, warning or error.", *logLevel) + } mux := http.NewServeMux() - log.Info("Server started") + log.Infof("Starting Server on port %d\n", *httpPort) + + mux.HandleFunc("/healthcheck", func(w http.ResponseWriter, r *http.Request) { + io.WriteString(w, "OK\n") + }) mux.HandleFunc("/auth", func(w http.ResponseWriter, r *http.Request) { log.Debug("New auth request") @@ -56,7 +93,6 @@ func main() { clientId := query.Get("client_id") state := query.Get("state") cozyOrigin := query.Get("redirect_uri") // here we use the redirect_uri param to transmit our stack url - redirectUri := "https://oauth-proxy.wf.alpha.grandlyon.com/redirect" responseType := "code" // DEV API @@ -64,7 +100,7 @@ func main() { // PROD API authURL := "https://mon-compte-particulier.enedis.fr/dataconnect/v1/oauth2/authorize" - redirectUrl := authURL + "?client_id=" + clientId + "&duration=P6M&redirect_uri=" + redirectUri + "&response_type=" + responseType + "&state=" + state + "-" + cozyOrigin + redirectUrl := authURL + "?client_id=" + clientId + "&duration=P6M&redirect_uri=" + *redirectURI + "&response_type=" + responseType + "&state=" + state + "-" + cozyOrigin log.Debug("Redirect to - ", redirectUrl) http.Redirect(w, r, redirectUrl, 302)