/
securitySettings.go
137 lines (117 loc) · 4.21 KB
/
securitySettings.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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
package control
import "encoding/json"
// AntiSpoofingConfig - Miscellaneous part
type AntiSpoofingConfig struct {
Enabled bool `json:"enabled"`
Log bool `json:"log"`
}
type UpnpConfig struct {
Enabled bool `json:"enabled"`
LogPackets bool `json:"logPackets"`
LogConnections bool `json:"logConnections"`
}
type IPv6Config struct {
BlockNative bool `json:"blockNative"`
BlockTunnels bool `json:"blockTunnels"`
AddressGroupException OptionalEntity `json:"addressGroupException"`
}
type DhcpScopes struct {
BlockUnknownIp bool `json:"blockUnknownIp"`
Log bool `json:"log"`
BlockScopeId OptionalString `json:"blockScopeId"`
}
// ConnectionLimit - @deprecated use ConnLimitSettings instead
type ConnectionLimit struct {
Enabled bool `json:"enabled"`
Soft int `json:"soft"`
Value int `json:"value"` // hard
Rate OptionalLong `json:"rate"`
Exclusions OptionalIdReference `json:"exclusions"`
ExclSoft int `json:"exclSoft"`
ExclValue int `json:"exclValue"` // hard
ExclRate OptionalLong `json:"exclRate"`
}
type MiscSettingsConfig struct {
AntiSpoofing AntiSpoofingConfig `json:"antiSpoofing"`
// [Deprecated]
ConnectionLimit ConnectionLimit `json:"connectionLimit"` // @deprecated use ConnLimit instead
Upnp UpnpConfig `json:"upnp"`
Ipv6 IPv6Config `json:"ipv6"`
DhcpScopes DhcpScopes `json:"dhcpScopes"`
}
// MacFilterActionType - Mac Filter part
type MacFilterActionType string
const (
MacFilterDeny MacFilterActionType = "MacFilterDeny"
MacFilterAllow MacFilterActionType = "MacFilterAllow"
)
type MacAccessItem struct {
MacAddress string `json:"macAddress"`
Description string `json:"description"`
}
type MacAccessList []MacAccessItem
type MacFilterConfig struct {
Enabled bool `json:"enabled"`
Interfaces IdReferenceList `json:"interfaces"`
MacFilterAction MacFilterActionType `json:"macFilterAction"`
MacAccessItems MacAccessList `json:"macAccessItems"`
AllowReserved bool `json:"allowReserved"`
}
// ZeroConfigItemType - Zero-config network
type ZeroConfigItemType string
const (
ZeroConfigVpnClients ZeroConfigItemType = "ZeroConfigVpnClients"
ZeroConfigVpnTunnel ZeroConfigItemType = "ZeroConfigVpnTunnel"
ZeroConfigInterface ZeroConfigItemType = "ZeroConfigInterface"
)
// ZeroConfigItem - One VPN in rule
type ZeroConfigItem struct {
Type ZeroConfigItemType `json:"type"`
Item IdReference `json:"item"`
}
type ZeroConfigList []ZeroConfigItem
type ZeroConfigNetwork struct {
Enabled bool `json:"enabled"`
Items ZeroConfigList `json:"items"`
}
type SecuritySettingsConfig struct {
MiscSettings MiscSettingsConfig `json:"miscSettings"`
MacFilter MacFilterConfig `json:"macFilter"`
ZeroConfigNetwork ZeroConfigNetwork `json:"zeroConfigNetwork"`
}
// SecuritySettingsGet - Returns actual values for Security Settings configuration in WebAdmin
// Return
// config - structure containig security settings such as macfilter action, name, mac list and belonging interfaces.
func (s *ServerConnection) SecuritySettingsGet() (*SecuritySettingsConfig, error) {
data, err := s.CallRaw("SecuritySettings.get", nil)
if err != nil {
return nil, err
}
config := struct {
Result struct {
Config SecuritySettingsConfig `json:"config"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &config)
return &config.Result.Config, err
}
// SecuritySettingsSet - Stores Security Settings configuration
// config - structure containing security settings to be stored such as mac-filter action, name, mac list and belonging interfaces.
// Return
// errors - list of errors
func (s *ServerConnection) SecuritySettingsSet(config SecuritySettingsConfig) (ErrorList, error) {
params := struct {
Config SecuritySettingsConfig `json:"config"`
}{config}
data, err := s.CallRaw("SecuritySettings.set", params)
if err != nil {
return nil, err
}
errors := struct {
Result struct {
Errors ErrorList `json:"errors"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &errors)
return errors.Result.Errors, err
}