hosts.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package controller
  2. import (
  3. "encoding/json"
  4. "net/http"
  5. "github.com/gorilla/mux"
  6. "github.com/gravitl/netmaker/logger"
  7. "github.com/gravitl/netmaker/logic"
  8. "github.com/gravitl/netmaker/models"
  9. )
  10. func hostHandlers(r *mux.Router) {
  11. r.HandleFunc("/api/hosts", logic.SecurityCheck(false, http.HandlerFunc(getHosts))).Methods("GET")
  12. r.HandleFunc("/api/hosts", logic.SecurityCheck(true, http.HandlerFunc(updateHost))).Methods("PUT")
  13. r.HandleFunc("/api/hosts/{hostid}", logic.SecurityCheck(true, http.HandlerFunc(deleteHost))).Methods("DELETE")
  14. // r.HandleFunc("/api/hosts/{hostid}/{network}", logic.SecurityCheck(false, http.HandlerFunc(getHosts))).Methods("PUT")
  15. }
  16. // swagger:route GET /api/hosts hosts getHosts
  17. //
  18. // Lists all hosts.
  19. //
  20. // Schemes: https
  21. //
  22. // Security:
  23. // oauth
  24. //
  25. // Responses:
  26. // 200: getHostsSliceResponse
  27. func getHosts(w http.ResponseWriter, r *http.Request) {
  28. currentHosts, err := logic.GetAllHosts()
  29. if err != nil {
  30. logger.Log(0, r.Header.Get("user"), "failed to fetch hosts: ", err.Error())
  31. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  32. return
  33. }
  34. logger.Log(2, r.Header.Get("user"), "fetched all hosts")
  35. w.WriteHeader(http.StatusOK)
  36. json.NewEncoder(w).Encode(currentHosts)
  37. }
  38. // swagger:route PUT /api/hosts/{hostid} hosts updateHost
  39. //
  40. // Updates a Netclient host on Netmaker server.
  41. //
  42. // Schemes: https
  43. //
  44. // Security:
  45. // oauth
  46. //
  47. // Responses:
  48. // 200: updateHostResponse
  49. func updateHost(w http.ResponseWriter, r *http.Request) {
  50. var newHostData models.Host
  51. err := json.NewDecoder(r.Body).Decode(&newHostData)
  52. if err != nil {
  53. logger.Log(0, r.Header.Get("user"), "failed to update a host:", err.Error())
  54. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  55. return
  56. }
  57. // confirm host exists
  58. currHost, err := logic.GetHost(newHostData.ID.String())
  59. if err != nil {
  60. logger.Log(0, r.Header.Get("user"), "failed to update a host:", err.Error())
  61. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  62. return
  63. }
  64. logic.UpdateHost(&newHostData, currHost) // update the in memory struct values
  65. if err = logic.UpsertHost(&newHostData); err != nil {
  66. logger.Log(0, r.Header.Get("user"), "failed to update a host:", err.Error())
  67. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  68. return
  69. }
  70. logger.Log(2, r.Header.Get("user"), "updated host", newHostData.ID.String())
  71. w.WriteHeader(http.StatusOK)
  72. json.NewEncoder(w).Encode(newHostData)
  73. }
  74. // swagger:route DELETE /api/hosts/{hostid} hosts deleteHost
  75. //
  76. // Deletes a Netclient host from Netmaker server.
  77. //
  78. // Schemes: https
  79. //
  80. // Security:
  81. // oauth
  82. //
  83. // Responses:
  84. // 200: deleteHostResponse
  85. func deleteHost(w http.ResponseWriter, r *http.Request) {
  86. var params = mux.Vars(r)
  87. hostid := params["hostid"]
  88. // confirm host exists
  89. currHost, err := logic.GetHost(hostid)
  90. if err != nil {
  91. logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error())
  92. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  93. return
  94. }
  95. if err = logic.RemoveHost(currHost); err != nil {
  96. logger.Log(0, r.Header.Get("user"), "failed to delete a host:", err.Error())
  97. logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
  98. return
  99. }
  100. logger.Log(2, r.Header.Get("user"), "removed host", currHost.Name)
  101. w.WriteHeader(http.StatusOK)
  102. json.NewEncoder(w).Encode(currHost)
  103. }