-
Notifications
You must be signed in to change notification settings - Fork 61
/
role.go
54 lines (44 loc) · 1.56 KB
/
role.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
package payloads
import (
"code.cloudfoundry.org/korifi/api/repositories"
rbacv1 "k8s.io/api/rbac/v1"
)
type RoleCreate struct {
Type string `json:"type" validate:"required"`
Relationships RoleRelationships `json:"relationships" validate:"required"`
}
type UserRelationship struct {
Data UserRelationshipData `json:"data" validate:"required"`
}
type UserRelationshipData struct {
Username string `json:"username" validate:"required_without=GUID"`
GUID string `json:"guid" validate:"required_without=Username"`
}
type RoleRelationships struct {
User *UserRelationship `json:"user" validate:"required_without=KubernetesServiceAccount"`
KubernetesServiceAccount *Relationship `json:"kubernetesServiceAccount" validate:"required_without=User"`
Space *Relationship `json:"space"`
Organization *Relationship `json:"organization"`
}
func (p RoleCreate) ToMessage() repositories.CreateRoleMessage {
record := repositories.CreateRoleMessage{
Type: p.Type,
}
if p.Relationships.Space != nil {
record.Space = p.Relationships.Space.Data.GUID
}
if p.Relationships.Organization != nil {
record.Org = p.Relationships.Organization.Data.GUID
}
if p.Relationships.User != nil {
record.Kind = rbacv1.UserKind
record.User = p.Relationships.User.Data.Username
if p.Relationships.User.Data.GUID != "" {
record.User = p.Relationships.User.Data.GUID
}
} else {
record.Kind = rbacv1.ServiceAccountKind
record.User = p.Relationships.KubernetesServiceAccount.Data.GUID
}
return record
}