Skip to content

Commit 9859bea

Browse files
authored
Revise azsecrets model fields (Azure#18258)
1 parent 931f528 commit 9859bea

File tree

5 files changed

+83
-235
lines changed

5 files changed

+83
-235
lines changed

sdk/keyvault/azsecrets/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
* `NewListPropertiesOfSecretVersionsPager` to `NewListPropertiesOfSecretVersionsPager`
1515
* Renamed `ListSecretVersionsOptions` to `ListPropertiesOfSecretVersionsOptions` and
1616
`ListSecretsOptions` to `ListPropertiesOfSecretsOptions`
17+
* Renamed `Properties.IsManaged` to `.Managed`
18+
* Deleted redundant fields `ContentType`, `IsManaged` and `Tags` from several types. These fields are available via the types'
19+
`Properties` fields, for example `SecretItem.Properties`.
20+
* Changed paged API content values to pointer types. For example, `ListPropertiesOfSecretsResponse.Secrets`
21+
changed type from `[]SecretItem` to `[]*SecretItem`.
1722

1823
### Bugs Fixed
1924

sdk/keyvault/azsecrets/client.go

Lines changed: 43 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -69,28 +69,13 @@ type GetSecretResponse struct {
6969
}
7070

7171
func getSecretResponseFromGenerated(i generated.KeyVaultClientGetSecretResponse) GetSecretResponse {
72-
vaultURL, name, version := shared.ParseID(i.ID)
72+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
7373
return GetSecretResponse{
7474
Secret: Secret{
75-
Properties: &Properties{
76-
ContentType: i.ContentType,
77-
CreatedOn: i.Attributes.Created,
78-
Enabled: i.Attributes.Enabled,
79-
ExpiresOn: i.Attributes.Expires,
80-
IsManaged: i.Managed,
81-
KeyID: i.Kid,
82-
NotBefore: i.Attributes.NotBefore,
83-
RecoverableDays: i.Attributes.RecoverableDays,
84-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
85-
Tags: convertPtrMap(i.Tags),
86-
UpdatedOn: i.Attributes.Updated,
87-
VaultURL: vaultURL,
88-
Version: version,
89-
Name: name,
90-
},
91-
ID: i.ID,
92-
Name: name,
93-
Value: i.Value,
75+
ID: i.ID,
76+
Name: props.Name,
77+
Properties: props,
78+
Value: i.Value,
9479
},
9580
}
9681
}
@@ -114,9 +99,6 @@ type SetSecretOptions struct {
11499

115100
// The secret management attributes.
116101
Properties *Properties `json:"attributes,omitempty"`
117-
118-
// Application specific metadata in the form of key-value pairs.
119-
Tags map[string]string `json:"tags,omitempty"`
120102
}
121103

122104
// Convert the exposed struct to the generated code version
@@ -134,28 +116,13 @@ type SetSecretResponse struct {
134116

135117
// convert generated response to publicly exposed response.
136118
func setSecretResponseFromGenerated(i generated.KeyVaultClientSetSecretResponse) SetSecretResponse {
137-
vaultURL, name, version := shared.ParseID(i.ID)
119+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
138120
return SetSecretResponse{
139121
Secret: Secret{
140-
Properties: &Properties{
141-
ContentType: i.ContentType,
142-
CreatedOn: i.Attributes.Created,
143-
Enabled: i.Attributes.Enabled,
144-
ExpiresOn: i.Attributes.Expires,
145-
IsManaged: i.Managed,
146-
KeyID: i.Kid,
147-
NotBefore: i.Attributes.NotBefore,
148-
RecoverableDays: i.Attributes.RecoverableDays,
149-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
150-
Tags: convertPtrMap(i.Tags),
151-
UpdatedOn: i.Attributes.Updated,
152-
VaultURL: vaultURL,
153-
Version: version,
154-
Name: name,
155-
},
156-
ID: i.ID,
157-
Name: name,
158-
Value: i.Value,
122+
ID: i.ID,
123+
Name: props.Name,
124+
Properties: props,
125+
Value: i.Value,
159126
},
160127
}
161128
}
@@ -166,14 +133,16 @@ func (c *Client) SetSecret(ctx context.Context, name string, value string, optio
166133
options = &SetSecretOptions{}
167134
}
168135
var secretAttribs generated.SecretAttributes
136+
var tags map[string]*string
169137
if options.Properties != nil {
170138
secretAttribs = *options.Properties.toGenerated()
139+
tags = options.Properties.Tags
171140
}
172141
resp, err := c.kvClient.SetSecret(ctx, c.vaultUrl, name, generated.SecretSetParameters{
173142
Value: &value,
174143
ContentType: options.ContentType,
175144
SecretAttributes: &secretAttribs,
176-
Tags: convertToGeneratedMap(options.Tags),
145+
Tags: tags,
177146
}, options.toGenerated())
178147
if err != nil {
179148
return SetSecretResponse{}, err
@@ -187,27 +156,12 @@ type DeleteSecretResponse struct {
187156
}
188157

189158
func deleteSecretResponseFromGenerated(i generated.KeyVaultClientDeleteSecretResponse) DeleteSecretResponse {
190-
vaultURL, name, version := shared.ParseID(i.ID)
159+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
191160
return DeleteSecretResponse{
192161
DeletedSecret: DeletedSecret{
193-
ID: i.ID,
194-
Name: name,
195-
Properties: &Properties{
196-
ContentType: i.ContentType,
197-
CreatedOn: i.Attributes.Created,
198-
Enabled: i.Attributes.Enabled,
199-
ExpiresOn: i.Attributes.Expires,
200-
IsManaged: i.Managed,
201-
KeyID: i.Kid,
202-
NotBefore: i.Attributes.NotBefore,
203-
RecoverableDays: i.Attributes.RecoverableDays,
204-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
205-
Tags: convertPtrMap(i.Tags),
206-
UpdatedOn: i.Attributes.Updated,
207-
VaultURL: vaultURL,
208-
Version: version,
209-
Name: name,
210-
},
162+
ID: i.ID,
163+
Name: props.Name,
164+
Properties: props,
211165
RecoveryID: i.RecoveryID,
212166
DeletedOn: i.DeletedDate,
213167
ScheduledPurgeDate: i.ScheduledPurgeDate,
@@ -274,29 +228,14 @@ type GetDeletedSecretResponse struct {
274228

275229
// Convert the generated response to the publicly exposed version
276230
func getDeletedSecretResponseFromGenerated(i generated.KeyVaultClientGetDeletedSecretResponse) GetDeletedSecretResponse {
277-
vaultURL, name, version := shared.ParseID(i.ID)
231+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
278232
return GetDeletedSecretResponse{
279233
DeletedSecret: DeletedSecret{
280-
Properties: &Properties{
281-
ContentType: i.ContentType,
282-
CreatedOn: i.Attributes.Created,
283-
Enabled: i.Attributes.Enabled,
284-
ExpiresOn: i.Attributes.Expires,
285-
IsManaged: i.Managed,
286-
KeyID: i.Kid,
287-
NotBefore: i.Attributes.NotBefore,
288-
RecoverableDays: i.Attributes.RecoverableDays,
289-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
290-
Tags: convertPtrMap(i.Tags),
291-
UpdatedOn: i.Attributes.Updated,
292-
VaultURL: vaultURL,
293-
Version: version,
294-
Name: name,
295-
},
234+
DeletedOn: i.DeletedDate,
296235
ID: i.ID,
297-
Name: name,
236+
Name: props.Name,
237+
Properties: props,
298238
RecoveryID: i.RecoveryID,
299-
DeletedOn: i.DeletedDate,
300239
ScheduledPurgeDate: i.ScheduledPurgeDate,
301240
},
302241
}
@@ -325,28 +264,13 @@ type UpdateSecretPropertiesResponse struct {
325264
}
326265

327266
func updateSecretPropertiesResponseFromGenerated(i generated.KeyVaultClientUpdateSecretResponse) UpdateSecretPropertiesResponse {
328-
vaultURL, name, version := shared.ParseID(i.ID)
267+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
329268
return UpdateSecretPropertiesResponse{
330269
Secret: Secret{
331-
Properties: &Properties{
332-
ContentType: i.ContentType,
333-
CreatedOn: i.Attributes.Created,
334-
Enabled: i.Attributes.Enabled,
335-
ExpiresOn: i.Attributes.Expires,
336-
IsManaged: i.Managed,
337-
KeyID: i.Kid,
338-
NotBefore: i.Attributes.NotBefore,
339-
RecoverableDays: i.Attributes.RecoverableDays,
340-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
341-
Tags: convertPtrMap(i.Tags),
342-
UpdatedOn: i.Attributes.Updated,
343-
VaultURL: vaultURL,
344-
Version: version,
345-
Name: name,
346-
},
347-
ID: i.ID,
348-
Name: name,
349-
Value: i.Value,
270+
ID: i.ID,
271+
Name: props.Name,
272+
Properties: props,
273+
Value: i.Value,
350274
},
351275
}
352276
}
@@ -429,28 +353,13 @@ type RestoreSecretBackupResponse struct {
429353

430354
// converts the generated response to the publicly exposed version.
431355
func restoreSecretBackupResponseFromGenerated(i generated.KeyVaultClientRestoreSecretResponse) RestoreSecretBackupResponse {
432-
vaultURL, name, version := shared.ParseID(i.ID)
356+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
433357
return RestoreSecretBackupResponse{
434358
Secret: Secret{
435-
ID: i.ID,
436-
Name: name,
437-
Value: i.Value,
438-
Properties: &Properties{
439-
ContentType: i.ContentType,
440-
CreatedOn: i.Attributes.Created,
441-
Enabled: i.Attributes.Enabled,
442-
ExpiresOn: i.Attributes.Expires,
443-
IsManaged: i.Managed,
444-
KeyID: i.Kid,
445-
NotBefore: i.Attributes.NotBefore,
446-
RecoverableDays: i.Attributes.RecoverableDays,
447-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
448-
Tags: convertPtrMap(i.Tags),
449-
UpdatedOn: i.Attributes.Updated,
450-
VaultURL: vaultURL,
451-
Version: version,
452-
Name: name,
453-
},
359+
ID: i.ID,
360+
Name: props.Name,
361+
Properties: props,
362+
Value: i.Value,
454363
},
455364
}
456365
}
@@ -516,28 +425,12 @@ type RecoverDeletedSecretResponse struct {
516425

517426
// change recover deleted secret reponse to the generated version.
518427
func recoverDeletedSecretResponseFromGenerated(i generated.KeyVaultClientRecoverDeletedSecretResponse) RecoverDeletedSecretResponse {
519-
var a *Properties
520-
if i.Attributes != nil {
521-
a = &Properties{
522-
Enabled: i.Attributes.Enabled,
523-
ExpiresOn: i.Attributes.Expires,
524-
NotBefore: i.Attributes.NotBefore,
525-
CreatedOn: i.Attributes.Created,
526-
UpdatedOn: i.Attributes.Updated,
527-
RecoverableDays: i.Attributes.RecoverableDays,
528-
RecoveryLevel: (*string)(i.Attributes.RecoveryLevel),
529-
}
530-
}
531-
532-
_, name, _ := shared.ParseID(i.ID)
428+
props := secretPropertiesFromGenerated(i.Attributes, i.ID, i.ContentType, i.Kid, i.Managed, i.Tags)
533429
return RecoverDeletedSecretResponse{
534430
SecretItem: SecretItem{
535-
Properties: a,
536-
ContentType: i.ContentType,
537-
ID: i.ID,
538-
Name: name,
539-
Tags: convertPtrMap(i.Tags),
540-
IsManaged: i.Managed,
431+
Properties: props,
432+
ID: i.ID,
433+
Name: props.Name,
541434
},
542435
}
543436
}
@@ -582,17 +475,13 @@ type ListDeletedSecretsResponse struct {
582475
NextLink *string `json:"nextLink,omitempty" azure:"ro"`
583476

584477
// DeletedSecrets is the page's content.
585-
DeletedSecrets []DeletedSecretItem `json:"value,omitempty" azure:"ro"`
478+
DeletedSecrets []*DeletedSecretItem `json:"value,omitempty" azure:"ro"`
586479
}
587480

588481
func listDeletedSecretsPageFromGenerated(g generated.KeyVaultClientGetDeletedSecretsResponse) ListDeletedSecretsResponse {
589-
var items []DeletedSecretItem
590-
591-
if len(g.DeletedSecretListResult.Value) > 0 {
592-
items = make([]DeletedSecretItem, len(g.DeletedSecretListResult.Value))
593-
for idx, v := range g.DeletedSecretListResult.Value {
594-
items[idx] = deletedSecretItemFromGenerated(v)
595-
}
482+
var items []*DeletedSecretItem
483+
for _, v := range g.DeletedSecretListResult.Value {
484+
items = append(items, deletedSecretItemFromGenerated(v))
596485
}
597486

598487
return ListDeletedSecretsResponse{
@@ -650,12 +539,12 @@ type ListPropertiesOfSecretVersionsResponse struct {
650539
NextLink *string `json:"nextLink,omitempty" azure:"ro"`
651540

652541
// Secrets is the page's content.
653-
Secrets []SecretItem `json:"value,omitempty" azure:"ro"`
542+
Secrets []*SecretItem `json:"value,omitempty" azure:"ro"`
654543
}
655544

656545
// create ListSecretsPage from generated pager
657546
func listSecretVersionsPageFromGenerated(i generated.KeyVaultClientGetSecretVersionsResponse) ListPropertiesOfSecretVersionsResponse {
658-
var secrets []SecretItem
547+
var secrets []*SecretItem
659548
for _, s := range i.Value {
660549
secrets = append(secrets, secretItemFromGenerated(s))
661550
}
@@ -709,12 +598,12 @@ type ListPropertiesOfSecretsResponse struct {
709598
NextLink *string `json:"nextLink,omitempty" azure:"ro"`
710599

711600
// Secrets is the page's content.
712-
Secrets []SecretItem `json:"value,omitempty" azure:"ro"`
601+
Secrets []*SecretItem `json:"value,omitempty" azure:"ro"`
713602
}
714603

715604
// create a ListSecretsPage from a generated code response
716605
func listSecretsPageFromGenerated(i generated.KeyVaultClientGetSecretsResponse) ListPropertiesOfSecretsResponse {
717-
var secrets []SecretItem
606+
var secrets []*SecretItem
718607
for _, s := range i.Value {
719608
secrets = append(secrets, secretItemFromGenerated(s))
720609
}

sdk/keyvault/azsecrets/client_test.go

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -56,33 +56,34 @@ func TestSecretTags(t *testing.T) {
5656
defer cleanUpSecret(t, client, secret)
5757

5858
resp, err := client.SetSecret(context.Background(), secret, value, &SetSecretOptions{
59-
Tags: map[string]string{
60-
"Tag1": "Val1",
59+
Properties: &Properties{
60+
Tags: map[string]*string{
61+
"Tag1": to.Ptr("Val1"),
62+
},
6163
},
6264
})
6365
require.NoError(t, err)
6466
require.Equal(t, 1, len(resp.Secret.Properties.Tags))
65-
require.Equal(t, "Val1", resp.Secret.Properties.Tags["Tag1"])
67+
require.Equal(t, "Val1", *resp.Secret.Properties.Tags["Tag1"])
6668

6769
getResp, err := client.GetSecret(context.Background(), secret, nil)
6870
require.NoError(t, err)
6971
require.Equal(t, *getResp.Secret.Value, value)
7072
require.Equal(t, 1, len(getResp.Secret.Properties.Tags))
71-
require.Equal(t, "Val1", getResp.Secret.Properties.Tags["Tag1"])
73+
require.Equal(t, "Val1", *getResp.Secret.Properties.Tags["Tag1"])
7274
require.NotNil(t, getResp.Secret.Properties.Name)
7375

7476
getResp.Secret.Properties.ExpiresOn = to.Ptr(time.Date(2040, time.April, 1, 1, 1, 1, 1, time.UTC))
7577
updateResp, err := client.UpdateSecretProperties(context.Background(), getResp.Secret, nil)
7678
require.NoError(t, err)
7779
require.Equal(t, 1, len(updateResp.Secret.Properties.Tags))
78-
require.Equal(t, "Val1", updateResp.Secret.Properties.Tags["Tag1"])
80+
require.Equal(t, "Val1", *updateResp.Secret.Properties.Tags["Tag1"])
7981

8082
// Delete the tags
81-
updateResp.Secret.Properties.Tags = map[string]string{}
83+
updateResp.Secret.Properties.Tags = map[string]*string{}
8284
updateResp, err = client.UpdateSecretProperties(context.Background(), updateResp.Secret, nil)
8385
require.NoError(t, err)
8486
require.Equal(t, 0, len(updateResp.Secret.Properties.Tags))
85-
require.NotEqual(t, "Val1", updateResp.Secret.Properties.Tags["Tag1"])
8687
}
8788

8889
func TestListSecretVersions(t *testing.T) {
@@ -298,8 +299,8 @@ func TestUpdateSecretProperties(t *testing.T) {
298299

299300
setResp.Secret.Properties = &Properties{
300301
ContentType: to.Ptr("password"),
301-
Tags: map[string]string{
302-
"Tag1": "TagVal1",
302+
Tags: map[string]*string{
303+
"Tag1": to.Ptr("TagVal1"),
303304
},
304305
Enabled: to.Ptr(true),
305306
ExpiresOn: to.Ptr(time.Now().Add(48 * time.Hour)),
@@ -313,7 +314,7 @@ func TestUpdateSecretProperties(t *testing.T) {
313314
getResp, err := client.GetSecret(context.Background(), name, nil)
314315
require.NoError(t, err)
315316
require.Equal(t, *getResp.Secret.Value, value)
316-
require.Equal(t, getResp.Secret.Properties.Tags["Tag1"], "TagVal1")
317+
require.Equal(t, *getResp.Secret.Properties.Tags["Tag1"], "TagVal1")
317318
require.Equal(t, *getResp.Secret.Properties.ContentType, "password")
318319
}
319320

0 commit comments

Comments
 (0)