upgrade.go 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package api
  2. import (
  3. "github.com/0xJacky/Nginx-UI/server/service"
  4. "github.com/gin-gonic/gin"
  5. "github.com/gorilla/websocket"
  6. "log"
  7. "net/http"
  8. "os"
  9. "path/filepath"
  10. )
  11. func GetRelease(c *gin.Context) {
  12. data, err := service.GetRelease()
  13. if err != nil {
  14. ErrHandler(c, err)
  15. return
  16. }
  17. c.JSON(http.StatusOK, data)
  18. }
  19. func GetCurrentVersion(c *gin.Context) {
  20. curVer, err := service.GetCurrentVersion()
  21. if err != nil {
  22. ErrHandler(c, err)
  23. return
  24. }
  25. c.JSON(http.StatusOK, curVer)
  26. }
  27. func PerformCoreUpgrade(c *gin.Context) {
  28. var upGrader = websocket.Upgrader{
  29. CheckOrigin: func(r *http.Request) bool {
  30. return true
  31. },
  32. }
  33. // upgrade http to websocket
  34. ws, err := upGrader.Upgrade(c.Writer, c.Request, nil)
  35. if err != nil {
  36. log.Println("[Error] PerformCoreUpgrade Upgrade", err)
  37. return
  38. }
  39. defer ws.Close()
  40. _ = ws.WriteJSON(gin.H{
  41. "status": "info",
  42. "message": "Initialing core upgrader",
  43. })
  44. u, err := service.NewUpgrader()
  45. if err != nil {
  46. _ = ws.WriteJSON(gin.H{
  47. "status": "error",
  48. "message": "Initial core upgrader error",
  49. })
  50. _ = ws.WriteJSON(gin.H{
  51. "status": "error",
  52. "message": err.Error(),
  53. })
  54. log.Println("[Error] PerformCoreUpgrade service.NewUpgrader()", err)
  55. return
  56. }
  57. _ = ws.WriteJSON(gin.H{
  58. "status": "info",
  59. "message": "Downloading latest release",
  60. })
  61. tarName, err := u.DownloadLatestRelease()
  62. if err != nil {
  63. _ = ws.WriteJSON(gin.H{
  64. "status": "error",
  65. "message": "Download latest release error",
  66. })
  67. _ = ws.WriteJSON(gin.H{
  68. "status": "error",
  69. "message": err.Error(),
  70. })
  71. log.Println("[Error] PerformCoreUpgrade DownloadLatestRelease", err)
  72. return
  73. }
  74. _ = ws.WriteJSON(gin.H{
  75. "status": "info",
  76. "message": "Performing core upgrade",
  77. })
  78. _ = os.Remove(u.Release.ExPath)
  79. // bye, overseer will restart nginx-ui
  80. err = u.PerformCoreUpgrade(filepath.Dir(u.Release.ExPath), tarName)
  81. if err != nil {
  82. _ = ws.WriteJSON(gin.H{
  83. "status": "error",
  84. "message": "Perform core upgrade error",
  85. })
  86. _ = ws.WriteJSON(gin.H{
  87. "status": "error",
  88. "message": err.Error(),
  89. })
  90. log.Println("[Error] PerformCoreUpgrade PerformCoreUpgrade", err)
  91. return
  92. }
  93. }