@@ -33,7 +33,7 @@ func newKeyClient(subID string, authorizer auth.Authorizer) (*client, error) {
3333
3434// Get
3535func (c * client ) Get (ctx context.Context , group , vaultName , name string ) (* []keyvault.Key , error ) {
36- request , err := getKeyRequestByVaultName (wssdcloudcommon .Operation_GET , group , vaultName , name )
36+ request , err := getKeyRequestByVaultName (wssdcloudcommon .Operation_GET , group , vaultName , name , "" )
3737 if err != nil {
3838 return nil , err
3939 }
@@ -44,9 +44,9 @@ func (c *client) Get(ctx context.Context, group, vaultName, name string) (*[]key
4444 return getKeysFromResponse (response , vaultName , nil )
4545}
4646
47- // get
48- func (c * client ) get (ctx context.Context , group , vaultName , name string ) ([]* wssdcloudsecurity.Key , error ) {
49- request , err := getKeyRequestByVaultName (wssdcloudcommon .Operation_GET , group , vaultName , name )
47+ // keyVersion optional in get function
48+ func (c * client ) get (ctx context.Context , group , vaultName , name , keyVersion string ) ([]* wssdcloudsecurity.Key , error ) {
49+ request , err := getKeyRequestByVaultName (wssdcloudcommon .Operation_GET , group , vaultName , name , keyVersion )
5050 if err != nil {
5151 return nil , err
5252 }
@@ -384,6 +384,20 @@ func (c *client) UnwrapKey(ctx context.Context, group, vaultName, name string, p
384384 return
385385}
386386
387+ func (c * client ) RotateKey (ctx context.Context , group , vaultName , name string ) (result * keyvault.KeyOperationResult , err error ) {
388+ request , err := c .getKeyOperationRequestRotate (ctx , group , vaultName , name , wssdcloudcommon .ProviderAccessOperation_Key_Rotate )
389+ if err != nil {
390+ return
391+ }
392+
393+ response , err := c .KeyAgentClient .Operate (ctx , request )
394+ if err != nil {
395+ return
396+ }
397+ result , err = getDataFromResponse (response )
398+ return
399+ }
400+
387401func (c * client ) Sign (ctx context.Context , group , vaultName , name string , param * keyvault.KeySignParameters ) (result * keyvault.KeyOperationResult , err error ) {
388402 request , err := c .getKeyOperationRequestSigning (ctx , group , vaultName , name , param , wssdcloudcommon .ProviderAccessOperation_Key_Sign )
389403 if err != nil {
@@ -425,12 +439,13 @@ func getKeysFromResponse(response *wssdcloudsecurity.KeyResponse, vaultName stri
425439 return & tmp , nil
426440}
427441
428- func getKeyRequestByVaultName (opType wssdcloudcommon.Operation , groupName , vaultName , name string ) (* wssdcloudsecurity.KeyRequest , error ) {
442+ // KeyVersion optional in getKeyRequestByVaultName
443+ func getKeyRequestByVaultName (opType wssdcloudcommon.Operation , groupName , vaultName , name , keyVersion string ) (* wssdcloudsecurity.KeyRequest , error ) {
429444 request := & wssdcloudsecurity.KeyRequest {
430445 OperationType : opType ,
431446 Keys : []* wssdcloudsecurity.Key {},
432447 }
433- key , err := getWssdKeyByVaultName (name , groupName , vaultName , opType )
448+ key , err := getWssdKeyByVaultName (name , groupName , vaultName , keyVersion , opType )
434449 if err != nil {
435450 return nil , err
436451 }
@@ -453,7 +468,8 @@ func getKeyRequest(opType wssdcloudcommon.Operation, groupName, vaultName, name
453468
454469func getDataFromResponse (response * wssdcloudsecurity.KeyOperationResponse ) (result * keyvault.KeyOperationResult , err error ) {
455470 result = & keyvault.KeyOperationResult {
456- Result : & response .Data ,
471+ Result : & response .Data ,
472+ KeyVersion : & response .KeyVersion ,
457473 }
458474 return result , nil
459475}
@@ -491,7 +507,28 @@ func (c *client) getKeyOperationRequest(ctx context.Context,
491507 Algorithm : algo ,
492508 }
493509
494- key , err := c .get (ctx , groupName , vaultName , name )
510+ key , err := c .get (ctx , groupName , vaultName , name , param .KeyVersion )
511+ if err != nil {
512+ return nil , err
513+ }
514+
515+ if len (key ) == 0 {
516+ return nil , errors .Wrapf (errors .NotFound , "Key[%s] Vault[%s]" , name , vaultName )
517+ }
518+
519+ request .Key = key [0 ]
520+ return request , nil
521+ }
522+
523+ func (c * client ) getKeyOperationRequestRotate (ctx context.Context ,
524+ groupName , vaultName , name string ,
525+ opType wssdcloudcommon.ProviderAccessOperation ,
526+ ) (* wssdcloudsecurity.KeyOperationRequest , error ) {
527+ request := & wssdcloudsecurity.KeyOperationRequest {
528+ OperationType : opType ,
529+ }
530+
531+ key , err := c .get (ctx , groupName , vaultName , name , "" )
495532 if err != nil {
496533 return nil , err
497534 }
@@ -533,7 +570,7 @@ func (c *client) getKeyOperationRequestSigning(ctx context.Context,
533570 SignVerifyParams : & signVerifyParam ,
534571 }
535572
536- key , err := c .get (ctx , groupName , vaultName , name )
573+ key , err := c .get (ctx , groupName , vaultName , name , "" )
537574 if err != nil {
538575 return nil , err
539576 }
@@ -580,7 +617,7 @@ func (c *client) getKeyOperationRequestVerify(ctx context.Context,
580617 SignVerifyParams : & signVerifyParam ,
581618 }
582619
583- key , err := c .get (ctx , groupName , vaultName , name )
620+ key , err := c .get (ctx , groupName , vaultName , name , "" )
584621 if err != nil {
585622 return nil , err
586623 }
0 commit comments