Skip to content
Snippets Groups Projects
Unverified Commit b15c31bd authored by Kali Kaneko's avatar Kali Kaneko
Browse files

[feat] simple update check

parent b3453bbe
No related branches found
No related tags found
No related merge requests found
package version
import (
"io/ioutil"
"log"
"net/http"
"os"
"runtime"
"strings"
)
const verURI = "https://downloads.leap.se/RiseupVPN/"
// returns true if there's a newer version string published on the server
// this needs to manually bump latest version for every platform in the
// downloads server.
// at the moment, we hardcode RiseupVPN in the path, assuming that all clients
// stay in sync.
func CanUpgrade() bool {
log.Println("Checking for updates...")
uri := verURI
switch runtime.GOOS {
case "windows":
uri += "windows"
case "linux":
uri += "linux"
case "osx":
uri += "osx"
}
uri += "/lastver"
resp, err := http.Get(uri)
if err != nil {
log.Println(err)
return false
}
defer resp.Body.Close()
verStr, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Println(err)
return false
}
r := strings.TrimSpace(string(verStr))
if strings.Count(r, "\n") > 1 {
log.Println("No remote version found at " + uri)
return false
}
canUpgrade := versionOrdinal(r) > versionOrdinal(VERSION)
if os.Getenv("DEBUG") == "1" {
log.Println(">>> Remote version: " + r)
log.Println(">>> Current version: " + VERSION)
if canUpgrade {
log.Println("Newer version available")
}
}
return canUpgrade
}
// https://stackoverflow.com/a/18411978
func versionOrdinal(version string) string {
const maxByte = 1<<8 - 1
vo := make([]byte, 0, len(version)+8)
j := -1
for i := 0; i < len(version); i++ {
b := version[i]
if '0' > b || b > '9' {
vo = append(vo, b)
j = -1
continue
}
if j == -1 {
vo = append(vo, 0x00)
j = len(vo) - 1
}
if vo[j] == 1 && vo[j+1] == '0' {
vo[j+1] = b
continue
}
if vo[j]+1 > maxByte {
log.Println("VersionOrdinal: invalid version")
return string(vo)
}
vo = append(vo, b)
vo[j]++
}
return string(vo)
}
vercheck
package main
import (
"0xacab.org/leap/bitmask-vpn/pkg/config/version"
"fmt"
)
func main() {
fmt.Println("Testing version upgrade (checks network)")
fmt.Println("-> set DEBUG=1 for details")
u := version.CanUpgrade()
switch {
case u:
fmt.Println("can upgrade")
case !u:
fmt.Println("no new version available")
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment