From 8f5ab6cab3d21029d08e66c5ce99159bdd8a4c7f Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Sun, 9 Feb 2020 15:01:20 +0100 Subject: [PATCH] Config file logic --- .gitignore | 1 + main.go | 85 +++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 75 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 899c8b2..508fb34 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ guichet +config.json diff --git a/main.go b/main.go index ce280ba..84eb402 100644 --- a/main.go +++ b/main.go @@ -2,29 +2,92 @@ package main import ( "os" + "flag" + "fmt" "log" "net/http" - "fmt" + "io/ioutil" + "encoding/json" + "encoding/base64" + "crypto/rand" "github.com/gorilla/sessions" ) -var store = sessions.NewCookieStore([]byte(os.Getenv("SESSION_KEY"))) - -func handleHome(w http.ResponseWriter, r *http.Request) { - fmt.Fprintf(w, "Hello, world!") +type ConfigFile struct { + HttpBindAddr string `json:"http_bind_addr"` + SessionKey string `json:"session_key"` + LdapServerAddr string `json:"ldap_server_addr"` } -func main() { - http.HandleFunc("/", handleHome) +var configFlag = flag.String("config", "./config.json", "Configuration file path") - bind_addr := os.Getenv("HTTP_BIND_ADDR") - if bind_addr == "" { - bind_addr = ":9991" +func readConfig() ConfigFile { + key_bytes := make([]byte, 32) + n, err := rand.Read(key_bytes) + if err!= nil || n != 32 { + log.Fatal(err) } - err := http.ListenAndServe(bind_addr, nil) + config_file := ConfigFile{ + HttpBindAddr: ":9991", + SessionKey: base64.StdEncoding.EncodeToString(key_bytes), + LdapServerAddr: "127.0.0.1:389", + } + + _, err = os.Stat(*configFlag) + if os.IsNotExist(err) { + // Generate default config file + log.Printf("Generating default config file as %s", *configFlag) + + bytes, err := json.MarshalIndent(&config_file, "", " ") + if err != nil { + log.Fatal(err) + } + + err = ioutil.WriteFile(*configFlag, bytes, 0644) + if err != nil { + log.Fatal(err) + } + + return config_file + } + + if err != nil { + log.Fatal(err) + } + + bytes, err := ioutil.ReadFile(*configFlag) + if err != nil { + log.Fatal(err) + } + + err = json.Unmarshal(bytes, &config_file) + if err != nil { + log.Fatal(err) + } + + return config_file +} + +var store *sessions.CookieStore = nil + +func main() { + flag.Parse() + + config := readConfig() + store = sessions.NewCookieStore([]byte(config.SessionKey)) + + http.HandleFunc("/", handleHome) + + err := http.ListenAndServe(config.HttpBindAddr, nil) if err != nil { log.Fatal("Cannot start http server: ", err) } } + +// Page handlers ---- + +func handleHome(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, world!") +}