Skip to content

Commit 4ef4888

Browse files
authored
Support iamconfig in rest model (#42)
1 parent 906f2c7 commit 4ef4888

File tree

16 files changed

+301
-68
lines changed

16 files changed

+301
-68
lines changed

api/rest/mapper/mapper.go

Lines changed: 71 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,47 @@ import (
1111
"google.golang.org/protobuf/types/known/wrapperspb"
1212
)
1313

14-
func ToMdmV1Tenant(p *v1.Tenant) *mdmv1.Tenant {
15-
if p == nil {
14+
func ToMdmV1Tenant(t *v1.Tenant) *mdmv1.Tenant {
15+
if t == nil {
1616
return nil
1717
}
1818

1919
return &mdmv1.Tenant{
20-
Meta: ToMdmV1Meta(p.Meta),
21-
Name: p.Name,
22-
Description: p.Description,
23-
Quotas: ToMdmV1QuotaSet(p.Quotas),
24-
DefaultQuotas: ToMdmV1QuotaSet(p.DefaultQuotas),
20+
Meta: ToMdmV1Meta(t.Meta),
21+
Name: t.Name,
22+
Description: t.Description,
23+
Quotas: ToMdmV1QuotaSet(t.Quotas),
24+
DefaultQuotas: ToMdmV1QuotaSet(t.DefaultQuotas),
25+
IamConfig: ToMdmV1IamConfig(t.IAMConfig),
26+
}
27+
}
28+
29+
func ToMdmV1IamConfig(i *v1.IAMConfig) *mdmv1.IAMConfig {
30+
if i == nil {
31+
return nil
32+
}
33+
return &mdmv1.IAMConfig{
34+
IssuerConfig: ToMdmV1IssuerConfig(i.IssuerConfig),
35+
IdmConfig: ToMdmV1IDMConfig(i.IDMConfig),
36+
}
37+
}
38+
39+
func ToMdmV1IssuerConfig(i *v1.IssuerConfig) *mdmv1.IssuerConfig {
40+
if i == nil {
41+
return nil
42+
}
43+
return &mdmv1.IssuerConfig{
44+
Url: i.URL,
45+
ClientId: i.ClientID,
46+
}
47+
}
48+
49+
func ToMdmV1IDMConfig(i *v1.IDMConfig) *mdmv1.IDMConfig {
50+
if i == nil {
51+
return nil
52+
}
53+
return &mdmv1.IDMConfig{
54+
IdmType: i.IDMType,
2555
}
2656
}
2757

@@ -36,6 +66,39 @@ func ToV1Tenant(p *mdmv1.Tenant) *v1.Tenant {
3666
Description: p.Description,
3767
Quotas: ToV1QuotaSet(p.Quotas),
3868
DefaultQuotas: ToV1QuotaSet(p.DefaultQuotas),
69+
IAMConfig: ToV1IAMConfig(p.IamConfig),
70+
}
71+
}
72+
73+
func ToV1IAMConfig(i *mdmv1.IAMConfig) *v1.IAMConfig {
74+
if i == nil {
75+
return nil
76+
}
77+
78+
return &v1.IAMConfig{
79+
IssuerConfig: ToV1IssuerConfig(i.IssuerConfig),
80+
IDMConfig: ToV1IDMConfig(i.IdmConfig),
81+
}
82+
}
83+
84+
func ToV1IssuerConfig(i *mdmv1.IssuerConfig) *v1.IssuerConfig {
85+
if i == nil {
86+
return nil
87+
}
88+
89+
return &v1.IssuerConfig{
90+
URL: i.Url,
91+
ClientID: i.ClientId,
92+
}
93+
}
94+
95+
func ToV1IDMConfig(i *mdmv1.IDMConfig) *v1.IDMConfig {
96+
if i == nil {
97+
return nil
98+
}
99+
100+
return &v1.IDMConfig{
101+
IDMType: i.IdmType,
39102
}
40103
}
41104

@@ -76,6 +139,7 @@ func ToMdmV1QuotaSet(qs *v1.QuotaSet) *mdmv1.QuotaSet {
76139
Cluster: ToMdmV1Quota(qs.Cluster),
77140
Machine: ToMdmV1Quota(qs.Machine),
78141
Ip: ToMdmV1Quota(qs.Ip),
142+
Project: ToMdmV1Quota(qs.Project),
79143
}
80144
}
81145

api/rest/mapper/mapper_test.go

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
package mapper
2+
3+
import (
4+
"github.com/google/go-cmp/cmp"
5+
v1 "github.com/metal-stack/masterdata-api/api/rest/v1"
6+
"reflect"
7+
"testing"
8+
"time"
9+
)
10+
11+
func TestTenantMapperRoundtrip(t *testing.T) {
12+
tests := []struct {
13+
name string
14+
inAndOut *v1.Tenant
15+
}{
16+
{
17+
name: "full roundtrip",
18+
inAndOut: &v1.Tenant{
19+
Meta: &v1.Meta{
20+
Id: "1",
21+
Kind: "tenant",
22+
Apiversion: "1",
23+
Version: 99,
24+
CreatedTime: mustParseTimeP("2021-01-21"),
25+
UpdatedTime: mustParseTimeP("2021-03-01"),
26+
Annotations: map[string]string{
27+
"a": "first",
28+
"b": "second",
29+
},
30+
Labels: []string{
31+
"first label",
32+
},
33+
},
34+
Name: "tnt",
35+
Description: "tnt is a test tenant",
36+
DefaultQuotas: &v1.QuotaSet{
37+
Cluster: &v1.Quota{
38+
Quota: int32p(100),
39+
},
40+
Machine: &v1.Quota{
41+
Quota: int32p(10),
42+
},
43+
Ip: &v1.Quota{
44+
Quota: int32p(20),
45+
},
46+
Project: &v1.Quota{
47+
Quota: int32p(11),
48+
},
49+
},
50+
Quotas: &v1.QuotaSet{
51+
Cluster: &v1.Quota{
52+
Quota: int32p(100),
53+
},
54+
Machine: &v1.Quota{
55+
Quota: int32p(72),
56+
},
57+
Ip: &v1.Quota{
58+
Quota: int32p(30),
59+
},
60+
Project: &v1.Quota{
61+
Quota: int32p(7),
62+
},
63+
},
64+
IAMConfig: &v1.IAMConfig{
65+
IssuerConfig: &v1.IssuerConfig{
66+
URL: "https://oidc.myissuer.com",
67+
ClientID: "47abcdef12",
68+
},
69+
IDMConfig: &v1.IDMConfig{
70+
IDMType: "ldap",
71+
},
72+
},
73+
},
74+
},
75+
{
76+
name: "minimal roundtrip",
77+
inAndOut: &v1.Tenant{
78+
Meta: &v1.Meta{
79+
Id: "1",
80+
Kind: "tenant",
81+
Apiversion: "1",
82+
Version: 99,
83+
CreatedTime: mustParseTimeP("2021-01-21"),
84+
UpdatedTime: mustParseTimeP("2021-03-01"),
85+
},
86+
Name: "tnt",
87+
Description: "tnt is a test tenant",
88+
IAMConfig: &v1.IAMConfig{
89+
IssuerConfig: &v1.IssuerConfig{
90+
URL: "https://oidc.myissuer.com",
91+
ClientID: "47abcdef12",
92+
},
93+
IDMConfig: &v1.IDMConfig{
94+
IDMType: "ldap",
95+
},
96+
},
97+
},
98+
},
99+
}
100+
for _, tt := range tests {
101+
t.Run(tt.name, func(t *testing.T) {
102+
103+
gotMdMV1 := ToMdmV1Tenant(tt.inAndOut)
104+
gotV1 := ToV1Tenant(gotMdMV1)
105+
106+
if !reflect.DeepEqual(tt.inAndOut, gotV1) {
107+
diff := cmp.Diff(tt.inAndOut, gotV1)
108+
t.Errorf("in = %v, want %v, diff %s", tt.inAndOut, gotV1, diff)
109+
}
110+
})
111+
}
112+
}
113+
114+
func int32p(i int) *int32 {
115+
i32 := int32(i)
116+
return &i32
117+
}
118+
119+
func mustParseTimeP(ts string) *time.Time {
120+
t, err := time.Parse("2006-01-02", ts)
121+
if err != nil {
122+
panic(err)
123+
}
124+
return timep(t)
125+
}
126+
127+
func timep(t time.Time) *time.Time {
128+
return &t
129+
}

api/rest/v1/tenant.go

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,37 @@ package v1
22

33
type (
44
Tenant struct {
5-
Meta *Meta `json:"meta,omitempty"`
6-
Name string `json:"name,omitempty"`
7-
Description string `json:"description,omitempty"`
8-
DefaultQuotas *QuotaSet `json:"default_quotas,omitempty"`
9-
Quotas *QuotaSet `json:"quotas,omitempty"`
5+
Meta *Meta `json:"meta,omitempty"`
6+
Name string `json:"name,omitempty"`
7+
Description string `json:"description,omitempty"`
8+
DefaultQuotas *QuotaSet `json:"default_quotas,omitempty"`
9+
Quotas *QuotaSet `json:"quotas,omitempty"`
10+
IAMConfig *IAMConfig `json:"iam_config,omitempty"`
11+
}
12+
13+
IAMConfig struct {
14+
IssuerConfig *IssuerConfig `json:"issuer_config,omitempty"`
15+
IDMConfig *IDMConfig `json:"idm_config,omitempty"`
16+
}
17+
18+
IssuerConfig struct {
19+
URL string `json:"url,omitempty"`
20+
ClientID string `json:"clientID,omitempty"`
21+
}
22+
23+
IDMConfig struct {
24+
IDMType string `json:"idm_type,omitempty"`
1025
}
1126

1227
TenantUpdateRequest struct {
1328
Tenant *Tenant `json:"tenant,omitempty"`
1429
}
1530

1631
TenantResponse struct {
17-
Tenant *Tenant `json:"tenant,omitempty"`
32+
Tenant
33+
}
34+
35+
TenantListResponse struct {
36+
Tenants []*TenantResponse `json:"tenants,omitempty"`
1837
}
1938
)

certs/ca-key.pem

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-----BEGIN EC PRIVATE KEY-----
2-
MHcCAQEEIEGQkJVroLO3fbDfjHzUhaJrz4Iz5eQsGVE1sZ36exQAoAoGCCqGSM49
3-
AwEHoUQDQgAEcq+L831+iQ49DSEwITkst74C4Y0M/xYd+7y1FYsHYxkE7wVNg+J/
4-
UwXatpb8x9ZbheIy26QGFUVCjbx+L4a9Bg==
2+
MHcCAQEEIEHMiDBS1hIPT+/UcXpqRPZkWvLdmrRFML+dHZz2dEBeoAoGCCqGSM49
3+
AwEHoUQDQgAEPcsLXBI4syW4y1oEl71W9pZxxz/AlSvIjBfEMe9ob756lfWmjdSi
4+
HVJ0yLqALaSBFYwsnMVWST69ZV0HTCmlPQ==
55
-----END EC PRIVATE KEY-----

certs/ca.csr

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
-----BEGIN CERTIFICATE REQUEST-----
22
MIH4MIGfAgEAMD0xCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZNdW5pY2gxEDAOBgNV
33
BAcTB0JhdmFyaWExCzAJBgNVBAMTAmNhMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
4-
QgAEcq+L831+iQ49DSEwITkst74C4Y0M/xYd+7y1FYsHYxkE7wVNg+J/UwXatpb8
5-
x9ZbheIy26QGFUVCjbx+L4a9BqAAMAoGCCqGSM49BAMCA0gAMEUCIDj3wvAfKM3S
6-
xzctBm/zKD8vZDt+FQnPiKj2uoIb4NoSAiEAtacrA7xfXyGUZeQWIpuEsnVSNesd
7-
54aEhXdDTh/ALZw=
4+
QgAEPcsLXBI4syW4y1oEl71W9pZxxz/AlSvIjBfEMe9ob756lfWmjdSiHVJ0yLqA
5+
LaSBFYwsnMVWST69ZV0HTCmlPaAAMAoGCCqGSM49BAMCA0gAMEUCIQCacXb7RVaR
6+
5Q1jg7+S9kEV87WxHcxVb4mgneBhDP/RBgIgF8ebyoPdnoPozW2pXI8hBDYKtMq/
7+
ITehYtG1kbn/bLg=
88
-----END CERTIFICATE REQUEST-----

certs/ca.pem

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIBvjCCAWSgAwIBAgIUC3dlg4v0G6DwfBNaMtvUfbcc5tkwCgYIKoZIzj0EAwIw
2+
MIIBvjCCAWSgAwIBAgIUa/tS2dCD3Utcqmi1pk0zhv1LHz0wCgYIKoZIzj0EAwIw
33
PTELMAkGA1UEBhMCREUxDzANBgNVBAgTBk11bmljaDEQMA4GA1UEBxMHQmF2YXJp
4-
YTELMAkGA1UEAxMCY2EwHhcNMjAwMjE4MTAxMDAwWhcNMjUwMjE2MTAxMDAwWjA9
4+
YTELMAkGA1UEAxMCY2EwHhcNMjEwMzExMDgxOTAwWhcNMjYwMzEwMDgxOTAwWjA9
55
MQswCQYDVQQGEwJERTEPMA0GA1UECBMGTXVuaWNoMRAwDgYDVQQHEwdCYXZhcmlh
6-
MQswCQYDVQQDEwJjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABHKvi/N9fokO
7-
PQ0hMCE5LLe+AuGNDP8WHfu8tRWLB2MZBO8FTYPif1MF2raW/MfWW4XiMtukBhVF
8-
Qo28fi+GvQajQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
9-
A1UdDgQWBBTdKgkY5lHmbdAZp64P/49ZYO6kTTAKBggqhkjOPQQDAgNIADBFAiEA
10-
wSC8H1zy6PAjXOguWOCGcqf9Vldr0fR2S5GjNKkl5L8CIBHjhGkBmYOxdxfXACte
11-
SoayBKBVl4NXAxLVKQA+Xj6T
6+
MQswCQYDVQQDEwJjYTBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABD3LC1wSOLMl
7+
uMtaBJe9VvaWccc/wJUryIwXxDHvaG++epX1po3Uoh1SdMi6gC2kgRWMLJzFVkk+
8+
vWVdB0wppT2jQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G
9+
A1UdDgQWBBR0WJT3m1iSSSafGx/JIPVIkWjl9TAKBggqhkjOPQQDAgNIADBFAiEA
10+
/RQ9QZqW0yQ1v/MM1dlIgUpwZaHGgwGTEnKQw7MNJR4CIHhPEvuHMdA4GJ5GK/IL
11+
mUsRm3qnlPKV+Z1OpG+NNk0X
1212
-----END CERTIFICATE-----

certs/client-key.pem

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-----BEGIN EC PRIVATE KEY-----
2-
MHcCAQEEIKZZ1r7bBblcfQo/4OMWMYIQVmf4Mu43e+a8pdMY2ofpoAoGCCqGSM49
3-
AwEHoUQDQgAEveM3FlZwkP3xXgIq9RF1kd8t77XbcF3qH83WA63MMgUVWJfSjZlz
4-
Zwp1bl2NhoKLZqylgc5hrDFBO+FygYsQXg==
2+
MHcCAQEEIOoqZwOgGjgfAiu87oHG8ap3mMP+Z6ppLiNntnJim5sdoAoGCCqGSM49
3+
AwEHoUQDQgAEQ0D1FT4nOQjBWWfrX4GFmaMqgGIRAqfLLgwx2XBk4tMRursoaooe
4+
YNTEgBe755kLwqxSIMMKhv8VF2Az1mS0qg==
55
-----END EC PRIVATE KEY-----

certs/client.csr

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
-----BEGIN CERTIFICATE REQUEST-----
2-
MIIBGTCBwQIBADBBMQswCQYDVQQGEwJERTEPMA0GA1UECBMGTXVuaWNoMRAwDgYD
2+
MIIBGzCBwQIBADBBMQswCQYDVQQGEwJERTEPMA0GA1UECBMGTXVuaWNoMRAwDgYD
33
VQQHEwdCYXZhcmlhMQ8wDQYDVQQDEwZjbGllbnQwWTATBgcqhkjOPQIBBggqhkjO
4-
PQMBBwNCAAS94zcWVnCQ/fFeAir1EXWR3y3vtdtwXeofzdYDrcwyBRVYl9KNmXNn
5-
CnVuXY2GgotmrKWBzmGsMUE74XKBixBeoB4wHAYJKoZIhvcNAQkOMQ8wDTALBgNV
6-
HREEBDACggAwCgYIKoZIzj0EAwIDRwAwRAIgMshqi4F8pOU9z/dLiOVEZFafjFft
7-
9IqfnZyDYE2UuhcCIHdF4TstfYqO8DGdQ4miWchtSGz69L49FRqEePzqQ2Xf
4+
PQMBBwNCAARDQPUVPic5CMFZZ+tfgYWZoyqAYhECp8suDDHZcGTi0xG6uyhqih5g
5+
1MSAF7vnmQvCrFIgwwqG/xUXYDPWZLSqoB4wHAYJKoZIhvcNAQkOMQ8wDTALBgNV
6+
HREEBDACggAwCgYIKoZIzj0EAwIDSQAwRgIhAJejLc3w2RQIRcntwQYxWGbRNT5d
7+
7Nl8e4s1gW8M+7P+AiEAy2ebRKBxQ9zRXhdvoVi+XVuyOYpJSEOVLmiOr4rtEe4=
88
-----END CERTIFICATE REQUEST-----

certs/client.pem

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
-----BEGIN CERTIFICATE-----
2-
MIICBDCCAaqgAwIBAgIUFh0lzDY1mOp5KDNcCAN5ZkZQ9h8wCgYIKoZIzj0EAwIw
2+
MIICBDCCAaqgAwIBAgIUOLeJ8R/LfH83RVdksn49TH69N4AwCgYIKoZIzj0EAwIw
33
PTELMAkGA1UEBhMCREUxDzANBgNVBAgTBk11bmljaDEQMA4GA1UEBxMHQmF2YXJp
4-
YTELMAkGA1UEAxMCY2EwHhcNMjAwMjE4MTAxMDAwWhcNMjEwMjE3MTAxMDAwWjBB
4+
YTELMAkGA1UEAxMCY2EwHhcNMjEwMzExMDgxOTAwWhcNMjIwMzExMDgxOTAwWjBB
55
MQswCQYDVQQGEwJERTEPMA0GA1UECBMGTXVuaWNoMRAwDgYDVQQHEwdCYXZhcmlh
6-
MQ8wDQYDVQQDEwZjbGllbnQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAS94zcW
7-
VnCQ/fFeAir1EXWR3y3vtdtwXeofzdYDrcwyBRVYl9KNmXNnCnVuXY2GgotmrKWB
8-
zmGsMUE74XKBixBeo4GDMIGAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr
9-
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBSKA4sxGrYLfpOY1FNRmlyl
10-
H0103DAfBgNVHSMEGDAWgBTdKgkY5lHmbdAZp64P/49ZYO6kTTALBgNVHREEBDAC
11-
ggAwCgYIKoZIzj0EAwIDSAAwRQIgWOJamubU0GD09VWtQO4uu2T8EAfpDW3HDRxk
12-
ZEjpmOUCIQCjvgi78HBTwcPx/psYZ8V3ND6yXU7S2FoFTnoFj7jL4g==
6+
MQ8wDQYDVQQDEwZjbGllbnQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARDQPUV
7+
Pic5CMFZZ+tfgYWZoyqAYhECp8suDDHZcGTi0xG6uyhqih5g1MSAF7vnmQvCrFIg
8+
wwqG/xUXYDPWZLSqo4GDMIGAMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggr
9+
BgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQqWD6Jy3glt19w34COTR9w
10+
MAcQwDAfBgNVHSMEGDAWgBR0WJT3m1iSSSafGx/JIPVIkWjl9TALBgNVHREEBDAC
11+
ggAwCgYIKoZIzj0EAwIDSAAwRQIgYoFMxsY0EcLsRauPEVE/wj+cdLmlyw6GHdZT
12+
0no/By4CIQDEcZjb5Ik9MsYwlAssv5e/yM1pds8FHnQXR7kNS5VaTQ==
1313
-----END CERTIFICATE-----

certs/server-key.pem

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
-----BEGIN EC PRIVATE KEY-----
2-
MHcCAQEEIKg7BDL21D1meMTPaWqiV9CTQts16hwyqVuqowTO9ErxoAoGCCqGSM49
3-
AwEHoUQDQgAEwM5ezGeC60TuLXG5EfDrNuVitHWAGCScCcJerfc3kX8Kgl9iGCgC
4-
GXY6xuOZqolmTRzhfu3z2aqvWGC2Rys3Iw==
2+
MHcCAQEEIKqRUMgqpdz8bdCG40yG8AjWdFKz22/Vi5mDUH+XLFopoAoGCCqGSM49
3+
AwEHoUQDQgAEKZ2yA+VMK+8M0sTyzgGYpLROOsjerdLmptd1+Akap04zTHuCC0Kq
4+
ACo4m3RDki1/MoNd7ABo54AughSvohoofg==
55
-----END EC PRIVATE KEY-----

0 commit comments

Comments
 (0)