diff --git a/ipe/config-example.json b/ipe/config-example.json index 4a29451..434e599 100644 --- a/ipe/config-example.json +++ b/ipe/config-example.json @@ -1,10 +1,15 @@ { "Host": ":8080", + "Encrypted": true, + "SSLHost": ":8090", + "SSLPrivateKey": "/home/ssl.key", + "SSLPublicKey": "/home/ssl.crt", "Apps": [ { "ApplicationDisabled": false, "Secret": "7ad3753142a6693b25b9", "Key": "278d525bdf162c739803", + "OnlySSL": false, "Name": "App 1", "AppID": "321", "UserEvents": true, @@ -15,6 +20,7 @@ "ApplicationDisabled": false, "Secret": "d6824d2fa32888931504", "Key": "c8b30f611ffb13202976", + "OnlySSL": false, "Name": "App 2", "AppID": "123", "UserEvents": true, diff --git a/ipe/config.go b/ipe/config.go index 85bf8e3..974ff23 100644 --- a/ipe/config.go +++ b/ipe/config.go @@ -14,6 +14,13 @@ type configFile struct { Host string // The host, eg: :8080 will start on 0.0.0.0:8080 User string Password string + + // SSL Configurations + Encrypted bool + SSLHost string + SSLPrivateKey string + SSLPublicKey string + Apps []*app } diff --git a/ipe/ipe.go b/ipe/ipe.go index 4e5db24..a26d941 100644 --- a/ipe/ipe.go +++ b/ipe/ipe.go @@ -10,30 +10,61 @@ import ( "net/http" "math/rand" "time" + + "github.com/gorilla/mux" + log "github.com/golang/glog" ) // Conf holds the global configuration state var conf configFile +func Run(conf configFile, router *mux.Router) chan error { + + errs := make(chan error) + + // Starting HTTP server + go func() { + log.Infof("Staring HTTP service on %s ...", conf.Host) + + if err := http.ListenAndServe(conf.Host, router); err != nil { + errs <- err + } + + }() + + if conf.Encrypted { + // Starting HTTPS server + go func() { + log.Infof("Staring HTTPS service on %s ...", conf.SSLHost) + if err := http.ListenAndServeTLS(conf.SSLHost, conf.SSLPublicKey, conf.SSLPrivateKey, router); err != nil { + errs <- err + } + }() + } + + return errs +} + // Start Parse the configuration file and starts the ipe server -func Start(configfile string) error { +func Start(configfile string) { rand.Seed(time.Now().Unix()) file, err := ioutil.ReadFile(configfile) if err != nil { - return err + log.Fatal(err) } if err := json.Unmarshal(file, &conf); err != nil { - return err + log.Fatal(err) } conf.Init() router := newRouter() - if err := http.ListenAndServe(conf.Host, router); err != nil { - return err - } + errs := Run(conf, router) - return nil + select { + case err := <-errs: + log.Errorf("Could not start serving service due to (error: %s)", err) + } } diff --git a/main.go b/main.go index 9e16226..6745b28 100644 --- a/main.go +++ b/main.go @@ -9,7 +9,6 @@ import ( "fmt" "github.com/dimiro1/ipe/ipe" - log "github.com/golang/glog" ) // Main function, initialze the system @@ -19,9 +18,7 @@ func main() { printBanner() - if err := ipe.Start(*filename); err != nil { - log.Fatal(err) - } + ipe.Start(*filename) } // Print a beautifull banner