/
env.go
71 lines (57 loc) · 1.59 KB
/
env.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
package main
import (
"errors"
"os"
"strings"
"github.com/joho/godotenv"
)
type Environment struct {
DatabaseUrl string
DatabaseName string
AuthHeader string
AllowedOrigins *map[string]bool
}
func parseAllowedOrigins(str string) *map[string]bool {
if str == "" {
return nil
}
allowedOrigins := make(map[string]bool)
for _, origin := range strings.Split(str, ",") {
allowedOrigins[origin] = true
}
return &allowedOrigins
}
func ValidateEnvironment() (*Environment, error) {
// In production, the environment variables
// will be set in the OS env.
if os.Getenv("ENV") == "PROD" {
DatabaseUrl := os.Getenv("DATABASE_URL")
DatabaseName := os.Getenv("DATABASE_NAME")
AuthHeader := os.Getenv("AUTH_HEADER")
AllowedOrigins := parseAllowedOrigins(os.Getenv("ALLOWED_ORIGINS"))
if DatabaseUrl == "" ||
DatabaseName == "" ||
AuthHeader == "" ||
AllowedOrigins == nil {
return nil, errors.New("failed to parse production env")
}
return &Environment{DatabaseUrl, DatabaseName, AuthHeader, AllowedOrigins}, nil
}
// Parse .env
var env map[string]string
env, err := godotenv.Read()
if err != nil {
return nil, errors.New("failed to read local env")
}
DatabaseUrl := env["DATABASE_URL"]
DatabaseName := env["DATABASE_NAME"]
AuthHeader := env["AUTH_HEADER"]
AllowedOrigins := parseAllowedOrigins(env["ALLOWED_ORIGINS"])
if DatabaseUrl == "" ||
DatabaseName == "" ||
AuthHeader == "" ||
AllowedOrigins == nil {
return nil, errors.New("failed to parse local env")
}
return &Environment{DatabaseUrl, DatabaseName, AuthHeader, AllowedOrigins}, nil
}