Cosmos-Server/src/CRON.go
2023-05-01 12:59:46 +01:00

104 lines
1.9 KiB
Go

package main
import (
"io/ioutil"
"net/http"
"github.com/azukaar/cosmos-server/src/utils"
"os"
"path/filepath"
"encoding/json"
"github.com/jasonlvhit/gocron"
"github.com/Masterminds/semver"
)
type Version struct {
Version string `json:"version"`
}
// compareSemver compares two semantic version strings.
// Returns:
// 0 if v1 == v2
// 1 if v1 > v2
// -1 if v1 < v2
// error if there's a problem parsing either version string
func compareSemver(v1, v2 string) (int, error) {
ver1, err := semver.NewVersion(v1)
if err != nil {
utils.Error("compareSemver 1 " + v1, err)
return 0, err
}
ver2, err := semver.NewVersion(v2)
if err != nil {
utils.Error("compareSemver 2 " + v2, err)
return 0, err
}
return ver1.Compare(ver2), nil
}
func checkVersion() {
utils.NewVersionAvailable = false
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := filepath.Dir(ex)
pjs, errPR := os.Open(exPath + "/meta.json")
if errPR != nil {
utils.Error("checkVersion", errPR)
return
}
packageJson, _ := ioutil.ReadAll(pjs)
utils.Debug("checkVersion" + string(packageJson))
var version Version
errJ := json.Unmarshal(packageJson, &version)
if errJ != nil {
utils.Error("checkVersion", errJ)
return
}
myVersion := version.Version
response, err := http.Get("https://cosmos-cloud.io/versions/" + myVersion)
if err != nil {
utils.Error("checkVersion", err)
return
}
defer response.Body.Close()
body, err := ioutil.ReadAll(response.Body)
if err != nil {
utils.Error("checkVersion", err)
return
}
cp, errc := compareSemver(myVersion, string(body))
if errc != nil {
utils.Error("checkVersion", errc)
return
}
if cp == -1 {
utils.Log("New version available: " + string(body))
utils.NewVersionAvailable = true
} else {
utils.Log("No new version available")
}
}
func CRON() {
go func() {
gocron.Every(1).Day().At("00:00").Do(checkVersion)
<-gocron.Start()
}()
}