featurebase/verchk.go

116 lines
1.8 KiB
Go

package pilosa
import (
"bytes"
"encoding/json"
"io"
"net/http"
"os"
"strings"
"github.com/google/uuid"
)
type VersionChecker struct {
URL string
}
func NewVersionChecker(endpoint string) *VersionChecker {
v := VersionChecker{
URL: endpoint,
}
return &v
}
func (v *VersionChecker) CheckIn() (*VerCheckResponse, error) {
id, err := v.WriteClientUUID()
if err != nil {
return nil, err
}
body := make(map[string]string, 2)
body["entry_type"] = "user"
body["version"] = Version
body["client_id"] = id
req, err := json.Marshal(body)
if err != nil {
return nil, err
}
wReq := bytes.NewReader(req)
if err != nil {
return nil, err
}
var json_resp VerCheckResponse
r, err := http.Post(v.URL, "application/json", wReq)
if err != nil {
return nil, err
}
data, err := io.ReadAll(r.Body)
if err != nil {
return nil, err
}
err = json.Unmarshal(data, &json_resp)
if err != nil {
return nil, err
}
return &json_resp, nil
}
func (v *VersionChecker) GenerateClientUUID() (string, error) {
clientUUID := uuid.New()
cleanedUUID := strings.Replace(clientUUID.String(), "-", "", -1)
return cleanedUUID, nil
}
func (v *VersionChecker) WriteClientUUID() (string, error) {
filename := ".client_id.txt"
_, err := os.Stat(filename)
if err != nil {
if os.IsNotExist(err) {
fh, err := os.Create(filename)
if err != nil {
return "", err
}
defer fh.Close()
id, err := v.GenerateClientUUID()
if err != nil {
return "", err
}
_, err = fh.WriteString(id)
if err != nil {
return "", err
}
return "", err
} else {
return "", err
}
}
fh, err := os.Open(filename)
if err != nil {
return "", err
}
defer fh.Close()
buf, err := os.ReadFile(filename)
if err != nil {
return "", err
}
return string(buf), nil
}
type VerCheckResponse struct {
Version string `json:"latest_version"`
}