/
home_config.go
66 lines (61 loc) · 1.76 KB
/
home_config.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
package config
import (
"bufio"
"fmt"
"log"
"os"
"path/filepath"
"strings"
)
type HomeConfig struct {
HomeDir string
StorageDir string
}
func getSideloadHomeDirEnv() string {
return os.Getenv("SIDELOADHOME")
}
func getSideloadHomeDirPath() string {
var sideloadHomeDirEnv = getSideloadHomeDirEnv()
if len(sideloadHomeDirEnv) == 0 {
homedir, err := os.UserHomeDir()
if err != nil {
fmt.Println("Cannot determine your home directory.")
log.Fatal(err)
}
return filepath.Join(filepath.Clean(homedir), ".sideload")
} else {
return filepath.Clean(sideloadHomeDirEnv)
}
}
func GetHomeConfig() HomeConfig {
sideloadHomeDirPath := getSideloadHomeDirPath()
sideloadStorageDir := filepath.Join(filepath.Clean(sideloadHomeDirPath), "storage")
if _, err := os.Stat(sideloadHomeDirPath); os.IsNotExist(err) {
var sideloadHomeDirEnv = getSideloadHomeDirEnv()
if len(sideloadHomeDirEnv) == 0 {
fmt.Printf("SIDELOADHOME environment variable has not been set. Using default: '%v'\n", sideloadHomeDirPath)
}
fmt.Printf("Directory '%v' does not exist. Create it now? [Y/n] ", sideloadHomeDirPath)
reader := bufio.NewReader(os.Stdin)
text, err := reader.ReadString('\n')
text = strings.TrimRight(text, "\r\n")
if err == nil && (len(text) == 0 || strings.HasPrefix(text, "y") || strings.HasPrefix(text, "Y")) {
fmt.Printf("Creating directory '%v'.\n", sideloadHomeDirPath)
err = os.MkdirAll(sideloadHomeDirPath, 0700)
if err != nil {
log.Fatal(err)
}
err = os.MkdirAll(sideloadStorageDir, 0700)
if err != nil {
log.Fatal(err)
}
} else {
fmt.Println("A SIDELOADHOME directory is required and must exist to do anything.")
os.Exit(1)
}
}
return HomeConfig{
HomeDir: sideloadHomeDirPath,
StorageDir: sideloadStorageDir,
}
}