upgrade.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  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": "Initialing core upgrader error",
  49. })
  50. log.Println("[Error] PerformCoreUpgrade service.NewUpgrader()", err)
  51. return
  52. }
  53. _ = ws.WriteJSON(gin.H{
  54. "status": "info",
  55. "message": "Downloading latest release",
  56. })
  57. tarName, err := u.DownloadLatestRelease()
  58. if err != nil {
  59. _ = ws.WriteJSON(gin.H{
  60. "status": "error",
  61. "message": "Download latest release error",
  62. })
  63. log.Println("[Error] PerformCoreUpgrade DownloadLatestRelease", err)
  64. return
  65. }
  66. _ = ws.WriteJSON(gin.H{
  67. "status": "info",
  68. "message": "Performing core upgrade",
  69. })
  70. _ = os.Remove(u.Release.ExPath)
  71. // bye, overseer will restart nginx-ui
  72. err = u.PerformCoreUpgrade(filepath.Dir(u.Release.ExPath), tarName)
  73. if err != nil {
  74. _ = ws.WriteJSON(gin.H{
  75. "status": "error",
  76. "message": "Perform core upgrade error",
  77. })
  78. log.Println("[Error] PerformCoreUpgrade PerformCoreUpgrade", err)
  79. return
  80. }
  81. }