-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathworkloadidentity.go
141 lines (118 loc) · 3.95 KB
/
workloadidentity.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
package api
import (
"context"
"strings"
"time"
"unicode/utf8"
"github.com/asaskevich/govalidator"
"github.com/moonrhythm/validator"
)
type WorkloadIdentity interface {
Create(ctx context.Context, m *WorkloadIdentityCreate) (*Empty, error)
Get(ctx context.Context, m *WorkloadIdentityGet) (*WorkloadIdentityItem, error)
List(ctx context.Context, m *WorkloadIdentityList) (*WorkloadIdentityListResult, error)
Delete(ctx context.Context, m *WorkloadIdentityDelete) (*Empty, error)
}
type WorkloadIdentityCreate struct {
Location string `json:"location" yaml:"location"`
Project string `json:"project" yaml:"project"`
Name string `json:"name" yaml:"name"`
GSA string `json:"gsa" yaml:"gsa"`
}
func (m *WorkloadIdentityCreate) Valid() error {
m.Name = strings.TrimSpace(m.Name)
m.GSA = strings.TrimSpace(m.GSA)
v := validator.New()
v.Must(m.Location != "", "location required")
v.Must(m.Project != "", "project required")
v.Must(ReValidName.MatchString(m.Name), "name invalid "+ReValidNameStr)
{
cnt := utf8.RuneCountInString(m.Name)
v.Mustf(cnt >= MinNameLength && cnt <= MaxNameLength, "name must have length between %d-%d characters", MinNameLength, MaxNameLength)
}
v.Must(m.GSA == "" || govalidator.IsEmail(m.GSA), "gsa must be an email")
v.Must(strings.HasSuffix(m.GSA, ".iam.gserviceaccount.com"), "gsa must end with '.iam.gserviceaccount.com'")
return WrapValidate(v)
}
type WorkloadIdentityGet struct {
Location string `json:"location" yaml:"location"`
Project string `json:"project" yaml:"project"`
Name string `json:"name" yaml:"name"`
}
func (m *WorkloadIdentityGet) Valid() error {
m.Name = strings.TrimSpace(m.Name)
v := validator.New()
v.Must(m.Location != "", "location required")
v.Must(m.Project != "", "project required")
v.Must(ReValidName.MatchString(m.Name), "name invalid "+ReValidNameStr)
{
cnt := utf8.RuneCountInString(m.Name)
v.Mustf(cnt >= MinNameLength && cnt <= MaxNameLength, "name must have length between %d-%d characters", MinNameLength, MaxNameLength)
}
return WrapValidate(v)
}
type WorkloadIdentityDelete struct {
Location string `json:"location" yaml:"location"`
Project string `json:"project" yaml:"project"`
Name string `json:"name" yaml:"name"`
}
func (m *WorkloadIdentityDelete) Valid() error {
m.Name = strings.TrimSpace(m.Name)
v := validator.New()
v.Must(m.Location != "", "location required")
v.Must(m.Project != "", "project required")
v.Must(ReValidName.MatchString(m.Name), "name invalid "+ReValidNameStr)
{
cnt := utf8.RuneCountInString(m.Name)
v.Mustf(cnt >= MinNameLength && cnt <= MaxNameLength, "name must have length between %d-%d characters", MinNameLength, MaxNameLength)
}
return WrapValidate(v)
}
type WorkloadIdentityList struct {
Project string `json:"project" yaml:"project"`
Location string `json:"location" yaml:"location"`
}
func (m *WorkloadIdentityList) Valid() error {
v := validator.New()
v.Must(m.Project != "", "project required")
return WrapValidate(v)
}
type WorkloadIdentityItem struct {
Project string `json:"project" yaml:"project"`
Location string `json:"location" yaml:"location"`
Name string `json:"name" yaml:"name"`
GSA string `json:"gsa" yaml:"gsa"`
Status Status `json:"status" yaml:"status"`
Action Action `json:"action" yaml:"action"`
CreatedAt time.Time `json:"createdAt" yaml:"createdAt"`
CreatedBy string `json:"createdBy" yaml:"createdBy"`
}
func (m *WorkloadIdentityItem) Table() [][]string {
table := [][]string{
{"NAME", "GSA", "LOCATION", "AGE"},
{
m.Name,
m.GSA,
m.Location,
age(m.CreatedAt),
},
}
return table
}
type WorkloadIdentityListResult struct {
Items []*WorkloadIdentityItem `json:"items" yaml:"items"`
}
func (m *WorkloadIdentityListResult) Table() [][]string {
table := [][]string{
{"NAME", "GSA", "LOCATION", "AGE"},
}
for _, x := range m.Items {
table = append(table, []string{
x.Name,
x.GSA,
x.Location,
age(x.CreatedAt),
})
}
return table
}