github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/server/logiciel/logiciel.go (about) 1 // Expose les utilitaires de déploiement du client ACVE, 2 // utilisés pour: 3 // - le téléchargement initial 4 // - les mises à jour automatiques 5 package logiciel 6 7 import ( 8 "encoding/json" 9 "fmt" 10 "io/ioutil" 11 "log" 12 "path/filepath" 13 14 "github.com/benoitkugler/goACVE/server/core/apiserver" 15 "github.com/benoitkugler/goACVE/deploy/store" 16 ) 17 18 type Versions struct { 19 Windows apiserver.VersionInfos `json:"windows"` 20 Darwin apiserver.VersionInfos `json:"darwin"` 21 Linux apiserver.VersionInfos `json:"linux"` 22 } 23 24 type OutLogiciel struct { 25 Versions Versions `json:"versions"` 26 WrongPassword bool `json:"wrong_password"` 27 } 28 29 func NewOutLogiciel(wrongPassword bool) OutLogiciel { 30 v := loadVersions() 31 return OutLogiciel{Versions: v, WrongPassword: wrongPassword} 32 } 33 34 func loadVersions() Versions { 35 var out Versions 36 b, err := ioutil.ReadFile("logiciel/windows/versions.json") 37 if err != nil { 38 log.Println(err) 39 } 40 if err = json.Unmarshal(b, &out.Windows); err != nil { 41 log.Println(err) 42 } 43 b, err = ioutil.ReadFile("logiciel/darwin/versions.json") 44 if err != nil { 45 log.Println(err) 46 } 47 if err = json.Unmarshal(b, &out.Darwin); err != nil { 48 log.Println(err) 49 } 50 b, err = ioutil.ReadFile("logiciel/linux/versions.json") 51 if err != nil { 52 log.Println(err) 53 } 54 if err = json.Unmarshal(b, &out.Linux); err != nil { 55 log.Println(err) 56 } 57 return out 58 } 59 60 func GetLogiciel(platform string) (path string, err error) { 61 if platform != "windows" && platform != "darwin" && platform != "linux" { 62 return "", fmt.Errorf("Platforme inconnue : %s", platform) 63 } 64 path = store.GetPaths(platform).Full 65 return path, nil 66 } 67 68 // --------------- Mise à jour automatiques ------------------------- 69 70 type PatchedVersionInfo struct { 71 apiserver.VersionInfos 72 Version string 73 Hash []byte 74 NbFiles int 75 } 76 77 func newPatchedVersionInfo(data apiserver.VersionInfos) PatchedVersionInfo { 78 return PatchedVersionInfo{VersionInfos: data, Version: data.Version, Hash: data.Hash, NbFiles: data.NbFiles} 79 } 80 81 // GetUpdateInfos renvoie les informations de mise à jour 82 func GetUpdateInfos(platform string) (PatchedVersionInfo, error) { 83 versions := loadVersions() 84 switch platform { 85 case "windows": 86 return newPatchedVersionInfo(versions.Windows), nil 87 case "linux": 88 return newPatchedVersionInfo(versions.Linux), nil 89 case "darwin": 90 return newPatchedVersionInfo(versions.Darwin), nil 91 default: 92 return PatchedVersionInfo{}, fmt.Errorf("Platforme inconnue : %s", platform) 93 } 94 } 95 96 // Renvoie le chemin de la mise à jour compressée correspondant à la platforme demandée 97 func GetUpdate(platform string) (string, error) { 98 var basePath string 99 switch platform { 100 case "windows", "linux", "darwin": 101 basePath = filepath.Join("logiciel", platform) 102 default: 103 return "", fmt.Errorf("Plateforme inconnue : %s", platform) 104 } 105 return filepath.Join(basePath, "client.tar.gz"), nil 106 }