Files
SafeLine/management/webserver/api/common.go
2024-07-04 17:54:34 +08:00

99 lines
2.9 KiB
Go

package api
import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"strings"
"github.com/gin-gonic/gin"
"github.com/rogpeppe/go-internal/semver"
"chaitin.cn/patronus/safeline-2/management/webserver/api/response"
"chaitin.cn/patronus/safeline-2/management/webserver/pkg/config"
"chaitin.cn/patronus/safeline-2/management/webserver/pkg/constants"
"chaitin.cn/patronus/safeline-2/management/webserver/utils"
)
const VersionInfoEntrypoint = "/release/latest/version.json"
type idsRequest struct {
IDs []uint `json:"ids" form:"ids"`
}
type pageRequest struct {
Page int `json:"page" form:"page,default=1" binding:"min=1"`
PageSize int `json:"page_size" form:"page_size,default=10" binding:"min=1"`
}
type versionInfoResponse struct {
LatestVersion string `json:"latest_version"`
RecVersion string `json:"rec_version"`
}
func GetVersion(c *gin.Context) {
response.Success(c, gin.H{"version": strings.TrimPrefix(constants.Version, "ce-")})
}
func GetUpgradeTips(ctx *gin.Context) {
client := utils.GetHTTPClient()
logger.Debugf("GetUpgradeTips: %s", config.GlobalConfig.PlatformAddr+VersionInfoEntrypoint)
versionInfoReq, err := http.NewRequest(http.MethodGet, config.GlobalConfig.PlatformAddr+VersionInfoEntrypoint, nil)
if err != nil {
logger.Warn(err)
response.Success(ctx, gin.H{"upgrade_tips": constants.NotUpgrade})
return
}
versionInfoRsp, err := client.Do(versionInfoReq)
if err != nil {
logger.Warn(err)
response.Success(ctx, gin.H{"upgrade_tips": constants.NotUpgrade})
return
}
body, err := ioutil.ReadAll(versionInfoRsp.Body)
if err != nil {
logger.Warn(err)
response.Success(ctx, gin.H{"upgrade_tips": constants.NotUpgrade})
return
}
versionInfo := &versionInfoResponse{}
err = json.Unmarshal(body, versionInfo)
if err != nil {
logger.Warnf("err: %v, body: %s", err, body)
response.Success(ctx, gin.H{"upgrade_tips": constants.NotUpgrade})
return
}
currentVersion := fmt.Sprintf("v%s", constants.Version)
latestVersionCmp := semver.Compare(currentVersion, versionInfo.LatestVersion)
recVersionCmp := semver.Compare(currentVersion, versionInfo.RecVersion)
if semver.Compare(versionInfo.LatestVersion, versionInfo.RecVersion) == -1 || latestVersionCmp == 1 {
logger.Warnf("The version number is invalid, current version: %s, latest version: %s, rec version: %s",
currentVersion, versionInfo.LatestVersion, versionInfo.RecVersion)
response.Success(ctx, gin.H{"upgrade_tips": constants.NotUpgrade})
return
}
var upgradeTips int
if recVersionCmp == -1 {
upgradeTips = constants.MustUpgrade
} else if recVersionCmp == 0 {
if latestVersionCmp == 0 {
upgradeTips = constants.NotUpgrade
} else {
upgradeTips = constants.RecommendedUpgrade
}
} else {
if latestVersionCmp < 0 {
upgradeTips = constants.RecommendedUpgrade
} else {
upgradeTips = constants.NotUpgrade
}
}
response.Success(ctx, gin.H{"upgrade_tips": upgradeTips})
}