handler.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. package updates
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "net/http"
  6. "time"
  7. "github.com/gorilla/websocket"
  8. "imuslab.com/arozos/mod/common"
  9. )
  10. func HandleUpdateCheckSize(w http.ResponseWriter, r *http.Request) {
  11. webpack, err := common.Mv(r, "webpack", true)
  12. if err != nil {
  13. common.SendErrorResponse(w, "Invalid or empty webpack download URL")
  14. return
  15. }
  16. binary, err := common.Mv(r, "binary", true)
  17. if err != nil {
  18. common.SendErrorResponse(w, "Invalid or empty binary download URL")
  19. return
  20. }
  21. bsize, wsize, err := GetUpdateSizes(binary, webpack)
  22. if err != nil {
  23. common.SendErrorResponse(w, "Failed to get update size: "+err.Error())
  24. return
  25. }
  26. js, _ := json.Marshal([]int{bsize, wsize})
  27. common.SendJSONResponse(w, string(js))
  28. }
  29. func HandleUpdateDownloadRequest(w http.ResponseWriter, r *http.Request) {
  30. webpack, err := common.Mv(r, "webpack", false)
  31. if err != nil {
  32. common.SendErrorResponse(w, "Invalid or empty webpack download URL")
  33. return
  34. }
  35. binary, err := common.Mv(r, "binary", false)
  36. if err != nil {
  37. common.SendErrorResponse(w, "Invalid or empty binary download URL")
  38. return
  39. }
  40. //Update the connection to websocket
  41. requireWebsocket, _ := common.Mv(r, "ws", false)
  42. if requireWebsocket == "true" {
  43. //Upgrade to websocket
  44. var upgrader = websocket.Upgrader{}
  45. upgrader.CheckOrigin = func(r *http.Request) bool { return true }
  46. c, err := upgrader.Upgrade(w, r, nil)
  47. if err != nil {
  48. common.SendErrorResponse(w, "Upgrade websocket failed: "+err.Error())
  49. return
  50. }
  51. type Progress struct {
  52. Stage int
  53. Progress float64
  54. StatusText string
  55. }
  56. err = DownloadUpdatesFromURL(binary, webpack, func(stage int, progress float64, statusText string) {
  57. thisProgress := Progress{
  58. Stage: stage,
  59. Progress: progress,
  60. StatusText: statusText,
  61. }
  62. js, _ := json.Marshal(thisProgress)
  63. c.WriteMessage(1, js)
  64. })
  65. if err != nil {
  66. //Finish with error
  67. c.WriteMessage(1, []byte("{\"error\":\""+err.Error()+"\""))
  68. } else {
  69. //Done without error
  70. c.WriteMessage(1, []byte("OK"))
  71. }
  72. //Close WebSocket connection after finished
  73. c.WriteControl(8, []byte{}, time.Now().Add(time.Second))
  74. c.Close()
  75. } else {
  76. //Just download and return ok after finish
  77. err = DownloadUpdatesFromURL(binary, webpack, func(stage int, progress float64, statusText string) {
  78. fmt.Println("Downloading Update, Stage: ", stage, " Progress: ", progress, " Status: ", statusText)
  79. })
  80. if err != nil {
  81. common.SendErrorResponse(w, err.Error())
  82. } else {
  83. common.SendOK(w)
  84. }
  85. }
  86. }
  87. /*
  88. func HandleLauncherRestart(w http.ResponseWriter, r *http.Request) {
  89. //Check if there is a launcher listening to port 25576
  90. resp, err := http.Get("http://127.0.0.1:25576/chk")
  91. if err != nil {
  92. common.SendErrorResponse(w, "No launcher found. Unable to restart")
  93. return
  94. }
  95. content, err := ioutil.ReadAll(resp.Body)
  96. if err != nil {
  97. common.SendErrorResponse(w, "Read launcher response failed")
  98. return
  99. }
  100. execute, _ := common.Mv(r, "exec", true)
  101. if execute == "true" && r.Method == http.MethodPost {
  102. //Do the update
  103. log.Println("REQUESTING LAUNCHER FOR UPDATE RESTART")
  104. common.SendOK(w)
  105. } else if execute == "true" {
  106. w.WriteHeader(http.StatusMethodNotAllowed)
  107. w.Write([]byte("405 - Method Not Allowed"))
  108. } else {
  109. //Return the launcher message
  110. common.SendTextResponse(w, string(content))
  111. }
  112. }
  113. */