-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconfig.go
More file actions
128 lines (114 loc) · 3.21 KB
/
config.go
File metadata and controls
128 lines (114 loc) · 3.21 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package xroad
import (
"encoding/json"
"errors"
"net/url"
"os"
)
type ReqConfig struct {
Url string `json:"url" mapstructure:"url"`
SOAPHeader SOAPHeader `json:"header" yaml:"header" mapstructure:"header"`
}
func LoadConfig(filename string) (*ReqConfig, error) {
f, err := os.Open(filename)
if err != nil {
return nil, WrapError(err)
}
defer f.Close()
dec := json.NewDecoder(f)
var config ReqConfig
err = dec.Decode(&config)
return &config, WrapError(err)
}
type ConfigChecker func(c ReqConfig) error
func (c ReqConfig) Check(checks ...ConfigChecker) error {
for _, check := range checks {
if err := check(c); err != nil {
return WrapError(err)
}
}
return nil
}
func URLCheck(c ReqConfig) error {
if c.Url == "" {
return WrapError(errors.New("url empty"))
}
_, err := url.Parse(c.Url)
if err != nil {
return WrapError(err)
}
return nil
}
func doServiceCheck(service XroadService) error {
if service.XRoadInstance == "" {
return WrapError(errors.New("Service xRoadInstance empty"))
}
if service.MemberClass == "" {
return WrapError(errors.New("Service MemberClass empty"))
}
if service.MemberCode == "" {
return WrapError(errors.New("Service MemberCode empty"))
}
if service.SubsystemCode == "" {
return WrapError(errors.New("Service SubsystemCode empty"))
}
return nil
}
func ServiceCheck(c ReqConfig) error {
// I assume ServiceCode and ServiceVersion is often empty in config to be set in runtime
if service := c.SOAPHeader.Service; service != nil {
return WrapError(doServiceCheck(*service))
}
return WrapError(errors.New("Service empty"))
}
func doCentralServiceCheck(centralService XroadCentralService) error {
if centralService.XRoadInstance == "" {
return WrapError(errors.New("CentralService xRoadInstance empty"))
}
if centralService.ServiceCode == "" {
return WrapError(errors.New("CentralService ServiceCode empty"))
}
return nil
}
func CentralServiceCheck(c ReqConfig) error {
if centralService := c.SOAPHeader.CentralService; centralService != nil {
return WrapError(doCentralServiceCheck(*centralService))
}
return WrapError(errors.New("CentralService empty"))
}
func ServiceOrCentralServiceCheck(c ReqConfig) error {
service := c.SOAPHeader.Service
if service != nil {
if err := doServiceCheck(*service); err != nil {
return WrapError(err)
}
}
centralService := c.SOAPHeader.CentralService
if centralService != nil {
if err := doCentralServiceCheck(*centralService); err != nil {
return WrapError(err)
}
}
if service == nil && centralService == nil {
return WrapError(errors.New("Service and CentralService empty"))
}
if service != nil && centralService != nil {
Log.Error("msg", "both service and centralService defined, centralService is used")
}
return nil
}
func ClientCheck(c ReqConfig) error {
if c.SOAPHeader.Client.XRoadInstance == "" {
return WrapError(errors.New("Client xRoadInstance empty"))
}
if c.SOAPHeader.Client.MemberClass == "" {
return WrapError(errors.New("Client MemberClass empty"))
}
if c.SOAPHeader.Client.MemberCode == "" {
return WrapError(errors.New("Client MemberCode empty"))
}
if c.SOAPHeader.Client.SubsystemCode == "" {
return WrapError(errors.New("Client SubsystemCode empty"))
}
return nil
}