/
GetConfig.go
114 lines (99 loc) · 2.45 KB
/
GetConfig.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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
package utils
import (
"fmt"
"net/url"
"os"
"strconv"
"strings"
)
type IpAddressCollection struct {
PartyID int
NParties int
Containers Containers
AllowedOrigin []*url.URL
}
type Containers struct {
Manage *url.URL
Computation *url.URL
Dbg *url.URL
PartyList []Party
}
type Party struct {
PartyID int
IpAddress *url.URL
}
func getEnv(key string) (string, error) {
if value, ok := os.LookupEnv(key); ok {
return value, nil
}
return "", fmt.Errorf("%s is not defined", key)
}
// TODO: errにメッセージをつけてstacktraceを返すようにする
// "github.com/pkg/errors"のerrors.WithMessageを使用推奨
func GetConfig() (IpAddressCollection, error) {
var ipAddrCollection IpAddressCollection
var err error
var partyID string
var nParties string
partyID, err = getEnv("PARTY_ID")
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.PartyID, _ = strconv.Atoi(partyID)
nParties, err = getEnv("N_PARTIES")
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.NParties, _ = strconv.Atoi(nParties)
u, err := getEnv("MANAGE")
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.Containers.Manage, err = url.Parse(u)
if err != nil {
return IpAddressCollection{}, err
}
u, err = getEnv("COMPUTATION")
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.Containers.Computation, err = url.Parse(u)
if err != nil {
return IpAddressCollection{}, err
}
u, err = getEnv("DBG")
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.Containers.Dbg, err = url.Parse(u)
if err != nil {
return IpAddressCollection{}, err
}
for id := 1; id <= ipAddrCollection.NParties; id++ {
var party Party
party.PartyID = id
u, err = getEnv("PARTY_LIST" + strconv.Itoa(id))
if err != nil {
return IpAddressCollection{}, err
}
party.IpAddress, err = url.Parse(u)
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.Containers.PartyList = append(ipAddrCollection.Containers.PartyList, party)
}
us, err := getEnv("ALLOWEDORIGIN")
if err != nil {
return IpAddressCollection{}, err
}
uSlice := strings.Split(us, ",")
var allowedOrigin *url.URL
for _, u := range uSlice {
allowedOrigin, err = url.Parse(u)
if err != nil {
return IpAddressCollection{}, err
}
ipAddrCollection.AllowedOrigin = append(ipAddrCollection.AllowedOrigin, allowedOrigin)
}
return ipAddrCollection, nil
}