-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
78 lines (64 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
66
67
68
69
70
71
72
73
74
75
76
77
78
package main
import (
"log"
"os"
"github.com/joho/godotenv"
)
var (
decenc *OAuthDecEncoder
server *Server
storage *Storage
)
func init() {
if runningFromServerless() {
log.Printf("Cold start")
}
if err := safeLoadEnvs(); err != nil {
log.Fatal(err)
}
secret := os.Getenv(EnvCryptoSecret)
if !validSecret(secret) {
log.Fatal(missingEnv(EnvCryptoSecret))
}
decenc = NewOAuthDecEncoder(secret, oauthDecEncDelim)
postgresConnStr := os.Getenv(EnvPostgresConnStr)
if postgresConnStr == "" {
log.Fatal(missingEnv(EnvPostgresConnStr))
}
storage = NewStorage(postgresConnStr)
if err := storage.Init(); err != nil {
log.Fatal(err)
}
listenAddr := fmtPort(fallbackIfEmpty(os.Getenv(EnvPort), defaultListenAddr))
server = NewServer(listenAddr)
}
func main() {
err := server.Run()
if err != nil {
log.Fatal(err)
}
}
func envFilePathsInLoadOrder() []string {
return []string{
filePathEnvLocal,
filePathEnv,
}
}
func safeLoadEnvs() error {
validFilenames := []string{}
for _, filePath := range envFilePathsInLoadOrder() {
if fileExists(filePath) {
validFilenames = append(validFilenames, filePath)
}
}
if len(validFilenames) == 0 {
return nil
}
return godotenv.Load(validFilenames...)
}
func fmtPort(port string) string {
if string(port[0]) == ":" {
return port
}
return ":" + port
}