Adding secure init code for backend
[aaf/sms.git] / sms-service / src / sms / sms.go
index 98b2824..8b857ae 100644 (file)
 package main
 
 import (
+       "context"
        "log"
        "net/http"
+       "os"
+       "os/signal"
 
        smsauth "sms/auth"
        smsbackend "sms/backend"
        smsconfig "sms/config"
        smshandler "sms/handler"
+       smslogger "sms/log"
 )
 
 func main() {
+       // Initialize logger
+       smslogger.Init("")
+
        // Read Configuration File
        smsConf, err := smsconfig.ReadConfigFile("smsconfig.json")
        if err != nil {
@@ -40,15 +47,39 @@ func main() {
 
        httpRouter := smshandler.CreateRouter(backendImpl)
 
-       // TODO: Use CA certificate from AAF
-       tlsConfig := smsauth.GetTLSConfig(smsConf.CAFile)
-
        httpServer := &http.Server{
-               Handler:   httpRouter,
-               Addr:      ":10443",
-               TLSConfig: tlsConfig,
+               Handler: httpRouter,
+               Addr:    ":10443",
+       }
+
+       // 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
 }