2023-03-31 19:19:38 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"io/ioutil"
|
|
|
|
"net/http"
|
|
|
|
"github.com/azukaar/cosmos-server/src/utils"
|
2023-05-15 19:23:06 +00:00
|
|
|
"github.com/azukaar/cosmos-server/src/docker"
|
2023-03-31 19:19:38 +00:00
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"encoding/json"
|
2023-05-01 11:59:46 +00:00
|
|
|
|
|
|
|
"github.com/jasonlvhit/gocron"
|
|
|
|
"github.com/Masterminds/semver"
|
2023-03-31 19:19:38 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
type Version struct {
|
|
|
|
Version string `json:"version"`
|
|
|
|
}
|
|
|
|
|
2023-05-01 11:59:46 +00:00
|
|
|
// 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
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2023-03-31 19:19:38 +00:00
|
|
|
func checkVersion() {
|
2023-05-01 11:59:46 +00:00
|
|
|
utils.NewVersionAvailable = false
|
2023-03-31 19:19:38 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2023-04-01 13:36:40 +00:00
|
|
|
response, err := http.Get("https://cosmos-cloud.io/versions/" + myVersion)
|
2023-03-31 19:19:38 +00:00
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2023-05-01 11:59:46 +00:00
|
|
|
cp, errc := compareSemver(myVersion, string(body))
|
|
|
|
|
|
|
|
if errc != nil {
|
|
|
|
utils.Error("checkVersion", errc)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
if cp == -1 {
|
2023-03-31 19:19:38 +00:00
|
|
|
utils.Log("New version available: " + string(body))
|
2023-05-01 11:59:46 +00:00
|
|
|
utils.NewVersionAvailable = true
|
2023-03-31 19:19:38 +00:00
|
|
|
} else {
|
|
|
|
utils.Log("No new version available")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-05-15 19:23:06 +00:00
|
|
|
func checkUpdatesAvailable() {
|
|
|
|
utils.UpdateAvailable = docker.CheckUpdatesAvailable()
|
|
|
|
}
|
|
|
|
|
2023-07-01 15:32:21 +00:00
|
|
|
func checkCerts() {
|
|
|
|
config := utils.GetMainConfig()
|
|
|
|
HTTPConfig := config.HTTPConfig
|
|
|
|
|
|
|
|
if (
|
|
|
|
HTTPConfig.HTTPSCertificateMode == utils.HTTPSCertModeList["SELFSIGNED"] ||
|
|
|
|
HTTPConfig.HTTPSCertificateMode == utils.HTTPSCertModeList["LETSENCRYPT"]) {
|
|
|
|
utils.Log("Checking certificates for renewal")
|
|
|
|
if !CertificateIsValid(HTTPConfig.TLSValidUntil) {
|
|
|
|
utils.Log("Certificates are not valid anymore, renewing")
|
|
|
|
RestartServer()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-31 19:19:38 +00:00
|
|
|
func CRON() {
|
2023-04-11 17:33:49 +00:00
|
|
|
go func() {
|
|
|
|
gocron.Every(1).Day().At("00:00").Do(checkVersion)
|
|
|
|
<-gocron.Start()
|
|
|
|
}()
|
2023-07-01 15:32:21 +00:00
|
|
|
go func() {
|
|
|
|
gocron.Every(1).Day().At("01:00").Do(checkCerts)
|
|
|
|
<-gocron.Start()
|
|
|
|
}()
|
2023-05-15 19:23:06 +00:00
|
|
|
go func() {
|
|
|
|
gocron.Every(6).Hours().Do(checkUpdatesAvailable)
|
|
|
|
<-gocron.Start()
|
|
|
|
}()
|
2023-03-31 19:19:38 +00:00
|
|
|
}
|