controller.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package controller
  2. import (
  3. "context"
  4. "fmt"
  5. "net/http"
  6. "os"
  7. "os/signal"
  8. "sync"
  9. "time"
  10. "github.com/gorilla/handlers"
  11. "github.com/gorilla/mux"
  12. "github.com/gravitl/netmaker/logger"
  13. "github.com/gravitl/netmaker/servercfg"
  14. )
  15. // HandleRESTRequests - handles the rest requests
  16. func HandleRESTRequests(wg *sync.WaitGroup) {
  17. defer wg.Done()
  18. r := mux.NewRouter()
  19. // Currently allowed dev origin is all. Should change in prod
  20. // should consider analyzing the allowed methods further
  21. headersOk := handlers.AllowedHeaders([]string{"Access-Control-Allow-Origin", "X-Requested-With", "Content-Type", "authorization"})
  22. originsOk := handlers.AllowedOrigins([]string{servercfg.GetAllowedOrigin()})
  23. methodsOk := handlers.AllowedMethods([]string{"GET", "PUT", "POST", "DELETE"})
  24. nodeHandlers(r)
  25. userHandlers(r)
  26. networkHandlers(r)
  27. dnsHandlers(r)
  28. fileHandlers(r)
  29. serverHandlers(r)
  30. extClientHandlers(r)
  31. loggerHandlers(r)
  32. port := servercfg.GetAPIPort()
  33. srv := &http.Server{Addr: ":" + port, Handler: handlers.CORS(originsOk, headersOk, methodsOk)(r)}
  34. go func() {
  35. err := srv.ListenAndServe()
  36. if err != nil {
  37. logger.Log(0, err.Error())
  38. }
  39. }()
  40. logger.Log(0, "REST Server successfully started on port ", port, " (REST)")
  41. c := make(chan os.Signal)
  42. // Relay os.Interrupt to our channel (os.Interrupt = CTRL+C)
  43. // Ignore other incoming signals
  44. signal.Notify(c, os.Interrupt)
  45. // Block main routine until a signal is received
  46. // As long as user doesn't press CTRL+C a message is not passed and our main routine keeps running
  47. <-c
  48. // After receiving CTRL+C Properly stop the server
  49. logger.Log(0, "Stopping the REST server...")
  50. srv.Shutdown(context.TODO())
  51. logger.Log(0, "REST Server closed.")
  52. logger.DumpFile(fmt.Sprintf("data/netmaker.log.%s", time.Now().Format(logger.TimeFormatDay)))
  53. }