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  }