-
Notifications
You must be signed in to change notification settings - Fork 40
/
types.go
601 lines (548 loc) · 26.2 KB
/
types.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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
package kong
import (
"encoding/json"
"fmt"
"strings"
)
// Service represents a Service in Kong.
// Read https://getkong.org/docs/0.13.x/admin-api/#Service-object
// +k8s:deepcopy-gen=true
type Service struct {
ClientCertificate *Certificate `json:"client_certificate,omitempty" yaml:"client_certificate,omitempty"`
ConnectTimeout *int `json:"connect_timeout,omitempty" yaml:"connect_timeout,omitempty"`
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
Host *string `json:"host,omitempty" yaml:"host,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Path *string `json:"path,omitempty" yaml:"path,omitempty"`
Port *int `json:"port,omitempty" yaml:"port,omitempty"`
Protocol *string `json:"protocol,omitempty" yaml:"protocol,omitempty"`
ReadTimeout *int `json:"read_timeout,omitempty" yaml:"read_timeout,omitempty"`
Retries *int `json:"retries,omitempty" yaml:"retries,omitempty"`
UpdatedAt *int `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
URL *string `json:"url,omitempty" yaml:"url,omitempty"`
WriteTimeout *int `json:"write_timeout,omitempty" yaml:"write_timeout,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
TLSVerify *bool `json:"tls_verify,omitempty" yaml:"tls_verify,omitempty"`
TLSVerifyDepth *int `json:"tls_verify_depth,omitempty" yaml:"tls_verify_depth,omitempty"`
CACertificates []*string `json:"ca_certificates,omitempty" yaml:"ca_certificates,omitempty"`
}
// CIDRPort represents a set of CIDR and a port.
// +k8s:deepcopy-gen=true
type CIDRPort struct {
IP *string `json:"ip,omitempty" yaml:"ip,omitempty"`
Port *int `json:"port,omitempty" yaml:"port,omitempty"`
}
// Route represents a Route in Kong.
// Read https://getkong.org/docs/0.13.x/admin-api/#Route-object
// +k8s:deepcopy-gen=true
type Route struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Hosts []*string `json:"hosts,omitempty" yaml:"hosts,omitempty"`
Headers map[string][]string `json:"headers,omitempty" yaml:"headers,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Methods []*string `json:"methods,omitempty" yaml:"methods,omitempty"`
Paths []*string `json:"paths,omitempty" yaml:"paths,omitempty"`
PathHandling *string `json:"path_handling,omitempty" yaml:"path_handling,omitempty"`
PreserveHost *bool `json:"preserve_host,omitempty" yaml:"preserve_host,omitempty"`
Protocols []*string `json:"protocols,omitempty" yaml:"protocols,omitempty"`
RegexPriority *int `json:"regex_priority,omitempty" yaml:"regex_priority,omitempty"`
Service *Service `json:"service,omitempty" yaml:"service,omitempty"`
StripPath *bool `json:"strip_path,omitempty" yaml:"strip_path,omitempty"`
UpdatedAt *int `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
SNIs []*string `json:"snis,omitempty" yaml:"snis,omitempty"`
Sources []*CIDRPort `json:"sources,omitempty" yaml:"sources,omitempty"`
Destinations []*CIDRPort `json:"destinations,omitempty" yaml:"destinations,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
HTTPSRedirectStatusCode *int `json:"https_redirect_status_code,omitempty" yaml:"https_redirect_status_code,omitempty"`
// Kong buffers requests and responses by default. Buffering is not always
// desired, for instance if large payloads are being proxied using HTTP 1.1
// chunked encoding.
//
// The request and response route buffering options are enabled by default
// and allow the user to disable buffering if desired for their use case.
//
// SEE ALSO:
// - https://github.com/Kong/kong/pull/6057
// - https://docs.konghq.com/2.2.x/admin-api/#route-object
//
RequestBuffering *bool `json:"request_buffering,omitempty" yaml:"request_buffering,omitempty"`
ResponseBuffering *bool `json:"response_buffering,omitempty" yaml:"response_buffering,omitempty"`
}
// Consumer represents a Consumer in Kong.
// Read https://getkong.org/docs/0.13.x/admin-api/#consumer-object
// +k8s:deepcopy-gen=true
type Consumer struct {
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
CustomID *string `json:"custom_id,omitempty" yaml:"custom_id,omitempty"`
Username *string `json:"username,omitempty" yaml:"username,omitempty"`
CreatedAt *int64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Certificate represents a Certificate in Kong.
// Read https://getkong.org/docs/0.14.x/admin-api/#certificate-object
// +k8s:deepcopy-gen=true
type Certificate struct {
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Cert *string `json:"cert,omitempty" yaml:"cert,omitempty"`
CertAlt *string `json:"cert_alt,omitempty" yaml:"cert_alt,omitempty"`
Key *string `json:"key,omitempty" yaml:"key,omitempty"`
KeyAlt *string `json:"key_alt,omitempty" yaml:"key_alt,omitempty"`
CreatedAt *int64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
SNIs []*string `json:"snis,omitempty" yaml:"snis,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// SNI represents a SNI in Kong.
// Read https://getkong.org/docs/0.14.x/admin-api/#sni-object
// +k8s:deepcopy-gen=true
type SNI struct {
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
CreatedAt *int64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Certificate *Certificate `json:"certificate,omitempty" yaml:"certificate,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Healthy configures thresholds and HTTP status codes
// to mark targets healthy for an upstream.
// +k8s:deepcopy-gen=true
type Healthy struct {
HTTPStatuses []int `json:"http_statuses,omitempty" yaml:"http_statuses,omitempty"`
//+kubebuilder:validation:Minimum=0
Interval *int `json:"interval,omitempty" yaml:"interval,omitempty"`
//+kubebuilder:validation:Minimum=0
Successes *int `json:"successes,omitempty" yaml:"successes,omitempty"`
}
// Unhealthy configures thresholds and HTTP status codes
// to mark targets unhealthy.
// +k8s:deepcopy-gen=true
type Unhealthy struct {
//+kubebuilder:validation:Minimum=0
HTTPFailures *int `json:"http_failures,omitempty" yaml:"http_failures,omitempty"`
HTTPStatuses []int `json:"http_statuses,omitempty" yaml:"http_statuses,omitempty"`
//+kubebuilder:validation:Minimum=0
TCPFailures *int `json:"tcp_failures,omitempty" yaml:"tcp_failures,omitempty"`
//+kubebuilder:validation:Minimum=0
Timeouts *int `json:"timeouts,omitempty" yaml:"timeouts,omitempty"`
//+kubebuilder:validation:Minimum=0
Interval *int `json:"interval,omitempty" yaml:"interval,omitempty"`
}
// ActiveHealthcheck configures active health check probing.
// +k8s:deepcopy-gen=true
type ActiveHealthcheck struct {
//+kubebuilder:validation:Minimum=1
Concurrency *int `json:"concurrency,omitempty" yaml:"concurrency,omitempty"`
Healthy *Healthy `json:"healthy,omitempty" yaml:"healthy,omitempty"`
//+kubebuilder:validation:Pattern=^/.*$
HTTPPath *string `json:"http_path,omitempty" yaml:"http_path,omitempty"`
HTTPSSni *string `json:"https_sni,omitempty" yaml:"https_sni,omitempty"`
HTTPSVerifyCertificate *bool `json:"https_verify_certificate,omitempty" yaml:"https_verify_certificate,omitempty"`
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
//+kubebuilder:validation:Minimum=0
Timeout *int `json:"timeout,omitempty" yaml:"timeout,omitempty"`
Unhealthy *Unhealthy `json:"unhealthy,omitempty" yaml:"unhealthy,omitempty"`
}
// PassiveHealthcheck configures passive checks around
// passive health checks.
// +k8s:deepcopy-gen=true
type PassiveHealthcheck struct {
Healthy *Healthy `json:"healthy,omitempty" yaml:"healthy,omitempty"`
Type *string `json:"type,omitempty" yaml:"type,omitempty"`
Unhealthy *Unhealthy `json:"unhealthy,omitempty" yaml:"unhealthy,omitempty"`
}
// Healthcheck represents a health-check config of an upstream
// in Kong.
// +k8s:deepcopy-gen=true
type Healthcheck struct {
Active *ActiveHealthcheck `json:"active,omitempty" yaml:"active,omitempty"`
Passive *PassiveHealthcheck `json:"passive,omitempty" yaml:"passive,omitempty"`
Threshold *float64 `json:"threshold,omitempty" yaml:"threshold,omitempty"`
}
// HealthDataAddress represents the health data address of a target
// +k8s:deepcopy-gen=true
type HealthDataAddress struct {
Port *int `json:"port,omitempty" yaml:"port,omitempty"`
IP *string `json:"ip,omitempty" yaml:"ip,omitempty"`
Health *string `json:"health,omitempty" yaml:"data,omitempty"`
Weight *int `json:"weight,omitempty" yaml:"weight,omitempty"`
}
// HealthDataWeight represents the health data weight of a target
// +k8s:deepcopy-gen=true
type HealthDataWeight struct {
Total *int `json:"total,omitempty" yaml:"total,omitempty"`
Available *int `json:"available,omitempty" yaml:"available,omitempty"`
Unavailable *int `json:"unavailable,omitempty" yaml:"unavailable,omitempty"`
}
// HealthData represents the health data of a target
// +k8s:deepcopy-gen=true
type HealthData struct {
Host *string `json:"host,omitempty" yaml:"host,omitempty"`
Port *int `json:"port,omitempty" yaml:"port,omitempty"`
NodeWeight *int `json:"nodeWeight,omitempty" yaml:"nodeWeight,omitempty"`
Weight *HealthDataWeight `json:"weight,omitempty" yaml:"weight,omitempty"`
Addresses []*HealthDataAddress `json:"addresses,omitempty" yaml:"addresses,omitempty"`
DNS *string `json:"dns,omitempty" yaml:"dns,omitempty"`
}
// UpstreamNodeHealth represents the node health of a upstream
// +k8s:deepcopy-gen=true
type UpstreamNodeHealth struct {
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
CreatedAt *float64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Data *HealthData `json:"data,omitempty" yaml:"data,omitempty"`
Health *string `json:"health,omitempty" yaml:"data,omitempty"`
Target *string `json:"target,omitempty" yaml:"target,omitempty"`
Upstream *Upstream `json:"upstream,omitempty" yaml:"upstream,omitempty"`
Weight *int `json:"weight,omitempty" yaml:"weight,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Upstream represents an Upstream in Kong.
// +k8s:deepcopy-gen=true
type Upstream struct {
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
HostHeader *string `json:"host_header,omitempty" yaml:"host_header,omitempty"`
ClientCertificate *Certificate `json:"client_certificate,omitempty" yaml:"client_certificate,omitempty"`
Algorithm *string `json:"algorithm,omitempty" yaml:"algorithm,omitempty"`
Slots *int `json:"slots,omitempty" yaml:"slots,omitempty"`
Healthchecks *Healthcheck `json:"healthchecks,omitempty" yaml:"healthchecks,omitempty"`
CreatedAt *int64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
HashOn *string `json:"hash_on,omitempty" yaml:"hash_on,omitempty"`
HashFallback *string `json:"hash_fallback,omitempty" yaml:"hash_fallback,omitempty"`
HashOnHeader *string `json:"hash_on_header,omitempty" yaml:"hash_on_header,omitempty"`
HashFallbackHeader *string `json:"hash_fallback_header,omitempty" yaml:"hash_fallback_header,omitempty"`
HashOnCookie *string `json:"hash_on_cookie,omitempty" yaml:"hash_on_cookie,omitempty"`
HashOnCookiePath *string `json:"hash_on_cookie_path,omitempty" yaml:"hash_on_cookie_path,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Target represents a Target in Kong.
// +k8s:deepcopy-gen=true
type Target struct {
CreatedAt *float64 `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Target *string `json:"target,omitempty" yaml:"target,omitempty"`
Upstream *Upstream `json:"upstream,omitempty" yaml:"upstream,omitempty"`
Weight *int `json:"weight,omitempty" yaml:"weight,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Configuration represents a config of a plugin in Kong.
type Configuration map[string]interface{}
// KongPluginOrdering contains before or after instructions for plugin execution order
// +k8s:deepcopy-gen=true
type PluginOrdering struct {
Before PluginOrderingPhase `json:"before,omitempty"`
After PluginOrderingPhase `json:"after,omitempty"`
}
// TODO this explanation is bad, but the organization of the overall struct defies a good explanation at this level
// beyond "they're the things used in PluginOrdering. This is a map from a phase name (which can only be "access"
// in the initial 3.0 release) to a list of plugins that the plugin containing the PluginOrdering should run before
// or after
// PluginOrderingPhase indicates which plugins in a phase should affect the target plugin's order
// +k8s:deepcopy-gen=true
type PluginOrderingPhase map[string][]string
// DeepCopyInto copies the receiver, writing into out. in must be non-nil.
func (in Configuration) DeepCopyInto(out *Configuration) {
// Resorting to JSON since interface{} cannot be DeepCopied easily.
// This could be replaced using reflection-fu.
// XXX Ignoring errors
b, _ := json.Marshal(&in)
_ = json.Unmarshal(b, out)
}
// DeepCopy copies the receiver, creating a new Configuration.
func (in Configuration) DeepCopy() Configuration {
if in == nil {
return nil
}
out := new(Configuration)
in.DeepCopyInto(out)
return *out
}
// Plugin represents a Plugin in Kong.
// Read https://getkong.org/docs/0.13.x/admin-api/#Plugin-object
// +k8s:deepcopy-gen=true
type Plugin struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Route *Route `json:"route,omitempty" yaml:"route,omitempty"`
Service *Service `json:"service,omitempty" yaml:"service,omitempty"`
Consumer *Consumer `json:"consumer,omitempty" yaml:"consumer,omitempty"`
Config Configuration `json:"config,omitempty" yaml:"config,omitempty"`
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
RunOn *string `json:"run_on,omitempty" yaml:"run_on,omitempty"`
Ordering *PluginOrdering `json:"ordering,omitempty" yaml:"ordering,omitempty"`
Protocols []*string `json:"protocols,omitempty" yaml:"protocols,omitempty"`
Tags []*string `json:"tags,omitempty" yaml:"tags,omitempty"`
}
// Enterprise Entities
// Workspace represents a Workspace in Kong.
type Workspace struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
Config map[string]interface{} `json:"config,omitempty" yaml:"config,omitempty"`
Meta map[string]interface{} `json:"meta,omitempty" yaml:"meta,omitempty"`
}
// Admin represents an Admin in Kong.
// +k8s:deepcopy-gen=true
type Admin struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Email *string `json:"email,omitempty" yaml:"email,omitempty"`
Username *string `json:"username,omitempty" yaml:"username,omitempty"`
Password *string `json:"password,omitempty" yaml:"password,omitempty"`
CustomID *string `json:"custom_id,omitempty" yaml:"custom_id,omitempty"`
RBACTokenEnabled *bool `json:"rbac_token_enabled,omitempty" yaml:"rbac_token_enabled,omitempty"`
Status *int `json:"status,omitempty" yaml:"status,omitempty"`
Token *string `json:"token,omitempty" yaml:"token,omitempty"`
}
// RBACUser represents an RBAC user in Kong Enterprise
// +k8s:deepcopy-gen=true
type RBACUser struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Enabled *bool `json:"enabled,omitempty" yaml:"enabled,omitempty"`
UserToken *string `json:"user_token,omitempty" yaml:"user_token,omitempty"`
UserTokenIdent *string `json:"user_token_ident,omitempty" yaml:"user_token_ident,omitempty"`
}
// WorkspaceEntity represents a WorkspaceEntity in Kong
// +k8s:deepcopy-gen=true
type WorkspaceEntity struct {
EntityID *string `json:"entity_id,omitempty" yaml:"entity_id,omitempty"`
EntityType *string `json:"entity_type,omitempty" yaml:"entity_type,omitempty"`
UniqueFieldName *string `json:"unique_field_name,omitempty" yaml:"unique_field_name,omitempty"`
UniqueFieldValue *string `json:"unique_field_value,omitempty" yaml:"unique_field_value,omitempty"`
WorkspaceID *string `json:"workspace_id,omitempty" yaml:"workspace_id,omitempty"`
WorkspaceName *string `json:"workspace_name,omitempty" yaml:"workspace_name,omitempty"`
}
// RBACRole represents an RBAC Role in Kong.
// +k8s:deepcopy-gen=true
type RBACRole struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
IsDefault *bool `json:"is_default,omitempty" yaml:"is_default,omitempty"`
}
// RBACEndpointPermission represents an RBAC Endpoint Permission in Kong Enterprise
// +k8s:deepcopy-gen=true
// Note: this type implements a custom JSON marshaler. Review the associated MarshalJSON()
// function if it does not marshal as expected.
type RBACEndpointPermission struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Workspace *string `json:"workspace,omitempty" yaml:"workspace,omitempty"`
Endpoint *string `json:"endpoint,omitempty" yaml:"endpoint,omitempty"`
Actions []*string `json:"actions,omitempty" yaml:"actions,omitempty"`
Negative *bool `json:"negative,omitempty" yaml:"negative,omitempty"`
Role *RBACRole `json:"role,omitempty" yaml:"role,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
}
// MarshalJSON marshals an endpoint permission into a suitable form for the Kong admin API
func (e *RBACEndpointPermission) MarshalJSON() ([]byte, error) {
type ep struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
Workspace *string `json:"workspace,omitempty" yaml:"workspace,omitempty"`
Endpoint *string `json:"endpoint,omitempty" yaml:"endpoint,omitempty"`
Actions *string `json:"actions,omitempty" yaml:"actions,omitempty"`
Negative *bool `json:"negative,omitempty" yaml:"negative,omitempty"`
Role *RBACRole `json:"role,omitempty" yaml:"role,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
}
var actions []string
for _, action := range e.Actions {
actions = append(actions, *action)
}
return json.Marshal(&ep{
CreatedAt: e.CreatedAt,
Workspace: e.Workspace,
Endpoint: e.Endpoint,
Actions: String(strings.Join(actions, ",")),
Negative: e.Negative,
Comment: e.Comment,
})
}
// RBACEntityPermission represents an RBAC Entity Permission in Kong Enterprise
// +k8s:deepcopy-gen=true
// Note: this type implements a custom JSON marshaler. Review the associated MarshalJSON()
// function if it does not marshal as expected.
type RBACEntityPermission struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
EntityID *string `json:"entity_id,omitempty" yaml:"entity_id,omitempty"`
EntityType *string `json:"entity_type,omitempty" yaml:"entity_type,omitempty"`
Actions []*string `json:"actions,omitempty" yaml:"actions,omitempty"`
Negative *bool `json:"negative,omitempty" yaml:"negative,omitempty"`
Role *RBACRole `json:"role,omitempty" yaml:"role,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
}
// MarshalJSON marshals an endpoint permission into a suitable form for the Kong admin API
func (e *RBACEntityPermission) MarshalJSON() ([]byte, error) {
type ep struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
EntityID *string `json:"entity_id,omitempty" yaml:"entity_id,omitempty"`
EntityType *string `json:"entity_type,omitempty" yaml:"entity_type,omitempty"`
Actions *string `json:"actions,omitempty" yaml:"actions,omitempty"`
Negative *bool `json:"negative,omitempty" yaml:"negative,omitempty"`
Role *RBACRole `json:"role,omitempty" yaml:"role,omitempty"`
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
}
var actions []string
for _, action := range e.Actions {
actions = append(actions, *action)
}
return json.Marshal(&ep{
CreatedAt: e.CreatedAt,
EntityID: e.EntityID,
EntityType: e.EntityType,
Actions: String(strings.Join(actions, ",")),
Negative: e.Negative,
Comment: e.Comment,
})
}
// RBACPermissionsList is a list of permissions, both endpoint and entity, associated with a Role.
type RBACPermissionsList struct {
Endpoints map[string]interface{} `json:"endpoints,omitempty" yaml:"endpoints,omitempty"`
Entities map[string]interface{} `json:"entities,omitempty" yaml:"entities,omitempty"`
}
// Developer represents a Developer in Kong.
// +k8s:deepcopy-gen=true
type Developer struct {
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Status *int `json:"status,omitempty" yaml:"status,omitempty"`
Email *string `json:"email,omitempty" yaml:"email,omitempty"`
CustomID *string `json:"custom_id,omitempty" yaml:"custom_id,omitempty"`
UpdatedAt *int `json:"updated_at,omitempty" yaml:"updated_at,omitempty"`
Roles []*string `json:"roles,omitempty" yaml:"roles,omitempty"`
RbacUser *RBACUser `json:"rbac_user,omitempty" yaml:"rbac_user,omitempty"`
Meta *string `json:"meta,omitempty" yaml:"meta,omitempty"`
Password *string `json:"password,omitempty" yaml:"password,omitempty"`
}
// DeveloperRole represents a Developer Role in Kong.
// +k8s:deepcopy-gen=true
type DeveloperRole struct {
Comment *string `json:"comment,omitempty" yaml:"comment,omitempty"`
CreatedAt *int `json:"created_at,omitempty" yaml:"created_at,omitempty"`
ID *string `json:"id,omitempty" yaml:"id,omitempty"`
Name *string `json:"name,omitempty" yaml:"name,omitempty"`
}
// Info represents the information concerning Kong.
type Info struct {
Version string `json:"version,omitempty" yaml:"version,omitempty"`
Configuration *RuntimeConfiguration `json:"configuration,omitempty" yaml:"configuration,omitempty"`
}
// RuntimeConfiguration represents the runtime configuration of Kong.
type RuntimeConfiguration struct {
Database string `json:"database,omitempty" yaml:"database,omitempty"`
Portal bool `json:"portal,omitempty" yaml:"portal,omitempty"`
RBAC string `json:"rbac,omitempty" yaml:"rbac,omitempty"`
}
// FriendlyName returns the endpoint key name or ID.
func (s *Service) FriendlyName() string {
if s.Name != nil {
return *s.Name
}
if s.ID != nil {
return *s.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (r *Route) FriendlyName() string {
if r.Name != nil {
return *r.Name
}
if r.ID != nil {
return *r.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (u *Upstream) FriendlyName() string {
if u.Name != nil {
return *u.Name
}
if u.ID != nil {
return *u.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (t *Target) FriendlyName() string {
if t.Target != nil {
return *t.Target
}
if t.ID != nil {
return *t.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (c *Certificate) FriendlyName() string {
if c.ID != nil {
return *c.ID
}
if c.Cert != nil {
return *c.Cert
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (s *SNI) FriendlyName() string {
if s.Name != nil {
return *s.Name
}
if s.ID != nil {
return *s.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (p *Plugin) FriendlyName() string {
if p.Name != nil {
return *p.Name
}
if p.ID != nil {
return *p.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (c *Consumer) FriendlyName() string {
if c.Username != nil {
return *c.Username
}
if c.ID != nil {
return *c.ID
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (c *CACertificate) FriendlyName() string {
if c.ID != nil {
return *c.ID
}
if c.Cert != nil {
return *c.Cert
}
return ""
}
// FriendlyName returns the endpoint key name or ID.
func (r *RBACRole) FriendlyName() string {
if r.Name != nil {
return *r.Name
}
if r.ID != nil {
return *r.ID
}
return ""
}
// FriendlyName returns a composite Name base on Role , workspace, and endpoint
func (e *RBACEndpointPermission) FriendlyName() string {
if e.Role != nil && e.Workspace != nil && e.Endpoint != nil {
return fmt.Sprintf("%s-%s-%s", e.Role.FriendlyName(), *e.Workspace, *e.Endpoint)
}
return ""
}