-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathroles.go
More file actions
115 lines (97 loc) · 2.85 KB
/
Copy pathroles.go
File metadata and controls
115 lines (97 loc) · 2.85 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
package api
import (
"context"
"fmt"
"github.com/humio/cli/internal/api/humiographql"
)
type Roles struct {
client *Client
}
type Role struct {
ID string
DisplayName string
ViewPermissions []string
SystemPermissions []string
OrgPermissions []string
}
func (c *Client) Roles() *Roles { return &Roles{client: c} }
func (r *Roles) List() ([]Role, error) {
resp, err := humiographql.ListRoles(context.Background(), r.client)
if err != nil {
return nil, err
}
respRoles := resp.GetRoles()
roles := make([]Role, len(respRoles))
for idx, role := range respRoles {
respViewPermissions := role.GetViewPermissions()
viewPermissions := make([]string, len(respViewPermissions))
for k, perm := range respViewPermissions {
viewPermissions[k] = string(perm)
}
respOrgPermissions := role.GetOrganizationPermissions()
orgPermissions := make([]string, len(respOrgPermissions))
for k, perm := range respOrgPermissions {
orgPermissions[k] = string(perm)
}
respSystemPermissions := role.GetSystemPermissions()
systemPermissions := make([]string, len(respSystemPermissions))
for k, perm := range respSystemPermissions {
systemPermissions[k] = string(perm)
}
roles[idx] = Role{
ID: role.GetId(),
DisplayName: role.GetDisplayName(),
ViewPermissions: viewPermissions,
OrgPermissions: orgPermissions,
SystemPermissions: systemPermissions,
}
}
return roles, nil
}
func (r *Roles) Get(rolename string) (*Role, error) {
roleId, err := r.GetRoleID(rolename)
if roleId == "" || err != nil {
return nil, fmt.Errorf("unable to get role id")
}
resp, err := humiographql.GetRoleByID(context.Background(), r.client, roleId)
if err != nil {
return nil, err
}
role := resp.GetRole()
respViewPermissions := role.GetViewPermissions()
viewPermissions := make([]string, len(respViewPermissions))
for k, perm := range respViewPermissions {
viewPermissions[k] = string(perm)
}
respOrgPermissions := role.GetOrganizationPermissions()
orgPermissions := make([]string, len(respOrgPermissions))
for k, perm := range respOrgPermissions {
orgPermissions[k] = string(perm)
}
respSystemPermissions := role.GetSystemPermissions()
systemPermissions := make([]string, len(respSystemPermissions))
for k, perm := range respSystemPermissions {
systemPermissions[k] = string(perm)
}
return &Role{
ID: role.GetId(),
DisplayName: role.GetDisplayName(),
ViewPermissions: viewPermissions,
OrgPermissions: orgPermissions,
SystemPermissions: systemPermissions,
}, nil
}
func (r *Roles) GetRoleID(rolename string) (string, error) {
roles, err := r.List()
if err != nil {
return "", fmt.Errorf("unable to list roles: %w", err)
}
var roleId string
for _, role := range roles {
if role.DisplayName == rolename {
roleId = role.ID
break
}
}
return roleId, nil
}