-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
65 lines (50 loc) · 1.32 KB
/
main.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
package main
import (
"encoding/json"
"errors"
"fmt"
"io/fs"
"log"
"os"
"golang.org/x/oauth2"
)
const ConfigFilename = "follow-liked.json"
type Config struct {
Auth oauth2.Token
}
func main() {
log.SetFlags(0)
config, err := loadExistingOrEmptyConfig(ConfigFilename)
if err != nil {
log.Fatalf("Error %v", err)
}
if len(config.Auth.AccessToken) == 0 {
log.Println("Before using this tool, you must authenticate with Spotify.")
}
if err := writeConfigToFile(config, ConfigFilename); err != nil {
log.Printf("Error %v", err)
}
}
func loadExistingOrEmptyConfig(path string) (Config, error) {
var cfg Config
fileContents, err := os.ReadFile(path)
if errors.Is(err, os.ErrNotExist) {
return cfg, nil
} else if err != nil {
return cfg, fmt.Errorf("loading existing config from %s: %w", path, err)
}
if err := json.Unmarshal(fileContents, &cfg); err != nil {
return cfg, fmt.Errorf("unmarshaling JSON from %s: %w", path, err)
}
return cfg, nil
}
func writeConfigToFile(cfg Config, path string) error {
formattedConfig, err := json.MarshalIndent(cfg, "", "\t")
if err != nil {
return fmt.Errorf("marshaling config data for saving to %s: %w", path, err)
}
if err := os.WriteFile(path, formattedConfig, fs.ModePerm); err != nil {
return fmt.Errorf("saving config to %s: %w", path, err)
}
return nil
}