-
Notifications
You must be signed in to change notification settings - Fork 25
/
roles_api.go
138 lines (111 loc) · 3.19 KB
/
roles_api.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
package webexteams
import (
"fmt"
"strings"
"github.com/go-resty/resty/v2"
"github.com/google/go-querystring/query"
"github.com/peterhellberg/link"
)
// RolesService is the service to communicate with the Roles API endpoint
type RolesService service
// Role is the Role definition
type Role struct {
ID string `json:"id,omitempty"` // Role ID.
Name string `json:"name,omitempty"` // Role Display Name.
}
// Roles is the List of Roles
type Roles struct {
Items []Role `json:"items,omitempty"`
}
// AddRole is used to append a role to a slice of roles
func (roles *Roles) AddRole(item Role) []Role {
roles.Items = append(roles.Items, item)
return roles.Items
}
func (s *RolesService) rolesPagination(linkHeader string, size, max int) *Roles {
items := &Roles{}
for _, l := range link.Parse(linkHeader) {
if l.Rel == "next" {
response, err := s.client.R().
SetResult(&Roles{}).
SetError(&Error{}).
Get(l.URI)
if err != nil {
return nil
}
items = response.Result().(*Roles)
if size != 0 {
size = size + len(items.Items)
if size < max {
roles := s.rolesPagination(response.Header().Get("Link"), size, max)
for _, role := range roles.Items {
items.AddRole(role)
}
}
} else {
roles := s.rolesPagination(response.Header().Get("Link"), size, max)
for _, role := range roles.Items {
items.AddRole(role)
}
}
}
}
return items
}
// GetRole Shows details for a role, by ID.
/* Shows details for a role, by ID.
Specify the role ID in the roleID parameter in the URI.
@param roleID Role ID.
@return Role
*/
func (s *RolesService) GetRole(roleID string) (*Role, *resty.Response, error) {
path := "/roles/{roleId}"
path = strings.Replace(path, "{"+"roleId"+"}", fmt.Sprintf("%v", roleID), -1)
response, err := s.client.R().
SetResult(&Role{}).
SetError(&Error{}).
Get(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Role)
return result, response, err
}
// RolesListQueryParams are the query params for the GetRoles API Call
type RolesListQueryParams struct {
Max int `url:"max,omitempty"` // Limit the maximum number of items in the response.
Paginate bool // Indicates if pagination is needed
}
// ListRoles List all roles.
/* List all roles.
@param "max" (int) Limit the maximum number of items in the response.
@param paginate (bool) indicates if pagination is needed
@return Roles
*/
func (s *RolesService) ListRoles(queryParams *RolesListQueryParams) (*Roles, *resty.Response, error) {
path := "/roles/"
queryParamsString, _ := query.Values(queryParams)
response, err := s.client.R().
SetQueryString(queryParamsString.Encode()).
SetResult(&Roles{}).
SetError(&Error{}).
Get(path)
if err != nil {
return nil, nil, err
}
result := response.Result().(*Roles)
if queryParams.Paginate {
items := s.rolesPagination(response.Header().Get("Link"), 0, 0)
for _, role := range items.Items {
result.AddRole(role)
}
} else {
if len(result.Items) < queryParams.Max {
items := s.rolesPagination(response.Header().Get("Link"), len(result.Items), queryParams.Max)
for _, role := range items.Items {
result.AddRole(role)
}
}
}
return result, response, err
}