-
Notifications
You must be signed in to change notification settings - Fork 0
/
settings.go
137 lines (109 loc) · 2.76 KB
/
settings.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package main
import (
"b2backup/utils"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"log"
"os"
"github.com/kurin/blazer/b2"
)
type PathDetails struct {
Client *b2.Client `json:"-"`
B2Bucket *b2.Bucket `json:"-"`
AccountID string
ApplicationKey string
Bucket string
Source string
Destination string
Compression bool
BackupSettings int16
Signatures []FileDetails
}
type FileDetails struct {
Hash string // Sha1 Hash of first 100MB of a file + path
Path string // Path inside Source path, excluding source path
B2Path string // Path inside bucket of backup
Compressed bool // Is the file compressed inside of b2
}
var pathList []string
var paths []PathDetails
// Load up .b2backup.json in path
func loadSettings() {
var pathsChecked []string
for _, path := range pathList {
dat, errRead := ioutil.ReadFile(path + "/.b2backup.json")
if errRead != nil {
fmt.Println("There was a problem loading a path and it has been removed from the list: " + path)
continue
}
// Keep it in the new checked list
pathsChecked = append(pathsChecked, path)
// Read the json
var pathDetails PathDetails
errUn := json.Unmarshal(dat, &pathDetails)
if errUn != nil {
fmt.Println("There was a problem loading a path json and it has been removed from the list: " + path)
continue
}
// Load into memory
paths = append(paths, pathDetails)
}
// Restore list to memory and write file
pathList = pathsChecked
savePaths()
}
func saveSettings(path PathDetails) {
data, errMarsh := json.Marshal(path)
if errMarsh != nil {
log.Fatal(errMarsh)
}
errPaths := ioutil.WriteFile(path.Source+"/.b2backup.json", data, 0644)
if errPaths != nil {
log.Fatal(errPaths)
}
}
// Load up paths.json in working directory
func loadPaths() error {
wd, errWd := os.Getwd()
if errWd != nil {
return errWd
}
// No paths exists
if utils.FileExists(wd+"/"+pathListFile) == false {
return errors.New("No paths located in the system, try b2backup.run -init=<path>")
}
paths, errPaths := ioutil.ReadFile(wd + "/" + pathListFile)
if errPaths != nil {
return errPaths
}
if err := json.Unmarshal(paths, &pathList); err != nil {
return errors.New("There was a problem parsing " + pathListFile)
}
// TODO: there are no paths inside path.json exit
return nil
}
func savePaths() {
wd, errWd := os.Getwd()
if errWd != nil {
log.Fatal(errWd)
}
data, errMarsh := json.Marshal(pathList)
if errMarsh != nil {
log.Fatal(errMarsh)
}
errPaths := ioutil.WriteFile(wd+"/"+pathListFile, data, 0644)
if errPaths != nil {
log.Fatal(errPaths)
}
}
// Check if it exists already
func pathExists(path string) bool {
for _, pathItem := range pathList {
if pathItem == path {
return true
}
}
return false
}