-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathspacerole.go
More file actions
86 lines (70 loc) · 2.46 KB
/
spacerole.go
File metadata and controls
86 lines (70 loc) · 2.46 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
package role
import (
"context"
"errors"
"time"
"k8s.io/utils/ptr"
cfv3 "github.com/cloudfoundry/go-cfclient/v3/client"
"github.com/cloudfoundry/go-cfclient/v3/resource"
"github.com/SAP/crossplane-provider-cloudfoundry/apis/resources/v1alpha1"
)
const ErrSpaceNotSpecified = "space is not specified"
// SpaceRoleType converts string to SpaceRoleType enum
func SpaceRoleType(roleType string) resource.SpaceRoleType {
switch roleType {
case v1alpha1.SpaceAuditor, v1alpha1.SpaceAuditors:
return resource.SpaceRoleAuditor
case v1alpha1.SpaceDeveloper, v1alpha1.SpaceDevelopers:
return resource.SpaceRoleDeveloper
case v1alpha1.SpaceManager, v1alpha1.SpaceManagers:
return resource.SpaceRoleManager
case v1alpha1.SpaceSupporter, v1alpha1.SpaceSupporters:
return resource.SpaceRoleSupporter
default:
return resource.SpaceRoleNone
}
}
// GetSpaceRole returns the role of a user in a space by guid or by matching the spec
func GetSpaceRole(ctx context.Context, client Role, guid string) (*resource.Role, error) {
return client.Get(ctx, guid)
}
// searchSpaceRole returns the role of a user in a space if the role matches the spec
func FindSpaceRole(ctx context.Context, client Role, spec v1alpha1.SpaceRoleParameters) (*resource.Role, error) {
opt, err := newSpaceRoleListOptions(spec)
if err != nil {
return nil, err
}
roles, users, err := client.ListIncludeUsersAll(ctx, opt)
if err != nil {
return nil, err
}
return findRole(roles, users, spec.Username,
ptr.Deref(spec.Origin, "sap.ids"),
SpaceRoleType(spec.Type).String(),
)
}
// newSpaceRoleListOptions returns a list options for the given SpaceRoleParameters
func newSpaceRoleListOptions(spec v1alpha1.SpaceRoleParameters) (*cfv3.RoleListOptions, error) {
if spec.Space == nil {
return nil, errors.New(ErrSpaceNotSpecified)
}
opts := cfv3.NewRoleListOptions()
opts.WithSpaceRoleType(SpaceRoleType(spec.Type))
// Space (guid) is required
if spec.Space == nil {
return nil, errors.New(ErrSpaceNotSpecified)
}
opts.SpaceGUIDs.EqualTo(*spec.Space)
return opts, nil
}
// GenerateSpaceRoleObservation takes an Role resource and returns *OrgRoleObservation.
func GenerateSpaceRoleObservation(o *resource.Role) v1alpha1.SpaceRoleObservation {
obs := v1alpha1.SpaceRoleObservation{
ID: ptr.To(o.GUID),
User: &o.Relationships.User.Data.GUID,
Type: &o.Type,
CreatedAt: ptr.To(o.CreatedAt.Format(time.RFC3339)),
UpdatedAt: ptr.To(o.UpdatedAt.Format(time.RFC3339)),
}
return obs
}