Adding secure init code for backend
[aaf/sms.git] / sms-service / src / sms / sms.go
index eb0bebc..8b857ae 100644 (file)
 package main
 
 import (
+       "context"
        "log"
        "net/http"
+       "os"
+       "os/signal"
 
        smsauth "sms/auth"
        smsbackend "sms/backend"
@@ -29,7 +32,7 @@ import (
 
 func main() {
        // Initialize logger
-       smslogger.Init("sms.log")
+       smslogger.Init("")
 
        // Read Configuration File
        smsConf, err := smsconfig.ReadConfigFile("smsconfig.json")
@@ -44,18 +47,39 @@ func main() {
 
        httpRouter := smshandler.CreateRouter(backendImpl)
 
-       // TODO: Use CA certificate from AAF
-       tlsConfig, err := smsauth.GetTLSConfig(smsConf.CAFile)
-       if err != nil {
-               log.Fatal(err)
+       httpServer := &http.Server{
+               Handler: httpRouter,
+               Addr:    ":10443",
        }
 
-       httpServer := &http.Server{
-               Handler:   httpRouter,
-               Addr:      ":10443",
-               TLSConfig: tlsConfig,
+       // Listener for SIGINT so that it returns cleanly
+       connectionsClose := make(chan struct{})
+       go func() {
+               c := make(chan os.Signal, 1)
+               signal.Notify(c, os.Interrupt)
+               <-c
+               httpServer.Shutdown(context.Background())
+               close(connectionsClose)
+       }()
+
+       // Start in TLS mode by default
+       if smsConf.DisableTLS == true {
+               smslogger.WriteWarn("TLS is Disabled")
+               err = httpServer.ListenAndServe()
+       } else {
+               // TODO: Use CA certificate from AAF
+               tlsConfig, err := smsauth.GetTLSConfig(smsConf.CAFile)
+               if err != nil {
+                       log.Fatal(err)
+               }
+
+               httpServer.TLSConfig = tlsConfig
+               err = httpServer.ListenAndServeTLS(smsConf.ServerCert, smsConf.ServerKey)
+       }
+
+       if err != nil && err != http.ErrServerClosed {
+               log.Fatal(err)
        }
 
-       err = httpServer.ListenAndServeTLS(smsConf.ServerCert, smsConf.ServerKey)
-       log.Fatal(err)
+       <-connectionsClose
 }