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
|
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.EnvToStr("GOS_LISTEN_ADDR", conf.ListenAddr, "localhost:8080")
conf.Partner = config.EnvToStr("GOS_PARTNER", conf.Partner)
conf.APIKey = config.EnvToStr("GOS_API_KEY", conf.APIKey)
conf.DataDir = config.EnvToStr("GOS_DATA_DIR", conf.DataDir, "data")
conf.EmailTo = config.EnvToStr("GOS_EMAIL_TO", conf.EmailTo)
conf.EmailFrom = config.EnvToStr("GOS_EMAIL_FROM", conf.EmailFrom)
conf.SMTPServer = config.EnvToStr("GOS_SMTP_SERVER", conf.SMTPServer, func() string {
hostname, err := os.Hostname()
if err != nil {
log.Fatal(err)
}
return fmt.Sprintf("%s:25", hostname)
})
conf.CRONMergeIntervalS = config.EnvToInt("GOS_CRON_MERGE_INTERVAL", 3600)
return conf, nil
}
func (conf ServerConfig) Partners() []string {
if partners := strings.Split(conf.Partner, ","); partners[0] != "" {
return partners
}
return []string{}
}
|