@@ -501,10 +501,6 @@ func (b *keyfactorBackend) pathIssueSignCert(ctx context.Context, req *logical.R
501501}
502502
503503func (b * keyfactorBackend ) pathRevokeCert (ctx context.Context , req * logical.Request , data * framework.FieldData ) (* logical.Response , error ) {
504- if b .System ().ReplicationState ().HasState (consts .ReplicationPerformanceStandby ) {
505- return nil , logical .ErrReadOnly
506- }
507-
508504 serial := data .Get ("serial" ).(string )
509505 b .Logger ().Debug ("serial = " + serial )
510506
@@ -525,30 +521,35 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
525521 return nil , nil
526522 }
527523
524+ serial = strings .ToUpper (serial )
525+
528526 // get client
529527 client , err := b .getClient (ctx , req .Storage )
530528 if err != nil {
531529 return nil , fmt .Errorf ("error getting client: %w" , err )
532530 }
533531
532+ b .Logger ().Debug (fmt .Sprintf ("retreiving the keyfactor ID for cert stored at path: %s" , "kfId/" + serial ))
533+
534534 kfId , err := req .Storage .Get (ctx , "kfId/" + serial ) //retrieve the keyfactor certificate ID, keyed by sn here
535535 if err != nil {
536- b .Logger ().Error ("Unable to retreive Keyfactor certificate ID for cert with serial: " + serial , err )
536+ b .Logger ().Error ("unable to retreive Keyfactor certificate ID for cert with serial: " + serial , err )
537537 return nil , err
538538 }
539-
540- var keyfactorId int
539+ b . Logger (). Debug ( fmt . Sprintf ( "retreived the logical storage entry, decoding..." ))
540+ var keyfactorId int32
541541 err = kfId .DecodeJSON (& keyfactorId )
542-
543542 if err != nil {
544543 b .Logger ().Error ("Unable to parse stored certificate ID for cert with serial: " + serial , err )
545544 return nil , err
546545 }
547546
547+ b .Logger ().Debug (fmt .Sprintf ("decoded keyfactor ID value: %d" , keyfactorId ))
548+
548549 // set up keyfactor api request
549550 //url := b.cachedConfig.KeyfactorUrl + "/" + b.cachedConfig.CommandAPIPath + kf_revoke_path
550551
551- certIds := []int32 {int32 ( keyfactorId ) }
552+ certIds := []int32 {keyfactorId }
552553 revokeReason := v1 .KeyfactorPKIEnumsRevokeCode (0 )
553554 effectiveDate := time .Now ().UTC ()
554555 revokeComment := "via Hashicorp Vault"
@@ -563,29 +564,30 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
563564 }
564565
565566 // create the api call wrapper object
566- apiReq := client .V1 .CertificateApi .NewCreateCertificatesRevokeRequest (ctx )
567-
568- // apply the request parameters to the pending request
569- apiReq .CertificatesRevokeCertificateRequest (revokeReq )
567+ apiReq := client .V1 .CertificateApi .NewCreateCertificatesRevokeRequest (ctx ).CertificatesRevokeCertificateRequest (revokeReq )
570568
571569 // execute request
572570
573571 _ , httpResponse , err := apiReq .Execute ()
574572
575573 if err != nil {
576- b .Logger ().Error ("Revoke failed: {{err}} " , err )
577- return nil , err
574+ b .Logger ().Error (fmt . Sprintf ( "revocation failed: %s \n %s " , err , httpResponse . Body ) )
575+ return nil , fmt . Errorf ( "revocation failed. \n http status: %s \n response body: %s" , httpResponse . Status , httpResponse . Body )
578576 }
579577
580578 if httpResponse .StatusCode != 204 && httpResponse .StatusCode != 200 {
581579 b .Logger ().Info ("revocation failed: server returned" + fmt .Sprint (httpResponse .StatusCode ))
582580 b .Logger ().Info ("error response = " + fmt .Sprint (httpResponse .Body ))
583- return nil , fmt .Errorf ("revocation failed: server returned %s\n " , httpResponse .Status )
581+ return nil , fmt .Errorf ("revocation failed: server returned %s\n %s " , httpResponse .Status , httpResponse . Body )
584582 }
585583
586584 alreadyRevoked := false
587585 var revInfo revocationInfo
588586
587+ b .Logger ().Debug ("revocation request was successful." )
588+
589+ b .Logger ().Debug ("updating values if previously revoked.." )
590+
589591 revEntry , err := fetchCertBySerial (ctx , req , "revoked/" , serial )
590592 if err != nil {
591593 switch err .(type ) {
@@ -604,6 +606,7 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
604606 }
605607 }
606608
609+ b .Logger ().Debug ("updating local storage entry.." )
607610 if ! alreadyRevoked {
608611 certEntry , err := fetchCertBySerial (ctx , req , "certs/" , serial )
609612 if err != nil {
@@ -615,13 +618,6 @@ func revokeCert(ctx context.Context, b *keyfactorBackend, req *logical.Request,
615618 }
616619 }
617620 if certEntry == nil {
618- if fromLease {
619- // We can't write to revoked/ or update the CRL anyway because we don't have the cert,
620- // and there's no reason to expect this will work on a subsequent
621- // retry. Just give up and let the lease get deleted.
622- b .Logger ().Warn ("expired certificate revoke failed because not found in storage, treating as success" , "serial" , serial )
623- return nil , nil
624- }
625621 return logical .ErrorResponse (fmt .Sprintf ("certificate with serial %s not found" , serial )), nil
626622 }
627623 b .Logger ().Debug ("certEntry key = " + certEntry .Key )
@@ -693,19 +689,6 @@ func checkAllowedDomains(role *roleEntry, roleName string, domains []string) (bo
693689 return true , nil
694690}
695691
696- // func (b *keyfactorBackend) isValidJSON(str string) bool {
697- // var js map[string]interface{}
698- // err := json.Unmarshal([]byte(str), &js)
699-
700- // if err != nil {
701- // b.Logger().Debug(err.Error())
702- // return false
703- // } else {
704- // b.Logger().Debug("the metadata was able to be parsed as valid JSON")
705- // return true
706- // }
707- // }
708-
709692const pathIssueHelpSyn = `
710693Request a certificate using a certain role with the provided details.
711694example: vault write keyfactor/issue/<role> common_name=<cn> dns_sans=<dns sans>
0 commit comments