mirror of
https://github.com/cupcakearmy/autorestic.git
synced 2025-12-09 22:04:59 +00:00
Merge remote-tracking branch 'origin/master' into multiple-paths
This commit is contained in:
@@ -58,20 +58,27 @@ func (b Backend) generateRepo() (string, error) {
|
||||
|
||||
func (b Backend) getEnv() (map[string]string, error) {
|
||||
env := make(map[string]string)
|
||||
// Key
|
||||
if b.Key != "" {
|
||||
env["RESTIC_PASSWORD"] = b.Key
|
||||
} else {
|
||||
key, err := b.getKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
env["RESTIC_PASSWORD"] = key
|
||||
}
|
||||
|
||||
// From config file
|
||||
repo, err := b.generateRepo()
|
||||
env["RESTIC_REPOSITORY"] = repo
|
||||
for key, value := range b.Env {
|
||||
env[strings.ToUpper(key)] = value
|
||||
}
|
||||
|
||||
// From Envfile and passed as env
|
||||
var prefix = "AUTORESTIC_" + strings.ToUpper(b.name) + "_"
|
||||
for _, variable := range os.Environ() {
|
||||
var splitted = strings.SplitN(variable, "=", 2)
|
||||
if strings.HasPrefix(splitted[0], prefix) {
|
||||
env[strings.TrimPrefix(splitted[0], prefix)] = splitted[1]
|
||||
}
|
||||
}
|
||||
|
||||
return env, err
|
||||
}
|
||||
|
||||
@@ -85,17 +92,6 @@ func generateRandomKey() string {
|
||||
return key
|
||||
}
|
||||
|
||||
func (b Backend) getKey() (string, error) {
|
||||
if b.Key != "" {
|
||||
return b.Key, nil
|
||||
}
|
||||
keyName := "AUTORESTIC_" + strings.ToUpper(b.name) + "_KEY"
|
||||
if key, found := os.LookupEnv(keyName); found {
|
||||
return key, nil
|
||||
}
|
||||
return "", fmt.Errorf("no key found for backend \"%s\"", b.name)
|
||||
}
|
||||
|
||||
func (b Backend) validate() error {
|
||||
if b.Type == "" {
|
||||
return fmt.Errorf(`Backend "%s" has no "type"`, b.name)
|
||||
@@ -105,8 +101,9 @@ func (b Backend) validate() error {
|
||||
}
|
||||
if b.Key == "" {
|
||||
// Check if key is set in environment
|
||||
if _, err := b.getKey(); err != nil {
|
||||
// If not generate a new one
|
||||
env, _ := b.getEnv()
|
||||
if _, found := env["RESTIC_PASSWORD"]; !found {
|
||||
// No key set in config file or env => generate random key and save file
|
||||
key := generateRandomKey()
|
||||
b.Key = key
|
||||
c := GetConfig()
|
||||
|
||||
@@ -47,11 +47,11 @@ func dlJSON(url string) (GithubRelease, error) {
|
||||
|
||||
func Uninstall(restic bool) error {
|
||||
if err := os.Remove(path.Join(INSTALL_PATH, "autorestic")); err != nil {
|
||||
colors.Error.Println(err)
|
||||
return err
|
||||
}
|
||||
if restic {
|
||||
if err := os.Remove(path.Join(INSTALL_PATH, "restic")); err != nil {
|
||||
colors.Error.Println(err)
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
@@ -79,11 +79,15 @@ func downloadAndInstallAsset(body GithubRelease, name string) error {
|
||||
return err
|
||||
}
|
||||
defer tmp.Close()
|
||||
tmp.Chmod(0755)
|
||||
io.Copy(tmp, bz)
|
||||
if err := tmp.Chmod(0755); err != nil {
|
||||
return err
|
||||
}
|
||||
if _, err := io.Copy(tmp, bz); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
to := path.Join(INSTALL_PATH, name)
|
||||
os.Remove(to) // Delete if current, ignore error if file does not exits.
|
||||
defer os.Remove(to) // Delete if current, ignore error if file does not exits.
|
||||
if err := os.Rename(tmp.Name(), to); err != nil {
|
||||
return nil
|
||||
}
|
||||
@@ -121,9 +125,11 @@ func Upgrade(restic bool) error {
|
||||
// Upgrade restic
|
||||
if restic {
|
||||
if err := InstallRestic(); err != nil {
|
||||
colors.Error.Println(err)
|
||||
return err
|
||||
}
|
||||
if err := upgradeRestic(); err != nil {
|
||||
return err
|
||||
}
|
||||
upgradeRestic()
|
||||
}
|
||||
|
||||
// Upgrade self
|
||||
@@ -140,7 +146,9 @@ func Upgrade(restic bool) error {
|
||||
return err
|
||||
}
|
||||
if current.LT(latest) {
|
||||
downloadAndInstallAsset(body, "autorestic")
|
||||
if err := downloadAndInstallAsset(body, "autorestic"); err != nil {
|
||||
return err
|
||||
}
|
||||
colors.Success.Println("Updated autorestic")
|
||||
} else {
|
||||
colors.Body.Println("Already up to date")
|
||||
|
||||
Reference in New Issue
Block a user