/
storage.go
67 lines (58 loc) · 1.38 KB
/
storage.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
package utils
import (
"log"
"os"
"path"
"github.com/spf13/viper"
)
type Secrets struct {
ClientID string `yaml:"clientid"`
ClientSecret string `yaml:"clientsecret"`
RefreshToken string `yaml:"refreshtoken"`
}
// Recursively generate config dir in $HOME/.config/gamut
func createConfigDir() (cfgDirPath string, err error) {
homedir, err := os.UserHomeDir()
if err != nil {
log.Fatalln(err)
}
cfgDirPath = path.Join(homedir, ".config", "gamut")
err = os.MkdirAll(cfgDirPath, os.ModePerm)
return cfgDirPath, err
}
// Set Viper config defaults
func InitViper() error {
cfgDirPath, err := createConfigDir()
if err != nil {
return err
}
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(cfgDirPath)
viper.AddConfigPath(".")
return nil
}
// Fetch secrets from config paths
func GetSecrets() (*Secrets, error) {
if err := viper.ReadInConfig(); err != nil {
return nil, err
}
conf := &Secrets{}
err := viper.Unmarshal(conf)
return conf, err
}
// Write secrets to disk.
func WriteSecrets(sc Secrets) (err error) {
viper.Set("ClientID", sc.ClientID)
viper.Set("ClientSecret", sc.ClientSecret)
viper.Set("RefreshToken", sc.RefreshToken)
// Creates a new file if one does not exist
viper.SafeWriteConfig()
// Write to a file if it exists, else returns error
err = viper.WriteConfig()
if err != nil {
log.Fatalln(err)
return err
}
return
}