controller.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package controller
  2. import (
  3. "github.com/gravitl/netmaker/mongoconn"
  4. "os/signal"
  5. "os"
  6. "fmt"
  7. "context"
  8. "net/http"
  9. "github.com/gorilla/mux"
  10. "github.com/gorilla/handlers"
  11. "sync"
  12. "github.com/gravitl/netmaker/config"
  13. )
  14. func HandleRESTRequests(wg *sync.WaitGroup) {
  15. defer wg.Done()
  16. r := mux.NewRouter()
  17. // Currently allowed dev origin is all. Should change in prod
  18. // should consider analyzing the allowed methods further
  19. headersOk := handlers.AllowedHeaders([]string{"Access-Control-Allow-Origin", "X-Requested-With", "Content-Type", "authorization"})
  20. originsOk := handlers.AllowedOrigins([]string{config.Config.Server.AllowedOrigin})
  21. methodsOk := handlers.AllowedMethods([]string{"GET", "PUT", "POST", "DELETE"})
  22. nodeHandlers(r)
  23. userHandlers(r)
  24. groupHandlers(r)
  25. fileHandlers(r)
  26. serverHandlers(r)
  27. port := config.Config.Server.ApiPort
  28. if os.Getenv("API_PORT") != "" {
  29. port = os.Getenv("API_PORT")
  30. }
  31. srv := &http.Server{Addr: ":" + port, Handler: handlers.CORS(originsOk, headersOk, methodsOk)(r)}
  32. go func(){
  33. err := srv.ListenAndServe()
  34. //err := http.ListenAndServe(":" + port,
  35. //handlers.CORS(originsOk, headersOk, methodsOk)(r))
  36. if err != nil {
  37. fmt.Println(err)
  38. }
  39. }()
  40. fmt.Println("REST Server succesfully 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. fmt.Println("Stopping the REST server...")
  50. srv.Shutdown(context.TODO())
  51. fmt.Println("REST Server closed.")
  52. mongoconn.Client.Disconnect(context.TODO())
  53. }