-
Notifications
You must be signed in to change notification settings - Fork 0
/
aliases.go
211 lines (194 loc) · 7.05 KB
/
aliases.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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
package connect
import "encoding/json"
// AliasType - Alias type definition
type AliasType string
const (
TypePublicFolder AliasType = "TypePublicFolder" // messages are delivered to public folder
TypeEmailAddress AliasType = "TypeEmailAddress" // messages are delivered to email account
)
// Alias - Alias details
type Alias struct {
Id KId `json:"id"` // global identification of alias
DomainId KId `json:"domainId"` // [REQUIRED FOR CREATE] identification in which domain alias exists
Name string `json:"name"` // [REQUIRED FOR CREATE] [USED BY QUICKSEARCH] left side of alias
DeliverToId KId `json:"deliverToId"` // empty if email or contains public folder kid
DeliverTo string `json:"deliverTo"` // [REQUIRED FOR CREATE] [USED BY QUICKSEARCH] email address or public folder name
Type AliasType `json:"type"` // type of the alias
Description string `json:"description"` // description
HomeServer HomeServer `json:"homeServer"` // [READ-ONLY] Id of alias homeserver if server is in Cluster
}
// AliasList - List of aliases
type AliasList []Alias
// AliasTargetType - Alias Target discriminator
type AliasTargetType string
const (
TypeUser AliasTargetType = "TypeUser" // user
TypeGroup AliasTargetType = "TypeGroup" // group
)
// AliasTarget - Alias target can be a user or group
type AliasTarget struct {
Id KId `json:"id"` // unique identifier
Type AliasTargetType `json:"type"` // item type discriminator
Name string `json:"name"` // loginName for the User, name in square brackets for the Group
FullName string `json:"fullName"` // fullname for the User, empty string for the Group
Description string `json:"description"` // description of User/Group
IsEnabled bool `json:"isEnabled"` // is the User/Group enabled?
ItemSource DataSource `json:"itemSource"` // is the User/Group stored internally or by LDAP?
EmailAddress string `json:"emailAddress"` // first email address
HomeServer HomeServer `json:"homeServer"` // id of users homeserver if server is in Cluster; groups haven't homeserver
}
// AliasTargetList - List of alias targets
type AliasTargetList []AliasTarget
// Alias management
// AliasesCheck - Obtain a list of mail addresses and/or public folders on which given string will be expanded.
// checkString - string to be checked
// Return
// result - list of expansions
func (s *ServerConnection) AliasesCheck(checkString string) (StringList, error) {
params := struct {
CheckString string `json:"checkString"`
}{checkString}
data, err := s.CallRaw("Aliases.check", params)
if err != nil {
return nil, err
}
result := struct {
Result struct {
Result StringList `json:"result"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &result)
return result.Result.Result, err
}
// AliasesCreate - Create new aliases
// aliases - new alias entities
// Return
// errors - list of error messages for appropriate new aliases
// result - list of IDs of created aliases
func (s *ServerConnection) AliasesCreate(aliases AliasList) (ErrorList, CreateResultList, error) {
params := struct {
Aliases AliasList `json:"aliases"`
}{aliases}
data, err := s.CallRaw("Aliases.create", params)
if err != nil {
return nil, nil, err
}
errors := struct {
Result struct {
Errors ErrorList `json:"errors"`
Result CreateResultList `json:"result"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &errors)
return errors.Result.Errors, errors.Result.Result, err
}
// AliasesGet - Obtain list of aliases.
// query - query conditions and limits
// Return
// list - aliases
// totalItems - amount of aliases for given search condition, useful when limit is defined in query
func (s *ServerConnection) AliasesGet(query SearchQuery, domainId KId) (AliasList, int, error) {
query = addMissedParametersToSearchQuery(query)
params := struct {
Query SearchQuery `json:"query"`
DomainId KId `json:"domainId"`
}{query, domainId}
data, err := s.CallRaw("Aliases.get", params)
if err != nil {
return nil, 0, err
}
list := struct {
Result struct {
List AliasList `json:"list"`
TotalItems int `json:"totalItems"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &list)
return list.Result.List, list.Result.TotalItems, err
}
// AliasesGetMailPublicFolderList - Obtain a list of mail public folders in the given domain.
// domainId - global identification of the domain
// Return
// publicFolderList - list of public folders
func (s *ServerConnection) AliasesGetMailPublicFolderList(domainId KId) (PublicFolderList, error) {
params := struct {
DomainId KId `json:"domainId"`
}{domainId}
data, err := s.CallRaw("Aliases.getMailPublicFolderList", params)
if err != nil {
return nil, err
}
publicFolderList := struct {
Result struct {
PublicFolderList PublicFolderList `json:"publicFolderList"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &publicFolderList)
return publicFolderList.Result.PublicFolderList, err
}
// AliasesGetTargetList - Obtain a list of alias targets.
// query - query conditions and limits
// domainId - global identification of the domain
// Return
// list - alias targets
// totalItems - amount of aliases for given search condition, useful when a limit is defined in the query
func (s *ServerConnection) AliasesGetTargetList(query SearchQuery, domainId KId) (AliasTargetList, int, error) {
query = addMissedParametersToSearchQuery(query)
params := struct {
Query SearchQuery `json:"query"`
DomainId KId `json:"domainId"`
}{query, domainId}
data, err := s.CallRaw("Aliases.getTargetList", params)
if err != nil {
return nil, 0, err
}
list := struct {
Result struct {
List AliasTargetList `json:"list"`
TotalItems int `json:"totalItems"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &list)
return list.Result.List, list.Result.TotalItems, err
}
// AliasesRemove - Delete aliases.
// Return
// errors - error message list
func (s *ServerConnection) AliasesRemove(aliasIds KIdList) (ErrorList, error) {
params := struct {
AliasIds KIdList `json:"aliasIds"`
}{aliasIds}
data, err := s.CallRaw("Aliases.remove", 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
}
// AliasesSet - Set an existing alias.
// aliasIds - list of alias global identifier(s)
// pattern - pattern to use for new values
// Return
// errors - error message list
func (s *ServerConnection) AliasesSet(aliasIds KIdList, pattern Alias) (ErrorList, error) {
params := struct {
AliasIds KIdList `json:"aliasIds"`
Pattern Alias `json:"pattern"`
}{aliasIds, pattern}
data, err := s.CallRaw("Aliases.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
}