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 := smsconfig.ReadConfigFile("smsconfig.json")
+ smsConf, err := smsconfig.ReadConfigFile("smsconfig.json")
+ if err != nil {
+ log.Fatal(err)
+ }
- backendImpl := smsbackend.InitSecretBackend()
- httpRouter := smshandler.CreateRouter(backendImpl)
+ backendImpl, err := smsbackend.InitSecretBackend()
+ if err != nil {
+ log.Fatal(err)
+ }
- // TODO: Use CA certificate from AAF
- tlsConfig := smsauth.GetTLSConfig(smsConf.CAFile)
+ httpRouter := smshandler.CreateRouter(backendImpl)
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
}