-
Notifications
You must be signed in to change notification settings - Fork 0
/
resources.go
176 lines (161 loc) · 6.28 KB
/
resources.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
package connect
import "encoding/json"
// PrincipalType - Principal type
type PrincipalType string
const (
AuthDomainPrincipal PrincipalType = "AuthDomainPrincipal" // represents all users from a specified domain
AuthUserPrincipal PrincipalType = "AuthUserPrincipal" // represents all users from all domains
AnyonePrincipal PrincipalType = "AnyonePrincipal" // represents authorized users from all domains
UserPrincipal PrincipalType = "UserPrincipal" // represents an user
GroupPrincipal PrincipalType = "GroupPrincipal" // represents an group
NonePrincipal PrincipalType = "NonePrincipal" // target is empty
)
// PrincipalDescription - Principal descriptor [READ-ONLY]
type PrincipalDescription struct {
Type PrincipalType `json:"type"`
Id KId `json:"id"`
Name string `json:"name"`
DomainName string `json:"domainName"`
FullName string `json:"fullName"`
Description string `json:"description"`
IsEnabled bool `json:"isEnabled"`
ItemSource DataSource `json:"itemSource"` // internal/LDAP
HomeServer HomeServer `json:"homeServer"` // id of users homeserver if server is in Cluster; groups haven't homeserver
}
// PrincipalList - List of principals
type PrincipalList []PrincipalDescription
// ResourceType - Export format type
type ResourceType string
const (
Room ResourceType = "Room" // resource is a room
Equipment ResourceType = "Equipment" // resource is something else, eg: a car
)
// Resource - Resource details
type Resource struct {
Id KId `json:"id"` // [READ-ONLY] global identification of resource
DomainId KId `json:"domainId"` // [REQUIRED FOR CREATE] [WRITE-ONCE] identification in which domain resource exists
Name string `json:"name"` // [REQUIRED FOR CREATE] [WRITE-ONCE] resource name
Address string `json:"address"` // [READ-ONLY] email of resource
Description string `json:"description"` // resource description
Type ResourceType `json:"type"` // type of the resource
IsEnabled bool `json:"isEnabled"` // is resource enabled? default == true
ResourceUsers PrincipalList `json:"resourceUsers"` // list of groups / users /
Manager PrincipalDescription `json:"manager"` // identification of user who is a manager
HomeServer HomeServer `json:"homeServer"` // [READ-ONLY] Id of users homeserver if server is in Cluster
}
// ResourceList - List of resources
type ResourceList []Resource
// Resource management
// ResourcesCreate - Create new resources.
// resources - new resource entities
// Return
// errors - error message list
// result - list of IDs of created resources
func (s *ServerConnection) ResourcesCreate(resources ResourceList) (ErrorList, CreateResultList, error) {
params := struct {
Resources ResourceList `json:"resources"`
}{resources}
data, err := s.CallRaw("Resources.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
}
// ResourcesGet - Obtain a list of resources.
// query - query conditions and limits
// domainId - domain identification
// Return
// list - resources
// totalItems - amount of resources for given search condition, useful when limit is defined in SearchQuery
func (s *ServerConnection) ResourcesGet(query SearchQuery, domainId KId) (ResourceList, int, error) {
query = addMissedParametersToSearchQuery(query)
params := struct {
Query SearchQuery `json:"query"`
DomainId KId `json:"domainId"`
}{query, domainId}
data, err := s.CallRaw("Resources.get", params)
if err != nil {
return nil, 0, err
}
list := struct {
Result struct {
List ResourceList `json:"list"`
TotalItems int `json:"totalItems"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &list)
return list.Result.List, list.Result.TotalItems, err
}
// ResourcesGetPrincipalList - Obtain a list of potential resource targets (principals).
// query - query attributes and limits
// Return
// list - principals
// totalItems - amount of resources for given search condition, useful when limit is defined in SearchQuery
func (s *ServerConnection) ResourcesGetPrincipalList(query SearchQuery, domainId KId) (PrincipalList, int, error) {
query = addMissedParametersToSearchQuery(query)
params := struct {
Query SearchQuery `json:"query"`
DomainId KId `json:"domainId"`
}{query, domainId}
data, err := s.CallRaw("Resources.getPrincipalList", params)
if err != nil {
return nil, 0, err
}
list := struct {
Result struct {
List PrincipalList `json:"list"`
TotalItems int `json:"totalItems"`
} `json:"result"`
}{}
err = json.Unmarshal(data, &list)
return list.Result.List, list.Result.TotalItems, err
}
// ResourcesRemove - Remove resources.
// resourceIds - list of global identifiers of resource(s) to be deleted
// Return
// errors - error message list
func (s *ServerConnection) ResourcesRemove(resourceIds KIdList) (ErrorList, error) {
params := struct {
ResourceIds KIdList `json:"resourceIds"`
}{resourceIds}
data, err := s.CallRaw("Resources.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
}
// ResourcesSet - Set existing resources.
// resourceIds - a list resource global identifier(s)
// pattern - pattern to use for new values
// Return
// errors - error message list
func (s *ServerConnection) ResourcesSet(resourceIds KIdList, pattern Resource) (ErrorList, error) {
params := struct {
ResourceIds KIdList `json:"resourceIds"`
Pattern Resource `json:"pattern"`
}{resourceIds, pattern}
data, err := s.CallRaw("Resources.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
}