From b756599f253c1594e3992f09b96269f73adf3cae Mon Sep 17 00:00:00 2001 From: Ilya Date: Mon, 17 Jun 2024 12:40:33 +0300 Subject: [PATCH 1/2] enable/disable auto publishing to onchain rhs; validate agent message media type --- Makefile | 4 + cmd/issuer_initializer/main.go | 2 +- cmd/notifications/main.go | 4 +- cmd/pending_publisher/main.go | 4 +- cmd/platform/main.go | 4 +- cmd/platform_ui/main.go | 4 +- internal/api/main_test.go | 2 + internal/api/server.go | 4 +- internal/api/server_test.go | 32 ++-- internal/api_ui/main_test.go | 2 + internal/api_ui/server.go | 4 +- internal/api_ui/server_test.go | 90 +++++------ internal/config/config.go | 10 +- internal/config/credential_status.go | 2 +- internal/core/ports/claims_service.go | 3 +- internal/core/ports/mediatype_manager.go | 8 + internal/core/services/claims.go | 13 +- internal/core/services/identity.go | 98 +++++++----- internal/core/services/mediatype_manager.go | 48 ++++++ .../core/services/mediatype_manager_test.go | 145 ++++++++++++++++++ internal/core/services/tests/identity_test.go | 6 +- internal/core/services/tests/link_test.go | 4 +- internal/core/services/tests/main_test.go | 2 + .../core/services/tests/notification_test.go | 4 +- 24 files changed, 372 insertions(+), 127 deletions(-) create mode 100644 internal/core/ports/mediatype_manager.go create mode 100644 internal/core/services/mediatype_manager.go create mode 100644 internal/core/services/mediatype_manager_test.go diff --git a/Makefile b/Makefile index 53fcf8544..16125dbe7 100644 --- a/Makefile +++ b/Makefile @@ -142,6 +142,10 @@ db/migrate: $(BIN)/install-goose $(BIN)/godotenv $(BIN)/platformid-migrate ## In lint: $(BIN)/golangci-lint $(BIN)/golangci-lint run +.PHONY: lint-fix +lint-fix: $(BIN)/golangci-lint + $(BIN)/golangci-lint run --fix + # usage: make private_key=xxx add-private-key .PHONY: add-private-key add-private-key: diff --git a/cmd/issuer_initializer/main.go b/cmd/issuer_initializer/main.go index 6ca778004..53dbe12fb 100644 --- a/cmd/issuer_initializer/main.go +++ b/cmd/issuer_initializer/main.go @@ -147,7 +147,7 @@ func main() { rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), ethConn, common.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) cfg.CredentialStatus.SingleIssuer = true - identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, nil, claimsRepository, nil, nil, storage, nil, nil, nil, cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, nil, claimsRepository, nil, nil, storage, nil, nil, nil, cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) didCreationOptions := &ports.DIDCreationOptions{ Method: core.DIDMethod(cfg.APIUI.IdentityMethod), diff --git a/cmd/notifications/main.go b/cmd/notifications/main.go index b235ba5a7..693935351 100644 --- a/cmd/notifications/main.go +++ b/cmd/notifications/main.go @@ -179,8 +179,8 @@ func newCredentialsService(ctx context.Context, cfg *config.Configuration, stora mtService := services.NewIdentityMerkleTrees(mtRepository) qrService := services.NewQrStoreService(cachex) - identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, nil, storage, nil, nil, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, nil, storage, nil, nil, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) return claimsService, nil } diff --git a/cmd/pending_publisher/main.go b/cmd/pending_publisher/main.go index 844c9c81d..6799d4d69 100644 --- a/cmd/pending_publisher/main.go +++ b/cmd/pending_publisher/main.go @@ -160,8 +160,8 @@ func main() { rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), cl, common.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) circuitsLoaderService := circuitLoaders.NewCircuits(cfg.Circuit.Path) proofService := initProofService(ctx, cfg, circuitsLoaderService) diff --git a/cmd/platform/main.go b/cmd/platform/main.go index 649052168..88942b011 100644 --- a/cmd/platform/main.go +++ b/cmd/platform/main.go @@ -142,8 +142,8 @@ func main() { cfg.CredentialStatus.SingleIssuer = false revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, nil, storage, nil, nil, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.ServerUrl, ps, cfg.IPFS.GatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, nil, storage, nil, nil, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.ServerUrl, ps, cfg.IPFS.GatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) proofService := gateways.NewProver(ctx, cfg, circuitsLoaderService) transactionService, err := gateways.NewTransaction(ethereumClient, cfg.Ethereum.ConfirmationBlockCount) diff --git a/cmd/platform_ui/main.go b/cmd/platform_ui/main.go index 3c600c2cb..5f41eef49 100644 --- a/cmd/platform_ui/main.go +++ b/cmd/platform_ui/main.go @@ -174,9 +174,9 @@ func main() { cfg.CredentialStatus.SingleIssuer = true revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, connectionsRepository, storage, verifier, sessionRepository, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepository, mtRepository, identityStateRepository, mtService, qrService, claimsRepository, revocationRepository, connectionsRepository, storage, verifier, sessionRepository, ps, cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) schemaService := services.NewSchema(schemaRepository, schemaLoader) - claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepository, identityService, qrService, mtService, identityStateRepository, schemaLoader, storage, cfg.APIUI.ServerURL, ps, cfg.IPFS.GatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepository, storage) linkService := services.NewLinkService(storage, claimsService, qrService, claimsRepository, linkRepository, schemaRepository, schemaLoader, sessionRepository, ps, cfg.IPFS.GatewayURL) diff --git a/internal/api/main_test.go b/internal/api/main_test.go index 7cbffd565..ac1bad0d2 100644 --- a/internal/api/main_test.go +++ b/internal/api/main_test.go @@ -12,6 +12,7 @@ import ( "github.com/iden3/iden3comm/v2" "github.com/piprate/json-gold/ld" + "github.com/polygonid/sh-id-platform/internal/common" "github.com/polygonid/sh-id-platform/internal/config" "github.com/polygonid/sh-id-platform/internal/core/ports" "github.com/polygonid/sh-id-platform/internal/db" @@ -107,6 +108,7 @@ func TestMain(m *testing.M) { URL: "http://localhost:3001", }, } + cfg.AutoPublishingToOnChainRHS = common.ToPointer[bool](true) m.Run() } diff --git a/internal/api/server.go b/internal/api/server.go index 0d0a4b23e..734642ff3 100644 --- a/internal/api/server.go +++ b/internal/api/server.go @@ -408,7 +408,7 @@ func (s *Server) Agent(ctx context.Context, request AgentRequestObject) (AgentRe return Agent400JSONResponse{N400JSONResponse{"cannot proceed with an empty request"}}, nil } - basicMessage, _, err := s.packageManager.Unpack([]byte(*request.Body)) + basicMessage, mediatype, err := s.packageManager.Unpack([]byte(*request.Body)) if err != nil { log.Debug(ctx, "agent bad request", "err", err, "body", *request.Body) return Agent400JSONResponse{N400JSONResponse{"cannot proceed with the given request"}}, nil @@ -420,7 +420,7 @@ func (s *Server) Agent(ctx context.Context, request AgentRequestObject) (AgentRe return Agent400JSONResponse{N400JSONResponse{err.Error()}}, nil } - agent, err := s.claimService.Agent(ctx, req) + agent, err := s.claimService.Agent(ctx, req, mediatype) if err != nil { log.Error(ctx, "agent error", "err", err) return Agent400JSONResponse{N400JSONResponse{err.Error()}}, nil diff --git a/internal/api/server_test.go b/internal/api/server_test.go index aaa765a68..73642a479 100644 --- a/internal/api/server_test.go +++ b/internal/api/server_test.go @@ -52,9 +52,9 @@ func TestServer_CreateIdentity(t *testing.T) { rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) handler := getHandler(context.Background(), server) @@ -249,9 +249,9 @@ func TestServer_RevokeClaim(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) @@ -400,9 +400,9 @@ func TestServer_CreateClaim(t *testing.T) { rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) pubSub := pubsub.NewMock() - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) handler := getHandler(ctx, server) @@ -578,9 +578,9 @@ func TestServer_GetIdentities(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) handler := getHandler(context.Background(), server) @@ -650,12 +650,12 @@ func TestServer_GetClaimQrCode(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) idStr := "did:polygonid:polygon:mumbai:2qPrv5Yx8s1qAmEnPym68LfT7gTbASGampiGU7TseL" idNoClaims := "did:polygonid:polygon:mumbai:2qGjTUuxZKqKS4Q8UmxHUPw55g15QgEVGnj6Wkq8Vk" accountService := services.NewAccountService(cfg.Ethereum, keyStore) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) identity := &domain.Identity{ Identifier: idStr, @@ -794,8 +794,8 @@ func TestServer_GetClaim(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) @@ -968,8 +968,8 @@ func TestServer_GetClaims(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) fixture := tests.NewFixture(storage) @@ -1314,11 +1314,11 @@ func TestServer_GetRevocationStatus(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.GetURL(), nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) identity, err := identityService.Create(ctx, "http://localhost:3001", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) assert.NoError(t, err) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) accountService := services.NewAccountService(cfg.Ethereum, keyStore) server := NewServer(&cfg, identityService, accountService, claimsService, nil, NewPublisherMock(), NewPackageManagerMock(), nil) handler := getHandler(context.Background(), server) diff --git a/internal/api_ui/main_test.go b/internal/api_ui/main_test.go index ade5ad299..fc8a053a6 100644 --- a/internal/api_ui/main_test.go +++ b/internal/api_ui/main_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/polygonid/sh-id-platform/internal/common" "github.com/polygonid/sh-id-platform/internal/config" "github.com/polygonid/sh-id-platform/internal/core/ports" "github.com/polygonid/sh-id-platform/internal/db" @@ -92,6 +93,7 @@ func TestMain(m *testing.M) { URL: "http://localhost:3001", }, } + cfg.AutoPublishingToOnChainRHS = common.ToPointer[bool](true) schemaLoader = loader.NewDocumentLoader(ipfsGatewayURL) diff --git a/internal/api_ui/server.go b/internal/api_ui/server.go index 49c082185..154673e9a 100644 --- a/internal/api_ui/server.go +++ b/internal/api_ui/server.go @@ -708,7 +708,7 @@ func (s *Server) Agent(ctx context.Context, request AgentRequestObject) (AgentRe log.Debug(ctx, "agent empty request") return Agent400JSONResponse{N400JSONResponse{"cannot proceed with an empty request"}}, nil } - basicMessage, _, err := s.packageManager.Unpack([]byte(*request.Body)) + basicMessage, mediatype, err := s.packageManager.Unpack([]byte(*request.Body)) if err != nil { log.Debug(ctx, "agent bad request", "err", err, "body", *request.Body) return Agent400JSONResponse{N400JSONResponse{"cannot proceed with the given request"}}, nil @@ -720,7 +720,7 @@ func (s *Server) Agent(ctx context.Context, request AgentRequestObject) (AgentRe return Agent400JSONResponse{N400JSONResponse{err.Error()}}, nil } - agent, err := s.claimService.Agent(ctx, req) + agent, err := s.claimService.Agent(ctx, req, mediatype) if err != nil { log.Error(ctx, "agent error", "err", err) return Agent400JSONResponse{N400JSONResponse{err.Error()}}, nil diff --git a/internal/api_ui/server_test.go b/internal/api_ui/server_test.go index b3ab78a2b..31a52cd65 100644 --- a/internal/api_ui/server_test.go +++ b/internal/api_ui/server_test.go @@ -47,9 +47,9 @@ func TestServer_CheckStatus(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) schemaService := services.NewSchema(repositories.NewSchema(*storage), schemaLoader) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) server := NewServer(&cfg, identityService, claimsService, schemaService, NewConnectionsMock(), NewLinkMock(), nil, NewPublisherMock(), NewPackageManagerMock(), &health.Status{}) handler := getHandler(context.Background(), server) @@ -230,7 +230,7 @@ func TestServer_AuthQRCode(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, sessionRepository, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, sessionRepository, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) server := NewServer(&cfg, identityService, NewClaimsMock(), NewSchemaMock(), NewConnectionsMock(), NewLinkMock(), qrService, NewPublisherMock(), NewPackageManagerMock(), nil) issuerDID, err := w3c.ParseDID("did:polygonid:polygon:mumbai:2qE1BZ7gcmEoP2KppvFPCZqyzyb5tK9T6Gec5HFANQ") require.NoError(t, err) @@ -804,9 +804,9 @@ func TestServer_DeleteConnection(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -1055,8 +1055,8 @@ func TestServer_RevokeConnectionCredentials(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -1166,9 +1166,9 @@ func TestServer_CreateCredential(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) pubSub := pubsub.NewMock() - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) @@ -1343,8 +1343,8 @@ func TestServer_DeleteCredential(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, "http://localhost", pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) server := NewServer(&cfg, NewIdentityMock(), claimsService, NewSchemaMock(), NewConnectionsMock(), NewLinkMock(), nil, NewPublisherMock(), NewPackageManagerMock(), nil) handler := getHandler(context.Background(), server) @@ -1446,8 +1446,8 @@ func TestServer_GetCredential(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) @@ -1638,9 +1638,9 @@ func TestServer_GetCredentials(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) schemaService := services.NewSchema(schemaRepository, schemaLoader) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -2107,8 +2107,8 @@ func TestServer_GetCredentialQrCode(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) @@ -2261,8 +2261,8 @@ func TestServer_GetConnection(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -2446,8 +2446,8 @@ func TestServer_GetConnections(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -3124,8 +3124,8 @@ func TestServer_RevokeCredential(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(&KMSMock{}, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) fixture := tests.NewFixture(storage) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) @@ -3264,9 +3264,9 @@ func TestServer_CreateLink(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) pubSub := pubsub.NewMock() - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRespository, schemaLoader, sessionRepository, pubSub, ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -3490,8 +3490,8 @@ func TestServer_ActivateLink(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -3639,8 +3639,8 @@ func TestServer_GetLink(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -3815,8 +3815,8 @@ func TestServer_GetAllLinks(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -4049,8 +4049,8 @@ func TestServer_DeleteLink(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -4164,8 +4164,8 @@ func TestServer_DeleteLinkForDifferentDID(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, nil, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -4277,8 +4277,8 @@ func TestServer_CreateLinkQRCode(t *testing.T) { sessionRepository := repositories.NewSessionCached(cachex) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, qrService, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -4430,8 +4430,8 @@ func TestServer_GetLinkQRCode(t *testing.T) { revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) qrService := services.NewQrStoreService(cachex) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, qrService, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, qrService, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) linkService := services.NewLinkService(storage, claimsService, qrService, claimsRepo, linkRepository, schemaRepository, schemaLoader, sessionRepository, pubsub.NewMock(), ipfsGatewayURL) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) @@ -4611,8 +4611,8 @@ func TestServer_GetStateStatus(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) schema := "https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json" credentialSubject := map[string]any{ @@ -4760,8 +4760,8 @@ func TestServer_GetStateTransactions(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) @@ -4846,9 +4846,9 @@ func TestServer_GetRevocationStatus(t *testing.T) { connectionsRepository := repositories.NewConnections() revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) pubSub := pubsub.NewMock() - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, schemaLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubSub, ipfsGatewayURL, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) diff --git a/internal/config/config.go b/internal/config/config.go index 1a19aca0d..96b713e55 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -50,6 +50,7 @@ type Configuration struct { VaultUserPassAuthPassword string CredentialStatus CredentialStatus `mapstructure:"CredentialStatus"` CustomDIDMethods []CustomDIDMethods `mapstructure:"-"` + AutoPublishingToOnChainRHS *bool `mapstructure:"AutoPublishingToOnChainRHS"` } // Database has the database configuration @@ -507,10 +508,12 @@ func bindEnv() { _ = viper.BindEnv("ISSUER_CUSTOM_DID_METHODS") + _ = viper.BindEnv("AutoPublishingToOnChainRHS", "ISSUER_AUTO_PUBLISHING_TO_ON_CHAIN_RHS") + viper.AutomaticEnv() } -// nolint:gocyclo +// nolint:gocyclo,gocognit func checkEnvVars(ctx context.Context, cfg *Configuration) { if cfg.IPFS.GatewayURL == "" { log.Warn(ctx, "ISSUER_IPFS_GATEWAY_URL value is missing, using default value: "+ipfsGateway) @@ -626,6 +629,11 @@ func checkEnvVars(ctx context.Context, cfg *Configuration) { cfg.SchemaCache = common.ToPointer(false) } + if cfg.AutoPublishingToOnChainRHS == nil { + log.Info(ctx, "AutoPublishingToOnChainRHS is missing and the server set up it as true") + cfg.AutoPublishingToOnChainRHS = common.ToPointer(true) + } + if cfg.CredentialStatus.RHSMode == "" { log.Info(ctx, "ISSUER_CREDENTIAL_STATUS_RHS_MODE value is missing and the server set up it as None") cfg.CredentialStatus.RHSMode = "None" diff --git a/internal/config/credential_status.go b/internal/config/credential_status.go index 1291e973c..2440598e1 100644 --- a/internal/config/credential_status.go +++ b/internal/config/credential_status.go @@ -23,7 +23,7 @@ type CredentialStatus struct { Iden3CommAgentStatus Iden3CommAgentStatus RHS RHS OnchainTreeStore OnchainTreeStore `mapstructure:"OnchainTreeStore"` - RHSMode RHSMode `tip:"Reverse hash service mode (OffChain, OnChain, Mixed, None)"` + RHSMode RHSMode `tip:"Reverse hash service mode (OffChain, OnChain, None)"` SingleIssuer bool CredentialStatusType verifiable.CredentialStatusType `mapstructure:"CredentialStatusType" default:"Iden3commRevocationStatusV1"` } diff --git a/internal/core/ports/claims_service.go b/internal/core/ports/claims_service.go index fe2d39b4c..f894d8f9f 100644 --- a/internal/core/ports/claims_service.go +++ b/internal/core/ports/claims_service.go @@ -9,6 +9,7 @@ import ( "github.com/google/uuid" "github.com/iden3/go-iden3-core/v2/w3c" "github.com/iden3/go-schema-processor/v2/verifiable" + "github.com/iden3/iden3comm/v2" comm "github.com/iden3/iden3comm/v2" "github.com/iden3/iden3comm/v2/protocol" @@ -217,7 +218,7 @@ type ClaimsService interface { GetRevocationStatus(ctx context.Context, issuerDID w3c.DID, nonce uint64) (*verifiable.RevocationStatus, error) GetByID(ctx context.Context, issID *w3c.DID, id uuid.UUID) (*domain.Claim, error) GetCredentialQrCode(ctx context.Context, issID *w3c.DID, id uuid.UUID, hostURL string) (*GetCredentialQrCodeResponse, error) - Agent(ctx context.Context, req *AgentRequest) (*domain.Agent, error) + Agent(ctx context.Context, req *AgentRequest, mediatype iden3comm.MediaType) (*domain.Agent, error) GetAuthClaim(ctx context.Context, did *w3c.DID) (*domain.Claim, error) GetAuthClaimForPublishing(ctx context.Context, did *w3c.DID, state string) (*domain.Claim, error) UpdateClaimsMTPAndState(ctx context.Context, currentState *domain.IdentityState) error diff --git a/internal/core/ports/mediatype_manager.go b/internal/core/ports/mediatype_manager.go new file mode 100644 index 000000000..fc8c83405 --- /dev/null +++ b/internal/core/ports/mediatype_manager.go @@ -0,0 +1,8 @@ +package ports + +import "github.com/iden3/iden3comm/v2" + +// MediatypeManager - Define the interface for media type manager +type MediatypeManager interface { + AllowMediaType(protoclMessage iden3comm.ProtocolMessage, mediaType iden3comm.MediaType) bool +} diff --git a/internal/core/services/claims.go b/internal/core/services/claims.go index c6d5819ae..5a044a30b 100644 --- a/internal/core/services/claims.go +++ b/internal/core/services/claims.go @@ -17,6 +17,7 @@ import ( "github.com/iden3/go-schema-processor/v2/merklize" "github.com/iden3/go-schema-processor/v2/processor" "github.com/iden3/go-schema-processor/v2/verifiable" + "github.com/iden3/iden3comm/v2" "github.com/iden3/iden3comm/v2/packers" "github.com/iden3/iden3comm/v2/protocol" shell "github.com/ipfs/go-ipfs-api" @@ -67,10 +68,11 @@ type claim struct { publisher pubsub.Publisher ipfsClient *shell.Shell revocationStatusResolver *revocation_status.RevocationStatusResolver + mediatypeManager ports.MediatypeManager } // NewClaim creates a new claim service -func NewClaim(repo ports.ClaimsRepository, idenSrv ports.IdentityService, qrService ports.QrStoreService, mtService ports.MtService, identityStateRepository ports.IdentityStateRepository, ld loader.DocumentLoader, storage *db.Storage, host string, ps pubsub.Publisher, ipfsGatewayURL string, revocationStatusResolver *revocation_status.RevocationStatusResolver) ports.ClaimsService { +func NewClaim(repo ports.ClaimsRepository, idenSrv ports.IdentityService, qrService ports.QrStoreService, mtService ports.MtService, identityStateRepository ports.IdentityStateRepository, ld loader.DocumentLoader, storage *db.Storage, host string, ps pubsub.Publisher, ipfsGatewayURL string, revocationStatusResolver *revocation_status.RevocationStatusResolver, mediatypeManager ports.MediatypeManager) ports.ClaimsService { s := &claim{ host: host, icRepo: repo, @@ -82,6 +84,7 @@ func NewClaim(repo ports.ClaimsRepository, idenSrv ports.IdentityService, qrServ loader: ld, publisher: ps, revocationStatusResolver: revocationStatusResolver, + mediatypeManager: mediatypeManager, } if ipfsGatewayURL != "" { s.ipfsClient = shell.NewShell(ipfsGatewayURL) @@ -365,7 +368,13 @@ func (c *claim) GetCredentialQrCode(ctx context.Context, issID *w3c.DID, id uuid }, nil } -func (c *claim) Agent(ctx context.Context, req *ports.AgentRequest) (*domain.Agent, error) { +func (c *claim) Agent(ctx context.Context, req *ports.AgentRequest, mediatype iden3comm.MediaType) (*domain.Agent, error) { + if !c.mediatypeManager.AllowMediaType(req.Type, mediatype) { + err := fmt.Errorf("unsupported media type '%s' for message type '%s'", req.Typ, req.Type) + log.Error(ctx, "agent: unsupported media type", "err", err) + return nil, err + } + exists, err := c.identitySrv.Exists(ctx, *req.IssuerDID) if err != nil { log.Error(ctx, "loading issuer identity", "err", err, "issuerDID", req.IssuerDID) diff --git a/internal/core/services/identity.go b/internal/core/services/identity.go index a66306a1f..46b1c5867 100644 --- a/internal/core/services/identity.go +++ b/internal/core/services/identity.go @@ -73,34 +73,36 @@ type identity struct { kms kms.KMSType verifier *auth.Verifier - ignoreRHSErrors bool - pubsub pubsub.Publisher - revocationStatusResolver *revocation_status.RevocationStatusResolver - credentialStatusSettings config.CredentialStatus - rhsFactory reverse_hash.Factory + ignoreRHSErrors bool + pubsub pubsub.Publisher + revocationStatusResolver *revocation_status.RevocationStatusResolver + credentialStatusSettings config.CredentialStatus + rhsFactory reverse_hash.Factory + autoPublishingToOnChainRHS bool } // NewIdentity creates a new identity // nolint -func NewIdentity(kms kms.KMSType, identityRepository ports.IndentityRepository, imtRepository ports.IdentityMerkleTreeRepository, identityStateRepository ports.IdentityStateRepository, mtservice ports.MtService, qrService ports.QrStoreService, claimsRepository ports.ClaimsRepository, revocationRepository ports.RevocationRepository, connectionsRepository ports.ConnectionsRepository, storage *db.Storage, verifier *auth.Verifier, sessionRepository ports.SessionRepository, ps pubsub.Client, credentialStatusSettings config.CredentialStatus, rhsFactory reverse_hash.Factory, revocationStatusResolver *revocation_status.RevocationStatusResolver) ports.IdentityService { +func NewIdentity(kms kms.KMSType, identityRepository ports.IndentityRepository, imtRepository ports.IdentityMerkleTreeRepository, identityStateRepository ports.IdentityStateRepository, mtservice ports.MtService, qrService ports.QrStoreService, claimsRepository ports.ClaimsRepository, revocationRepository ports.RevocationRepository, connectionsRepository ports.ConnectionsRepository, storage *db.Storage, verifier *auth.Verifier, sessionRepository ports.SessionRepository, ps pubsub.Client, credentialStatusSettings config.CredentialStatus, rhsFactory reverse_hash.Factory, revocationStatusResolver *revocation_status.RevocationStatusResolver, autoPublishingToOnChainRHS bool) ports.IdentityService { return &identity{ - identityRepository: identityRepository, - imtRepository: imtRepository, - identityStateRepository: identityStateRepository, - claimsRepository: claimsRepository, - revocationRepository: revocationRepository, - connectionsRepository: connectionsRepository, - sessionManager: sessionRepository, - storage: storage, - mtService: mtservice, - qrService: qrService, - kms: kms, - ignoreRHSErrors: false, - verifier: verifier, - pubsub: ps, - credentialStatusSettings: credentialStatusSettings, - rhsFactory: rhsFactory, - revocationStatusResolver: revocationStatusResolver, + identityRepository: identityRepository, + imtRepository: imtRepository, + identityStateRepository: identityStateRepository, + claimsRepository: claimsRepository, + revocationRepository: revocationRepository, + connectionsRepository: connectionsRepository, + sessionManager: sessionRepository, + storage: storage, + mtService: mtservice, + qrService: qrService, + kms: kms, + ignoreRHSErrors: false, + verifier: verifier, + pubsub: ps, + credentialStatusSettings: credentialStatusSettings, + rhsFactory: rhsFactory, + revocationStatusResolver: revocationStatusResolver, + autoPublishingToOnChainRHS: autoPublishingToOnChainRHS, } } @@ -735,30 +737,44 @@ func (i *identity) createIdentity(ctx context.Context, tx db.Querier, hostURL st return nil, nil, fmt.Errorf("can't save identity: %w", err) } - rhsPublishers, err := i.rhsFactory.BuildPublishers(ctx, reverse_hash.RHSMode(i.credentialStatusSettings.RHSMode), &kms.KeyID{ - Type: kms.KeyTypeEthereum, - ID: i.credentialStatusSettings.OnchainTreeStore.PublishingKeyPath, - }) + rhsMode := reverse_hash.RHSMode(i.credentialStatusSettings.RHSMode) + rhsPublishers, err := i.rhsFactory.BuildPublishers( + ctx, + rhsMode, + &kms.KeyID{ + Type: kms.KeyTypeEthereum, + ID: i.credentialStatusSettings.OnchainTreeStore.PublishingKeyPath, + }) if err != nil { return nil, nil, fmt.Errorf("can't create RHS publisher: %w", err) } if len(rhsPublishers) > 0 { - log.Info(ctx, "publishing state to RHS", "publishers", len(rhsPublishers)) - for _, rhsPublisher := range rhsPublishers { - err := rhsPublisher.PublishNodesToRHS(ctx, []mtproof.Node{ - { - Hash: identity.State.TreeState().State, - Children: []*merkletree.Hash{ - claimsTree.Root(), - &merkletree.HashZero, - &merkletree.HashZero, + if rhsMode == reverse_hash.RHSModeOnChain && !i.autoPublishingToOnChainRHS { + log.Info(ctx, ` + state info (hashes): + root: '%s', + ClaimsTreeRoot: '%s', + RevocationsTreeRoot: '%s', + RootOfRootsTreeRoot: '%s', + `, identity.State.TreeState().State, claimsTree.Root(), &merkletree.HashZero, &merkletree.HashZero) + } else { + log.Info(ctx, "publishing state to RHS", "publishers", len(rhsPublishers)) + for _, rhsPublisher := range rhsPublishers { + err := rhsPublisher.PublishNodesToRHS(ctx, []mtproof.Node{ + { + Hash: identity.State.TreeState().State, + Children: []*merkletree.Hash{ + claimsTree.Root(), + &merkletree.HashZero, + &merkletree.HashZero, + }, }, - }, - }) - if err != nil { - log.Error(ctx, "publishing state to RHS", "err", err) - return nil, nil, err + }) + if err != nil { + log.Error(ctx, "publishing state to RHS", "err", err) + return nil, nil, err + } } } } diff --git a/internal/core/services/mediatype_manager.go b/internal/core/services/mediatype_manager.go new file mode 100644 index 000000000..8b0801b52 --- /dev/null +++ b/internal/core/services/mediatype_manager.go @@ -0,0 +1,48 @@ +package services + +import ( + "github.com/iden3/iden3comm/v2" + "github.com/iden3/iden3comm/v2/packers" + "github.com/iden3/iden3comm/v2/protocol" +) + +// DefaultMediaTypeManager default media type manager +var DefaultMediaTypeManager = NewMediaTypeManager( + map[iden3comm.ProtocolMessage][]string{ + protocol.CredentialFetchRequestMessageType: {string(packers.MediaTypeZKPMessage)}, + protocol.RevocationStatusRequestMessageType: {"*"}, + }, + true, +) + +// MediaTypeManager manages the list of allowed media types for the protocol message type +// if strictMode is true, then all messages that do not exist in the allowed list will be rejected +type MediaTypeManager struct { + strictMode bool + allowList map[iden3comm.ProtocolMessage][]string +} + +// NewMediaTypeManager create instance of MediaTypeManager +func NewMediaTypeManager(allowList map[iden3comm.ProtocolMessage][]string, strictMode bool) MediaTypeManager { + return MediaTypeManager{ + strictMode: strictMode, + allowList: allowList, + } +} + +// AllowMediaType check if the protocol message supports the mediaType type +func (m *MediaTypeManager) AllowMediaType( + protoclMessage iden3comm.ProtocolMessage, + mediaType iden3comm.MediaType, +) bool { + al, ok := m.allowList[protoclMessage] + if !ok { + return !m.strictMode + } + for _, v := range al { + if v == "*" || v == string(mediaType) { + return true + } + } + return false +} diff --git a/internal/core/services/mediatype_manager_test.go b/internal/core/services/mediatype_manager_test.go new file mode 100644 index 000000000..0de4305a4 --- /dev/null +++ b/internal/core/services/mediatype_manager_test.go @@ -0,0 +1,145 @@ +package services_test + +import ( + "testing" + + "github.com/iden3/iden3comm/v2" + "github.com/iden3/iden3comm/v2/packers" + "github.com/iden3/iden3comm/v2/protocol" + "github.com/stretchr/testify/require" + + "github.com/polygonid/sh-id-platform/internal/core/services" +) + +func TestMediatypeManager_AllowList(t *testing.T) { + type testcase struct { + name string + allowList map[iden3comm.ProtocolMessage][]string + targetProtocolMessage iden3comm.ProtocolMessage + targetMediatype iden3comm.MediaType + expected bool + strictMode bool + } + testcases := []testcase{ + { + name: "strictMode = true. Protocol message not in the allow list", + allowList: map[iden3comm.ProtocolMessage][]string{ + protocol.RevocationStatusRequestMessageType: {"*"}, + }, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypeZKPMessage, + expected: false, + strictMode: true, + }, + { + name: "strictMode = false. Protocol message not in the allow list", + allowList: map[iden3comm.ProtocolMessage][]string{ + protocol.RevocationStatusRequestMessageType: {"*"}, + }, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypeZKPMessage, + expected: true, + strictMode: false, + }, + { + name: "Protocol message on the allow list with '*'", + allowList: map[iden3comm.ProtocolMessage][]string{ + protocol.CredentialFetchRequestMessageType: {"*"}, + }, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: true, + strictMode: true, + }, + { + name: "Protocol message on the allow list with allow media type", + allowList: map[iden3comm.ProtocolMessage][]string{ + protocol.CredentialFetchRequestMessageType: {string(packers.MediaTypeZKPMessage)}, + }, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypeZKPMessage, + expected: true, + strictMode: true, + }, + { + name: "Protocol message on the allow list with NOT allow media type", + allowList: map[iden3comm.ProtocolMessage][]string{ + protocol.CredentialFetchRequestMessageType: {string(packers.MediaTypeZKPMessage)}, + }, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: false, + strictMode: true, + }, + { + name: "strictMode = true. Empty allow list", + allowList: map[iden3comm.ProtocolMessage][]string{}, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: false, + strictMode: true, + }, + { + name: "strictMode = false. Empty allow list", + allowList: map[iden3comm.ProtocolMessage][]string{}, + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: true, + strictMode: false, + }, + } + + for _, tt := range testcases { + t.Run(tt.name, func(t *testing.T) { + mdm := services.NewMediaTypeManager( + tt.allowList, tt.strictMode, + ) + actual := mdm.AllowMediaType( + tt.targetProtocolMessage, tt.targetMediatype, + ) + require.Equal(t, tt.expected, actual) + }) + } +} + +func TestMediatypeManager_DefaultPacker(t *testing.T) { + type testcase struct { + name string + targetProtocolMessage iden3comm.ProtocolMessage + targetMediatype iden3comm.MediaType + expected bool + } + testcases := []testcase{ + { + name: "call CredentialFetchRequestMessageType with MediaTypePlainMessage", + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: false, + }, + { + name: "call CredentialFetchRequestMessageType with MediaTypeZKPMessage", + targetProtocolMessage: protocol.CredentialFetchRequestMessageType, + targetMediatype: packers.MediaTypeZKPMessage, + expected: true, + }, + { + name: "call RevocationStatusRequestMessageType with MediaTypePlainMessage", + targetProtocolMessage: protocol.RevocationStatusRequestMessageType, + targetMediatype: packers.MediaTypePlainMessage, + expected: true, + }, + { + name: "call RevocationStatusRequestMessageType with MediaTypeZKPMessage", + targetProtocolMessage: protocol.RevocationStatusRequestMessageType, + targetMediatype: packers.MediaTypeZKPMessage, + expected: true, + }, + } + + for _, tt := range testcases { + t.Run(tt.name, func(t *testing.T) { + actual := services.DefaultMediaTypeManager.AllowMediaType(tt.targetProtocolMessage, tt.targetMediatype) + require.Equal(t, tt.expected, actual) + }) + } +} diff --git a/internal/core/services/tests/identity_test.go b/internal/core/services/tests/identity_test.go index 2e4c62cd8..5a63e2e6e 100644 --- a/internal/core/services/tests/identity_test.go +++ b/internal/core/services/tests/identity_test.go @@ -40,8 +40,8 @@ func Test_identity_UpdateState(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver, &services.DefaultMediaTypeManager) identity, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) @@ -219,7 +219,7 @@ func Test_identity_GetByDID(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) identity, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) assert.NoError(t, err) diff --git a/internal/core/services/tests/link_test.go b/internal/core/services/tests/link_test.go index 1d1de11cb..0b110f761 100644 --- a/internal/core/services/tests/link_test.go +++ b/internal/core/services/tests/link_test.go @@ -36,10 +36,10 @@ func Test_link_issueClaim(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) sessionRepository := repositories.NewSessionCached(cachex) schemaService := services.NewSchema(schemaRepository, docLoader) - claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver) + claimsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver, &services.DefaultMediaTypeManager) identity, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) assert.NoError(t, err) diff --git a/internal/core/services/tests/main_test.go b/internal/core/services/tests/main_test.go index a0bac0440..3e9be27c7 100644 --- a/internal/core/services/tests/main_test.go +++ b/internal/core/services/tests/main_test.go @@ -7,6 +7,7 @@ import ( "github.com/hashicorp/vault/api" + "github.com/polygonid/sh-id-platform/internal/common" "github.com/polygonid/sh-id-platform/internal/config" "github.com/polygonid/sh-id-platform/internal/db" "github.com/polygonid/sh-id-platform/internal/db/tests" @@ -92,6 +93,7 @@ func TestMain(m *testing.M) { docLoader = loader.NewDocumentLoader(ipfsGatewayURL) + cfg.AutoPublishingToOnChainRHS = common.ToPointer[bool](true) cfg.CredentialStatus = config.CredentialStatus{ RHSMode: "None", Iden3CommAgentStatus: config.Iden3CommAgentStatus{ diff --git a/internal/core/services/tests/notification_test.go b/internal/core/services/tests/notification_test.go index 71ed3472a..78e2aec30 100644 --- a/internal/core/services/tests/notification_test.go +++ b/internal/core/services/tests/notification_test.go @@ -40,8 +40,8 @@ func TestNotification_SendNotification(t *testing.T) { connectionsRepository := repositories.NewConnections() rhsFactory := reverse_hash.NewFactory(cfg.CredentialStatus.RHS.URL, nil, commonEth.HexToAddress(cfg.CredentialStatus.OnchainTreeStore.SupportedTreeStoreContract), reverse_hash.DefaultRHSTimeOut) revocationStatusResolver := revocation_status.NewRevocationStatusResolver(cfg.CredentialStatus) - identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver) - credentialsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver) + identityService := services.NewIdentity(keyStore, identityRepo, mtRepo, identityStateRepo, mtService, nil, claimsRepo, revocationRepository, connectionsRepository, storage, nil, nil, pubsub.NewMock(), cfg.CredentialStatus, rhsFactory, revocationStatusResolver, *cfg.AutoPublishingToOnChainRHS) + credentialsService := services.NewClaim(claimsRepo, identityService, nil, mtService, identityStateRepo, docLoader, storage, cfg.CredentialStatus.Iden3CommAgentStatus.GetURL(), pubsub.NewMock(), ipfsGateway, revocationStatusResolver, &services.DefaultMediaTypeManager) connectionsService := services.NewConnection(connectionsRepository, claimsRepo, storage) iden, err := identityService.Create(ctx, "polygon-test", &ports.DIDCreationOptions{Method: method, Blockchain: blockchain, Network: network, KeyType: BJJ}) require.NoError(t, err) From 15f1183010a6b6fdcf68246b69e1018c757cbc23 Mon Sep 17 00:00:00 2001 From: Ilya Date: Mon, 17 Jun 2024 15:19:22 +0300 Subject: [PATCH 2/2] to common code style --- internal/core/services/identity.go | 14 +++++++------- internal/core/services/mediatype_manager.go | 5 +---- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/internal/core/services/identity.go b/internal/core/services/identity.go index 46b1c5867..c15d8502d 100644 --- a/internal/core/services/identity.go +++ b/internal/core/services/identity.go @@ -751,13 +751,13 @@ func (i *identity) createIdentity(ctx context.Context, tx db.Querier, hostURL st if len(rhsPublishers) > 0 { if rhsMode == reverse_hash.RHSModeOnChain && !i.autoPublishingToOnChainRHS { - log.Info(ctx, ` - state info (hashes): - root: '%s', - ClaimsTreeRoot: '%s', - RevocationsTreeRoot: '%s', - RootOfRootsTreeRoot: '%s', - `, identity.State.TreeState().State, claimsTree.Root(), &merkletree.HashZero, &merkletree.HashZero) + log.Info(ctx, + "state info (bigints):", + "root:", identity.State.TreeState().State.BigInt().String(), + "claimsTreeRoot:", claimsTree.Root().BigInt().String(), + "revocationsTreeRoot:", merkletree.HashZero.BigInt().String(), + "rootOfRootsTreeRoot:", merkletree.HashZero.BigInt().String(), + ) } else { log.Info(ctx, "publishing state to RHS", "publishers", len(rhsPublishers)) for _, rhsPublisher := range rhsPublishers { diff --git a/internal/core/services/mediatype_manager.go b/internal/core/services/mediatype_manager.go index 8b0801b52..4e19157d4 100644 --- a/internal/core/services/mediatype_manager.go +++ b/internal/core/services/mediatype_manager.go @@ -31,10 +31,7 @@ func NewMediaTypeManager(allowList map[iden3comm.ProtocolMessage][]string, stric } // AllowMediaType check if the protocol message supports the mediaType type -func (m *MediaTypeManager) AllowMediaType( - protoclMessage iden3comm.ProtocolMessage, - mediaType iden3comm.MediaType, -) bool { +func (m *MediaTypeManager) AllowMediaType(protoclMessage iden3comm.ProtocolMessage, mediaType iden3comm.MediaType) bool { al, ok := m.allowList[protoclMessage] if !ok { return !m.strictMode