aboutsummaryrefslogtreecommitdiff
path: root/grilist/config.go
blob: 3d41bcc63e57db021e4c7e2b0d7ff751685547c8 (plain)
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
package grilist

import (
	"fmt"
	"log"
	"os"

	"github.com/BurntSushi/toml"
)

type Config struct {
	Database struct {
		Hostname string `toml:"hostname"`
		//Port       int    `toml:"port"`
		Database   string `toml:"database"`
		User       string `toml:"user"`
		Password   string `toml:"password"`
		SSLEnabled bool   `toml:ssl_enabled"`
	} `toml:"database"`
	EnableNSA  bool `toml:"enable_nsa"`
	AnilistAPI struct {
		ClientID     string `toml:"client_id"`
		ClientSecret string `toml:"client_secret"`
	} `toml:"anilist_api"`
}

func (c *Config) DBConnectionString() string {
	var sslmode string
	if c.Database.SSLEnabled {
		sslmode = "require"
	} else {
		sslmode = "disable"
	}
	return fmt.Sprintf("host=%s user=%s dbname=%s password=%s sslmode=%s",
		c.Database.Hostname,
		c.Database.User,
		c.Database.Database,
		c.Database.Password,
		sslmode)
}

func LoadConfig() Config {
	var config Config
	var path string
	log.Println("Loading config...")
	for _, v := range []string{
		"grilist.conf",
		"~/grilist.conf",
		"/etc/grilist.conf",
	} {
		log.Printf("Try \"%s\"...", v)
		if _, err := os.Stat(v); err != nil {
			log.Printf("Loading config at \"%s\" failed!", v)
		} else {
			log.Printf("Config file found!")
			path = v
			break
		}
	}
	if path == "" {
		log.Fatal("No config file found at the possible locations!")
	}
	if _, err := toml.DecodeFile(path, &config); err != nil {
		log.Printf("%v", err)
		log.Fatal("Fatal error while reading the config!")
	}
	return config
}