summaryrefslogtreecommitdiff
path: root/internal/config/server/server.go
blob: 7e642d03776efcaaab1ea316836a33149933ae37 (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
package server

import (
	"fmt"
	"log"
	"os"
	"strings"

	"codeberg.org/snonux/gos/internal/config"
)

type ServerConfig struct {
	ListenAddr         string `json:"ListenAddr,omitempty"`
	Partner            string `json:"Partner,omitempty"`
	APIKey             string `json:"APIKey,omitempty"`
	DataDir            string `json:"StateDir,omitempty"`
	EmailTo            string `json:"EmailTo,omitempty"`
	EmailFrom          string `json:"EmailFrom,omitempty"`
	SMTPServer         string `json:"SMTPServer,omitempty"`
	CRONMergeIntervalS int    `json:"CRONMergeInterval,omitempty"`
}

func New(configFile string) (ServerConfig, error) {
	conf, _ := config.FromFile[ServerConfig](configFile)

	conf.ListenAddr = config.FromENV("GOS_LISTEN_ADDR", conf.ListenAddr, "localhost:8080")
	conf.Partner = config.FromENV("GOS_PARTNER", conf.Partner)
	conf.APIKey = config.FromENV("GOS_API_KEY", conf.APIKey)
	conf.DataDir = config.FromENV("GOS_DATA_DIR", conf.DataDir, "data")
	conf.EmailTo = config.FromENV("GOS_EMAIL_TO", conf.EmailTo)
	conf.EmailFrom = config.FromENV("GOS_EMAIL_FROM", conf.EmailFrom)

	conf.SMTPServer = config.FromENV("GOS_SMTP_SERVER", conf.SMTPServer)
	if conf.SMTPServer == "" {
		hostname, err := os.Hostname()
		if err != nil {
			log.Fatal(err)
		}
		conf.SMTPServer = fmt.Sprintf("%s:25", hostname)
		log.Println("Set SMTPServer to " + conf.SMTPServer)
	}

	// TODO: When there are more int parsing cases in the config, use generic? config.FromENV?
	if conf.CRONMergeIntervalS == 0 {
		fmt.Println("FOO", config.FromENV("GOS_CRON_MERGE_INTERVAL", "3600"))
		// var err error
		// if conf.CRONMergeIntervalS, err = strconv.Atoi(config.FromENV("GOS_CRON_MERGE_INTERVAL", "3600")); err != nil {
		// 	return conf, err
		// }
	}

	return conf, nil
}

func (conf ServerConfig) Partners() []string {
	return strings.Split(conf.Partner, ",")
}