From d3b95d3ff865915ef27d08881ac4e2df5ac536e1 Mon Sep 17 00:00:00 2001 From: Stas Dm Date: Fri, 22 Mar 2024 10:31:45 +0100 Subject: [PATCH] feat: add possibility to override sub --- api/spec/openapi.gen.go | 338 +++++++++--------- docs/v1/openapi.yaml | 4 + pkg/restapi/v1/issuer/controller.go | 7 +- pkg/restapi/v1/issuer/openapi.gen.go | 3 + pkg/service/oidc4ci/api.go | 12 +- pkg/service/oidc4ci/composer.go | 13 +- pkg/service/oidc4ci/composer_test.go | 14 +- .../oidc4ci_service_initiate_issuance.go | 5 +- 8 files changed, 212 insertions(+), 184 deletions(-) diff --git a/api/spec/openapi.gen.go b/api/spec/openapi.gen.go index 529fab90d..6cea449bc 100644 --- a/api/spec/openapi.gen.go +++ b/api/spec/openapi.gen.go @@ -37,175 +37,175 @@ var swaggerSpec = []string{ "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/docs/v1/openapi.yaml b/docs/v1/openapi.yaml index 2c3dfe00d..afeb4c197 100644 --- a/docs/v1/openapi.yaml +++ b/docs/v1/openapi.yaml @@ -1473,6 +1473,10 @@ components: type: boolean description: Override issuer. nullable: true + override_subject_did: + type: boolean + description: Override credential subject did. + nullable: true credential: type: object description: Raw Complete credential for sign and customization diff --git a/pkg/restapi/v1/issuer/controller.go b/pkg/restapi/v1/issuer/controller.go index 1efb2e907..490e2d02c 100644 --- a/pkg/restapi/v1/issuer/controller.go +++ b/pkg/restapi/v1/issuer/controller.go @@ -458,9 +458,10 @@ func (c *Controller) initiateIssuance( if multiCredentialIssuance.Compose != nil { credConfig.ComposeCredential = &oidc4ci.InitiateIssuanceComposeCredential{ - Credential: multiCredentialIssuance.Compose.Credential, - IDTemplate: lo.FromPtr(multiCredentialIssuance.Compose.IdTemplate), - OverrideIssuer: lo.FromPtr(multiCredentialIssuance.Compose.OverrideIssuer), + Credential: multiCredentialIssuance.Compose.Credential, + IDTemplate: lo.FromPtr(multiCredentialIssuance.Compose.IdTemplate), + OverrideIssuer: lo.FromPtr(multiCredentialIssuance.Compose.OverrideIssuer), + OverrideSubjectDID: lo.FromPtr(multiCredentialIssuance.Compose.OverrideSubjectDid), } } diff --git a/pkg/restapi/v1/issuer/openapi.gen.go b/pkg/restapi/v1/issuer/openapi.gen.go index e41c3e9fb..fa02113a6 100644 --- a/pkg/restapi/v1/issuer/openapi.gen.go +++ b/pkg/restapi/v1/issuer/openapi.gen.go @@ -36,6 +36,9 @@ type ComposeOIDC4CICredential struct { // Override issuer. OverrideIssuer *bool `json:"override_issuer"` + + // Override credential subject did. + OverrideSubjectDid *bool `json:"override_subject_did"` } // An object that describes specifics of the Credential that the Credential Issuer supports issuance of. diff --git a/pkg/service/oidc4ci/api.go b/pkg/service/oidc4ci/api.go index d8850e684..f2567c452 100644 --- a/pkg/service/oidc4ci/api.go +++ b/pkg/service/oidc4ci/api.go @@ -112,8 +112,9 @@ type TxCredentialConfiguration struct { } type CredentialComposeConfiguration struct { - IDTemplate string `json:"id_template"` - OverrideIssuer bool `json:"override_issuer"` + IDTemplate string `json:"id_template"` + OverrideIssuer bool `json:"override_issuer"` + OverrideSubjectDID bool `json:"override_subject_did"` } // AuthorizationDetails represents the domain model for Authorization Details request. @@ -194,9 +195,10 @@ type InitiateIssuanceCredentialConfiguration struct { } type InitiateIssuanceComposeCredential struct { - Credential *map[string]interface{} `json:"credential,omitempty"` - IDTemplate string `json:"id_template"` - OverrideIssuer bool `json:"override_issuer"` + Credential *map[string]interface{} `json:"credential,omitempty"` + IDTemplate string `json:"id_template"` + OverrideIssuer bool `json:"override_issuer"` + OverrideSubjectDID bool `json:"override_subject_did"` } // InitiateIssuanceResponse is the response from the Issuer to the Wallet with initiate issuance URL. diff --git a/pkg/service/oidc4ci/composer.go b/pkg/service/oidc4ci/composer.go index 71cc86078..9c0d697de 100644 --- a/pkg/service/oidc4ci/composer.go +++ b/pkg/service/oidc4ci/composer.go @@ -27,7 +27,7 @@ func (c *CredentialComposer) Compose( credential *verifiable.Credential, tx *Transaction, txCredentialConfiguration *TxCredentialConfiguration, - _ *PrepareCredentialRequest, + prepRequest *PrepareCredentialRequest, ) (*verifiable.Credential, error) { if txCredentialConfiguration == nil || txCredentialConfiguration.CredentialComposeConfiguration == nil { return credential, nil @@ -46,6 +46,17 @@ func (c *CredentialComposer) Compose( credential = credential.WithModifiedIssuer(&verifiable.Issuer{ID: tx.DID}) } + if txCredentialConfiguration.CredentialComposeConfiguration.OverrideSubjectDID { + var newSubjects []verifiable.Subject + for _, s := range credential.Contents().Subject { + s.ID = prepRequest.DID + + newSubjects = append(newSubjects, s) + } + + credential = credential.WithModifiedSubject(newSubjects) + } + return credential, nil } diff --git a/pkg/service/oidc4ci/composer_test.go b/pkg/service/oidc4ci/composer_test.go index 5ed23133c..343ddcddf 100644 --- a/pkg/service/oidc4ci/composer_test.go +++ b/pkg/service/oidc4ci/composer_test.go @@ -14,7 +14,9 @@ func TestComposer(t *testing.T) { t.Run("success", func(t *testing.T) { srv := oidc4ci.NewCredentialComposer() - cred, err := verifiable.CreateCredential(verifiable.CredentialContents{}, verifiable.CustomFields{}) + cred, err := verifiable.CreateCredential(verifiable.CredentialContents{ + Subject: []verifiable.Subject{{ID: "xxx:yyy"}}, + }, verifiable.CustomFields{}) assert.NoError(t, err) resp, err := srv.Compose( @@ -28,11 +30,14 @@ func TestComposer(t *testing.T) { }, &oidc4ci.TxCredentialConfiguration{ CredentialComposeConfiguration: &oidc4ci.CredentialComposeConfiguration{ - IDTemplate: "hardcoded:{{.TxID}}:suffix", - OverrideIssuer: true, + IDTemplate: "hardcoded:{{.TxID}}:suffix", + OverrideIssuer: true, + OverrideSubjectDID: true, }, }, - &oidc4ci.PrepareCredentialRequest{}, + &oidc4ci.PrepareCredentialRequest{ + DID: "some-awesome-did", + }, ) assert.NoError(t, err) @@ -40,6 +45,7 @@ func TestComposer(t *testing.T) { assert.EqualValues(t, "hardcoded:some-awesome-id:suffix", resp.Contents().ID) assert.EqualValues(t, "did:example:123", resp.Contents().Issuer.ID) + assert.EqualValues(t, "some-awesome-did", resp.Contents().Subject[0].ID) }) t.Run("invalid template", func(t *testing.T) { diff --git a/pkg/service/oidc4ci/oidc4ci_service_initiate_issuance.go b/pkg/service/oidc4ci/oidc4ci_service_initiate_issuance.go index e00dd4c42..af998ec3e 100644 --- a/pkg/service/oidc4ci/oidc4ci_service_initiate_issuance.go +++ b/pkg/service/oidc4ci/oidc4ci_service_initiate_issuance.go @@ -260,8 +260,9 @@ func (s *Service) applyPreAuthFlowModifications( txCredentialConfiguration.ClaimDataType = ClaimDataTypeVC txCredentialConfiguration.CredentialComposeConfiguration = &CredentialComposeConfiguration{ - IDTemplate: req.ComposeCredential.IDTemplate, - OverrideIssuer: req.ComposeCredential.OverrideIssuer, + IDTemplate: req.ComposeCredential.IDTemplate, + OverrideIssuer: req.ComposeCredential.OverrideIssuer, + OverrideSubjectDID: req.ComposeCredential.OverrideSubjectDID, } }