diff --git a/agent/common/issuerservice/issuer.go b/agent/common/issuerservice/issuer.go index 26b2851..d9918dd 100644 --- a/agent/common/issuerservice/issuer.go +++ b/agent/common/issuerservice/issuer.go @@ -9,6 +9,7 @@ * * Contributors: * Metaform Systems, Inc. - initial API and implementation + * Matthias Buchhorn - accept 204 on a credential revocation * */ @@ -198,7 +199,8 @@ func (i HttpApiClient) RevokeCredential(ctx context.Context, credentialID string } defer httpx.DrainAndClose(resp) - if resp.StatusCode != http.StatusOK { + // The IssuerService (EDC 1.0) answers a revocation with 204 + if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusNoContent { return fmt.Errorf("failed to revoke credential with ID '%s' in issuer context '%s': received status code %d with message [%s]", credentialID, i.IssuerID, resp.StatusCode, httpx.ReadErrorBody(resp)) } return nil diff --git a/agent/common/issuerservice/issuer_test.go b/agent/common/issuerservice/issuer_test.go index bcc4912..e27285f 100644 --- a/agent/common/issuerservice/issuer_test.go +++ b/agent/common/issuerservice/issuer_test.go @@ -9,6 +9,7 @@ * * Contributors: * Metaform Systems, Inc. - initial API and implementation + * Matthias Buchhorn - accept 204 on a credential revocation * */ @@ -129,6 +130,29 @@ func TestHttpApiClient_RevokeCredential(t *testing.T) { require.NoError(t, err) } +func TestHttpApiClient_RevokeCredential_NoContent(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path == "/v1/participants/test-issuer/credentials/test-credential-id/revoke" && r.Method == http.MethodPost { + w.WriteHeader(http.StatusNoContent) + } else { + w.WriteHeader(http.StatusInternalServerError) + } + })) + defer server.Close() + + tp := mocks.NewMockTokenProvider(t) + tp.On("GetToken", mock.Anything, ScopeCredentialsWrite, "test-issuer").Return("test token", nil) + client := HttpApiClient{ + BaseURL: server.URL, + TokenProvider: tp, + IssuerID: "test-issuer", + HttpClient: &http.Client{}, + } + + err := client.RevokeCredential(t.Context(), "test-credential-id") + require.NoError(t, err, "the IssuerService answers a revocation with 204") +} + func TestHttpApiClient_RevokeCredential_ClientError(t *testing.T) { template := "/v1/participants/.*/credentials/.*/revoke" server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {