From 3aa4ffa0724c1287c344d5e15064dbdb519b1c21 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Mon, 3 Apr 2023 16:07:45 +0400 Subject: [PATCH 01/46] Add handling for only did queries and small refactoring --- main.go | 8 +- .../diddoc/diddoc_all_version_metadata.go | 2 +- services/diddoc/diddoc_fragment.go | 2 +- services/diddoc/diddoc_query.go | 91 ++++++++++++-- services/diddoc/diddoc_version_metadata.go | 2 +- {utils => services}/error_handler.go | 2 +- services/ledger_service.go | 9 +- services/queries/base_handler.go | 35 ++++++ services/queries/query_did_handler.go | 31 +++++ services/queries/relative_ref_handler.go | 29 +++++ services/queries/service_handler.go | 34 +++++ services/queries/stop_handler.go | 14 +++ services/queries/version_id_handler.go | 29 +++++ services/queries/version_time_handler.go | 47 +++++++ services/request_service_base.go | 33 ++++- services/request_service_interface.go | 10 ++ .../resource_collection_dereferencing.go | 2 +- .../resource/resource_data_dereferencing.go | 2 +- .../resource_metadata_dereferencing.go | 2 +- tests/unit-tests/supported_queries_test.go | 34 +++++ types/constants.go | 7 ++ types/dereferecing_metadata.go | 35 +++++- types/did_doc.go | 15 +++ types/did_service.go | 28 +++++ types/helper.go | 115 +++++++++++++++++ types/interfaces.go | 1 + types/resolution_metadata.go | 90 ++++---------- types/supported_queries.go | 29 +++++ utils/config.go | 117 ------------------ utils/did.go | 8 +- utils/did_url.go | 74 +++++++++-- utils/parse_time.go | 20 +++ 32 files changed, 729 insertions(+), 228 deletions(-) rename {utils => services}/error_handler.go (98%) create mode 100644 services/queries/base_handler.go create mode 100644 services/queries/query_did_handler.go create mode 100644 services/queries/relative_ref_handler.go create mode 100644 services/queries/service_handler.go create mode 100644 services/queries/stop_handler.go create mode 100644 services/queries/version_id_handler.go create mode 100644 services/queries/version_time_handler.go create mode 100644 tests/unit-tests/supported_queries_test.go create mode 100644 types/did_service.go create mode 100644 types/supported_queries.go delete mode 100644 utils/config.go create mode 100644 utils/parse_time.go diff --git a/main.go b/main.go index d6d7e0c0..af9a2ba7 100644 --- a/main.go +++ b/main.go @@ -18,9 +18,9 @@ import ( func serve() { // Get Config - config := utils.GetConfig() + config := types.GetConfig() // Setup logger - utils.SetupLogger(config) + types.SetupLogger(config) // Services ledgerService := services.NewLedgerService() didService := services.NewDIDDocService(types.DID_METHOD, ledgerService) @@ -36,7 +36,7 @@ func serve() { // Echo instance e := echo.New() - e.HTTPErrorHandler = utils.CustomHTTPErrorHandler + e.HTTPErrorHandler = services.CustomHTTPErrorHandler // Middleware e.Use(func(next echo.HandlerFunc) echo.HandlerFunc { @@ -86,7 +86,7 @@ func serve() { // @schemes https http func main() { - err := utils.PrintConfig() + err := types.PrintConfig() if err != nil { panic(err) } diff --git a/services/diddoc/diddoc_all_version_metadata.go b/services/diddoc/diddoc_all_version_metadata.go index c72daf97..5fba1e90 100644 --- a/services/diddoc/diddoc_all_version_metadata.go +++ b/services/diddoc/diddoc_all_version_metadata.go @@ -34,6 +34,6 @@ func (dd *DIDDocAllVersionMetadataRequestService) Query(c services.ResolverConte if err != nil { return err } - dd.Result = result + dd.SetResponse(result) return nil } diff --git a/services/diddoc/diddoc_fragment.go b/services/diddoc/diddoc_fragment.go index e2ef2879..ef5a7fb2 100644 --- a/services/diddoc/diddoc_fragment.go +++ b/services/diddoc/diddoc_fragment.go @@ -34,6 +34,6 @@ func (dd *FragmentDIDDocRequestService) Query(c services.ResolverContext) error err.IsDereferencing = dd.IsDereferencing return err } - dd.Result = result + dd.SetResponse(result) return nil } diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 0a3a1670..36c2df5d 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -1,20 +1,31 @@ package diddoc import ( + "net/http" "net/url" + "strings" "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/queries" "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/utils" + // "github.com/cheqd/did-resolver/utils" +) + +const ( + supportedQueries = "versionId,versionTime,service,relativeRef" ) type QueryDIDDocRequestService struct { services.BaseRequestService + FirstHandler queries.BaseQueryHandlerI } func (dd *QueryDIDDocRequestService) Setup(c services.ResolverContext) error { dd.IsDereferencing = true - return nil + + // Register query handlers + return dd.RegisterQueryHandlers(c) } func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverContext) error { @@ -23,14 +34,35 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewInvalidDIDUrlError(dd.Did, dd.RequestedContentType, err, dd.IsDereferencing) } - // ToDo make list of supported queries - // For now we support only versionId - if dd.Version == "" { + diff := types.DidSupportedQueries.DiffWithUrlValues(dd.Queries) + if len(diff) > 0 { + return types.NewRepresentationNotSupportedError("Queries from list: " + strings.Join(diff, ","), dd.RequestedContentType, nil, dd.IsDereferencing) + } + + versionId := dd.GetQueryParam(types.VersionId) + versionTime := dd.GetQueryParam(types.VersionTime) + service := dd.GetQueryParam(types.ServiceQ) + relativeRef := dd.GetQueryParam(types.RelativeRef) + + // Validation of query parameters + if versionId != "" && versionTime != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + } + + // relativeRef should be only with service parameter also + if relativeRef != "" && service == "" { return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } + if versionTime != "" { + _, err := utils.ParseFromStringTimeToGoTime(versionTime) + if err != nil { + return types.NewRepresentationNotSupportedError(versionTime, dd.RequestedContentType, err, dd.IsDereferencing) + } + } + // Validate that versionId is UUID - if !utils.IsValidUUID(dd.Version) { + if versionId != "" && !utils.IsValidUUID(dd.Version) { return types.NewInvalidDIDUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) } @@ -47,10 +79,53 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } dd.Queries = queries + return nil +} + +func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { + // ToDo register query handlers + relativeRefHandler := queries.RelativeRefHandler{} + serviceHandler := queries.ServiceHandler{} + versionIdHandler := queries.VersionIdHandler{} + versionTimeHandler := queries.VersionTimeHandler{} + didQueryHandler := queries.DidQueryHandler{} - version := queries.Get("versionId") - if version != "" { - dd.Version = version + stopHandler := queries.StopHandler{} + + // Create Chain of responsibility + // First we need to just ask for Did: + // - didQueryHandler + // or + // - versionIdHandler + // After that we can find for service field if it's set. + // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler + + didQueryHandler.SetNext(c, &versionIdHandler) + versionIdHandler.SetNext(c, &versionTimeHandler) + versionTimeHandler.SetNext(c, &serviceHandler) + serviceHandler.SetNext(c, &relativeRefHandler) + relativeRefHandler.SetNext(c, &stopHandler) + + dd.FirstHandler = &didQueryHandler + + return nil +} + +func (dd *QueryDIDDocRequestService) Query(c services.ResolverContext) error { + result, err := dd.FirstHandler.Handle(c, dd, nil) + if err != nil { + return err + } + if result == nil { + return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } + dd.SetResponse(result) return nil } + +func (dd QueryDIDDocRequestService) Respond(c services.ResolverContext) error { + if dd.Result.IsRedirect() { + return c.Redirect(http.StatusSeeOther, string(dd.Result.GetBytes())) + } + return c.JSONPretty(http.StatusOK, dd.Result, " ") +} diff --git a/services/diddoc/diddoc_version_metadata.go b/services/diddoc/diddoc_version_metadata.go index 040c4b55..49dcbcd8 100644 --- a/services/diddoc/diddoc_version_metadata.go +++ b/services/diddoc/diddoc_version_metadata.go @@ -43,6 +43,6 @@ func (dd *DIDDocVersionMetadataRequestService) Query(c services.ResolverContext) if err != nil { return err } - dd.Result = result + dd.SetResponse(result) return nil } diff --git a/utils/error_handler.go b/services/error_handler.go similarity index 98% rename from utils/error_handler.go rename to services/error_handler.go index e9c504b5..130f2b5e 100644 --- a/utils/error_handler.go +++ b/services/error_handler.go @@ -1,4 +1,4 @@ -package utils +package services import ( "net/http" diff --git a/services/ledger_service.go b/services/ledger_service.go index d05362b0..2e19650d 100644 --- a/services/ledger_service.go +++ b/services/ledger_service.go @@ -11,6 +11,7 @@ import ( didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/utils" "github.com/rs/zerolog/log" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" @@ -40,7 +41,7 @@ func NewLedgerService() LedgerService { } func (ls LedgerService) QueryDIDDoc(did string, version string) (*didTypes.DidDocWithMetadata, *types.IdentityError) { - method, namespace, _, _ := types.TrySplitDID(did) + method, namespace, _, _ := utils.TrySplitDID(did) serverAddr, namespaceFound := ls.ledgers[method+DELIMITER+namespace] if !namespaceFound { return nil, types.NewInvalidDIDError(did, types.JSON, nil, false) @@ -75,7 +76,7 @@ func (ls LedgerService) QueryDIDDoc(did string, version string) (*didTypes.DidDo } func (ls LedgerService) QueryAllDidDocVersionsMetadata(did string) ([]*didTypes.Metadata, *types.IdentityError) { - method, namespace, _, _ := types.TrySplitDID(did) + method, namespace, _, _ := utils.TrySplitDID(did) serverAddr, namespaceFound := ls.ledgers[method+DELIMITER+namespace] if !namespaceFound { return nil, types.NewInvalidDIDError(did, types.JSON, nil, false) @@ -100,7 +101,7 @@ func (ls LedgerService) QueryAllDidDocVersionsMetadata(did string) ([]*didTypes. } func (ls LedgerService) QueryResource(did string, resourceId string) (*resourceTypes.ResourceWithMetadata, *types.IdentityError) { - method, namespace, collectionId, _ := types.TrySplitDID(did) + method, namespace, collectionId, _ := utils.TrySplitDID(did) serverAddr, namespaceFound := ls.ledgers[method+DELIMITER+namespace] if !namespaceFound { return nil, types.NewInvalidDIDError(did, types.JSON, nil, true) @@ -127,7 +128,7 @@ func (ls LedgerService) QueryResource(did string, resourceId string) (*resourceT } func (ls LedgerService) QueryCollectionResources(did string) ([]*resourceTypes.Metadata, *types.IdentityError) { - method, namespace, collectionId, _ := types.TrySplitDID(did) + method, namespace, collectionId, _ := utils.TrySplitDID(did) serverAddr, namespaceFound := ls.ledgers[method+DELIMITER+namespace] if !namespaceFound { return nil, types.NewInvalidDIDError(did, types.JSON, nil, false) diff --git a/services/queries/base_handler.go b/services/queries/base_handler.go new file mode 100644 index 00000000..535ae07a --- /dev/null +++ b/services/queries/base_handler.go @@ -0,0 +1,35 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type BaseQueryHandlerI interface { + SetNext(c services.ResolverContext, next BaseQueryHandlerI) error + // ToDo too many parameters, need to increase + Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) + Continue(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) +} + +type BaseQueryHandler struct { + IsDereferencing bool + next BaseQueryHandlerI +} + +func (b *BaseQueryHandler) SetNext(c services.ResolverContext, next BaseQueryHandlerI) error { + // All the query handlers are dereferencing by default + b.IsDereferencing = true + if next == nil { + return types.NewInternalError("next handler is nil", types.DIDJSONLD, nil, b.IsDereferencing) + } + b.next = next + return nil +} + +func (b *BaseQueryHandler) Continue(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + if b.next == nil { + return nil, types.NewInternalError("next handler is nil", types.DIDJSONLD, nil, b.IsDereferencing) + } + return b.next.Handle(c, service, response) +} diff --git a/services/queries/query_did_handler.go b/services/queries/query_did_handler.go new file mode 100644 index 00000000..6cfb7dcb --- /dev/null +++ b/services/queries/query_did_handler.go @@ -0,0 +1,31 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type DidQueryHandler struct { + BaseQueryHandler +} + +func (d *DidQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + versionId := service.GetQueryParam(types.VersionId) + versionTime := service.GetQueryParam(types.VersionTime) + + // Here we are handling only query DID without versionId and versionTime + if versionId != "" || versionTime != "" { + return d.Continue(c, service, response) + } + // Get Params + did := service.GetDid() + contentType := service.GetContentType() + + result, err := c.DidDocService.Resolve(did, "", contentType) + if err != nil { + err.IsDereferencing = d.IsDereferencing + return nil, err + } + // Call the next handler + return d.Continue(c, service, result) +} diff --git a/services/queries/relative_ref_handler.go b/services/queries/relative_ref_handler.go new file mode 100644 index 00000000..60c88035 --- /dev/null +++ b/services/queries/relative_ref_handler.go @@ -0,0 +1,29 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type RelativeRefHandler struct { + BaseQueryHandler +} + +func (r *RelativeRefHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // Get Params + relativeRef := service.GetQueryParam(types.RelativeRef) + + // If relativeRef is empty, call the next handler. We don't need to handle it here + if relativeRef == "" { + return r.Continue(c, service, response) + } + + // We expect here only DidResolution + serviceResult, ok := response.(*types.ServiceResult) + if !ok { + return r.Continue(c, service, response) + } + + // Call the next handler + return r.Continue(c, service, types.NewServiceResult(serviceResult.GetServiceEndpoint() + relativeRef)) +} diff --git a/services/queries/service_handler.go b/services/queries/service_handler.go new file mode 100644 index 00000000..2cd8a405 --- /dev/null +++ b/services/queries/service_handler.go @@ -0,0 +1,34 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ServiceHandler struct { + BaseQueryHandler +} + +func (s *ServiceHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // Get Params + serviceValue := service.GetQueryParam(types.ServiceQ) + + // If serviceValue is empty, call the next handler. We don't need to handle it here + if serviceValue == "" { + return s.next.Handle(c, service, response) + } + + // We expect here only DidResolution + didResolution, ok := response.(*types.DidResolution) + if !ok { + return nil, types.NewInternalError("response is not DidResolution", types.DIDJSONLD, nil, s.IsDereferencing) + } + + result, err := didResolution.GetServiceByName(serviceValue) + if err != nil { + return nil, err + } + + // Call the next handler + return s.Continue(c, service, types.NewServiceResult(result)) +} diff --git a/services/queries/stop_handler.go b/services/queries/stop_handler.go new file mode 100644 index 00000000..dbe9f6d0 --- /dev/null +++ b/services/queries/stop_handler.go @@ -0,0 +1,14 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type StopHandler struct { + BaseQueryHandler +} + +func (s *StopHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + return response, nil +} \ No newline at end of file diff --git a/services/queries/version_id_handler.go b/services/queries/version_id_handler.go new file mode 100644 index 00000000..15487c67 --- /dev/null +++ b/services/queries/version_id_handler.go @@ -0,0 +1,29 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type VersionIdHandler struct { + BaseQueryHandler +} + +func (v *VersionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // Get Params + did := service.GetDid() + contentType := service.GetContentType() + versionId := service.GetQueryParam(types.VersionId) + + // If versionId is empty, call the next handler. We don't need to handle it here + if versionId == "" { + return v.Continue(c, service, response) + } + result, err := c.DidDocService.Resolve(did, versionId, contentType) + if err != nil { + err.IsDereferencing = v.IsDereferencing + return nil, err + } + // Call the next handler + return v.Continue(c, service, result) +} diff --git a/services/queries/version_time_handler.go b/services/queries/version_time_handler.go new file mode 100644 index 00000000..208f8098 --- /dev/null +++ b/services/queries/version_time_handler.go @@ -0,0 +1,47 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type VersionTimeHandler struct { + BaseQueryHandler +} + +func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + versionTime := service.GetQueryParam(types.VersionTime) + + // Here we are handling only query DID without versionId and versionTime + if versionTime == "" { + return v.Continue(c, service, response) + } + // Get Params + did := service.GetDid() + contentType := service.GetContentType() + + allMetadatas, err := c.DidDocService.GetAllDidDocVersionsMetadata(did, contentType) + if err != nil { + err.IsDereferencing = false + return nil, err + } + + allVersions := allMetadatas.ContentStream.(*types.DereferencedDidVersionsList) + if len(allVersions.Versions) == 0 { + return nil, types.NewNotFoundError("No versions found", contentType, nil, v.IsDereferencing) + } + + versionId, _err := allVersions.FindBeforeTime(versionTime) + if _err != nil { + return nil, types.NewInternalError("error while finding version before time", contentType, _err, v.IsDereferencing) + } + + result, err := c.DidDocService.Resolve(did, versionId, contentType) + if err != nil { + err.IsDereferencing = v.IsDereferencing + return nil, err + } + + // Call the next handler + return v.Continue(c, service, result) +} \ No newline at end of file diff --git a/services/request_service_base.go b/services/request_service_base.go index 5efd7e67..7d5d5721 100644 --- a/services/request_service_base.go +++ b/services/request_service_base.go @@ -18,11 +18,29 @@ type ( Fragment string IsDereferencing bool Queries url.Values - Result types.ResultI + Result types.ResolutionResultI RequestedContentType types.ContentType } ) +// Getters +func (dd BaseRequestService) GetDid() string { + return dd.Did +} + +func (dd BaseRequestService) GetContentType() types.ContentType { + return dd.RequestedContentType +} + +func (dd BaseRequestService) GetQueryParam(name string) string { + return dd.Queries.Get(name) +} + +func (dd BaseRequestService) GetDereferencing() bool { + return dd.IsDereferencing +} + +// Basic implementation func (dd *BaseRequestService) BasicPrepare(c ResolverContext) error { // Here we raise errors even they were caught while getting the data from context @@ -46,7 +64,7 @@ func (dd *BaseRequestService) BasicPrepare(c ResolverContext) error { } func (dd BaseRequestService) BasicValidation(c ResolverContext) error { - didMethod, _, _, _ := types.TrySplitDID(dd.Did) + didMethod, _, _, _ := utils.TrySplitDID(dd.Did) if didMethod != types.DID_METHOD { return types.NewMethodNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } @@ -62,7 +80,7 @@ func (dd BaseRequestService) BasicValidation(c ResolverContext) error { func (dd *BaseRequestService) IsRedirectNeeded(c ResolverContext) bool { if !utils.IsValidDID(dd.Did, "", c.LedgerService.GetNamespaces()) { err := utils.ValidateDID(dd.Did, "", c.LedgerService.GetNamespaces()) - _, _, identifier, _ := types.TrySplitDID(dd.Did) + _, _, identifier, _ := utils.TrySplitDID(dd.Did) if err.Error() == types.NewInvalidIdentifierError().Error() && utils.IsMigrationNeeded(identifier) { return true } @@ -84,7 +102,7 @@ func (dd *BaseRequestService) Query(c ResolverContext) error { err.IsDereferencing = false return err } - dd.Result = result + dd.SetResponse(result) return nil } @@ -99,3 +117,10 @@ func (dd BaseRequestService) SetupResponse(c ResolverContext) error { func (dd BaseRequestService) Respond(c ResolverContext) error { return c.JSONPretty(http.StatusOK, dd.Result, " ") } + +// Setters + +func (dd *BaseRequestService) SetResponse(response types.ResolutionResultI) error { + dd.Result = response + return nil +} \ No newline at end of file diff --git a/services/request_service_interface.go b/services/request_service_interface.go index 817a5632..37a6f283 100644 --- a/services/request_service_interface.go +++ b/services/request_service_interface.go @@ -1,10 +1,20 @@ package services import ( + "github.com/cheqd/did-resolver/types" echo "github.com/labstack/echo/v4" ) type RequestServiceI interface { + // Getters + GetDid() string + GetContentType() types.ContentType + GetQueryParam(name string) string + GetDereferencing() bool + + // Setters + SetResponse(r types.ResolutionResultI) error + // Checks IsRedirectNeeded(c ResolverContext) bool diff --git a/services/resource/resource_collection_dereferencing.go b/services/resource/resource_collection_dereferencing.go index d91f4fee..440186ec 100644 --- a/services/resource/resource_collection_dereferencing.go +++ b/services/resource/resource_collection_dereferencing.go @@ -39,6 +39,6 @@ func (dr *ResourceCollectionDereferencingService) Query(c services.ResolverConte err.IsDereferencing = dr.IsDereferencing return err } - dr.Result = result + dr.SetResponse(result) return nil } diff --git a/services/resource/resource_data_dereferencing.go b/services/resource/resource_data_dereferencing.go index 8815d078..6ebfe43c 100644 --- a/services/resource/resource_data_dereferencing.go +++ b/services/resource/resource_data_dereferencing.go @@ -45,7 +45,7 @@ func (dr *ResourceDataDereferencingService) Query(c services.ResolverContext) er err.IsDereferencing = dr.IsDereferencing return err } - dr.Result = result + dr.SetResponse(result) return nil } diff --git a/services/resource/resource_metadata_dereferencing.go b/services/resource/resource_metadata_dereferencing.go index d22690ca..00215822 100644 --- a/services/resource/resource_metadata_dereferencing.go +++ b/services/resource/resource_metadata_dereferencing.go @@ -44,6 +44,6 @@ func (dr *ResourceMetadataDereferencingService) Query(c services.ResolverContext err.IsDereferencing = dr.IsDereferencing return err } - dr.Result = result + dr.SetResponse(result) return nil } diff --git a/tests/unit-tests/supported_queries_test.go b/tests/unit-tests/supported_queries_test.go new file mode 100644 index 00000000..88f64524 --- /dev/null +++ b/tests/unit-tests/supported_queries_test.go @@ -0,0 +1,34 @@ +package tests + +import ( + "github.com/cheqd/did-resolver/types" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("Diff with values tests", func() { + It("returns empty list if all values are supported", func() { + supportedQueries := types.SupportedQueriesT{"a", "b", "c"} + values := map[string][]string{ + "a": {"1"}, + "b": {"2"}, + "c": {"3"}, + } + + result := supportedQueries.DiffWithUrlValues(values) + Expect(result).To(BeEmpty()) + }) + + It("returns list with unsupported values", func() { + supportedQueries := types.SupportedQueriesT{"a", "b", "c"} + values := map[string][]string{ + "a": {"1"}, + "b": {"2"}, + "c": {"3"}, + "d": {"4"}, + } + + result := supportedQueries.DiffWithUrlValues(values) + Expect(result).To(Equal([]string{"d"})) + }) +}) \ No newline at end of file diff --git a/types/constants.go b/types/constants.go index 44786539..0f78fe86 100644 --- a/types/constants.go +++ b/types/constants.go @@ -35,3 +35,10 @@ const ( RESOURCE_PATH = "/resources/" SWAGGER_PATH = "/swagger/*" ) + +const ( + VersionId string = "versionId" + VersionTime string = "versionTime" + ServiceQ string = "service" + RelativeRef string = "relativeRef" +) diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index f6e480e2..6dbb2578 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -2,14 +2,11 @@ package types import ( didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" + "github.com/cheqd/did-resolver/utils" ) type DereferencingMetadata ResolutionMetadata -type ResultI interface { - GetContentType() string - GetBytes() []byte -} type DidDereferencing struct { Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` @@ -22,6 +19,8 @@ func NewDereferencingMetadata(did string, contentType ContentType, resolutionErr return DereferencingMetadata(NewResolutionMetadata(did, contentType, resolutionError)) } +// Interface implementation + func (d DidDereferencing) GetContentType() string { return string(d.DereferencingMetadata.ContentType) } @@ -33,6 +32,11 @@ func (d DidDereferencing) GetBytes() []byte { return d.ContentStream.GetBytes() } +func (r DidDereferencing) IsRedirect() bool { + return false +} +// end of Interface implementation + type ResourceDereferencing struct { Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` @@ -40,6 +44,8 @@ type ResourceDereferencing struct { Metadata ResolutionResourceMetadata `json:"contentMetadata"` } +// Interface implementation + func (d ResourceDereferencing) GetContentType() string { return string(d.DereferencingMetadata.ContentType) } @@ -51,6 +57,12 @@ func (d ResourceDereferencing) GetBytes() []byte { return d.ContentStream.GetBytes() } +func (r ResourceDereferencing) IsRedirect() bool { + return false +} +// end of Interface implementation + + type DereferencedDidVersionsList struct { Versions []ResolutionDidDocMetadata `json:"versions,omitempty"` } @@ -69,3 +81,18 @@ func NewDereferencedDidVersionsList(versions []*didTypes.Metadata) *Dereferenced func (e *DereferencedDidVersionsList) AddContext(newProtocol string) {} func (e *DereferencedDidVersionsList) RemoveContext() {} func (e *DereferencedDidVersionsList) GetBytes() []byte { return []byte{} } + +// Returns VersionId if there is a version before the given time +// Otherwise NotFound error +func (e DereferencedDidVersionsList) FindBeforeTime(before string) (string, error) { + time_before, err := utils.ParseFromStringTimeToGoTime(before) + if err != nil { + return "", err + } + for _, version := range e.Versions { + if version.Created.Before(time_before) { + return version.VersionId, nil + } + } + return "", nil +} diff --git a/types/did_doc.go b/types/did_doc.go index 4babe417..4ca4103f 100644 --- a/types/did_doc.go +++ b/types/did_doc.go @@ -2,6 +2,7 @@ package types import ( "encoding/json" + "net/url" did "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" ) @@ -110,3 +111,17 @@ func (e *VerificationMethod) AddContext(newProtocol string) { } func (e *VerificationMethod) RemoveContext() { e.Context = nil } func (e *VerificationMethod) GetBytes() []byte { return []byte{} } + + +func (d DidDoc) GetServiceByName(serviceId string) (string, error) { + for _, s := range d.Service { + _url, err := url.Parse(s.Id) + if err != nil { + return "", err + } + if _url.Fragment == serviceId { + return s.ServiceEndpoint[0], nil + } + } + return "", nil +} diff --git a/types/did_service.go b/types/did_service.go new file mode 100644 index 00000000..bdd59bbe --- /dev/null +++ b/types/did_service.go @@ -0,0 +1,28 @@ +package types + +// Implements ResolutionResult interface +type ServiceResult struct { + endpoint string +} + +// Interface implementation +func (s ServiceResult) GetContentType() string { + return "" +} + +func (s ServiceResult) GetBytes() []byte { + return []byte(s.endpoint) +} + +func (s ServiceResult) GetServiceEndpoint() string { + return s.endpoint +} + +func (r ServiceResult) IsRedirect() bool { + return true +} +// end of Interface implementation + +func NewServiceResult(endpoint string) *ServiceResult { + return &ServiceResult{endpoint: endpoint} +} \ No newline at end of file diff --git a/types/helper.go b/types/helper.go index ac458f4f..2a6744dd 100644 --- a/types/helper.go +++ b/types/helper.go @@ -1,5 +1,17 @@ package types +import ( + "fmt" + "os" + "strconv" + "strings" + "time" + + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" + "github.com/spf13/viper" +) + func AddElemToSet(set []string, newElement string) []string { if set == nil { set = []string{} @@ -11,3 +23,106 @@ func AddElemToSet(set []string, newElement string) []string { } return append(set, newElement) } + +func SetupLogger(config Config) { + log.Info().Msgf("Setting log level: %s", config.LogLevel) + level, err := zerolog.ParseLevel(config.LogLevel) + if err != nil { + panic(err) + } + zerolog.SetGlobalLevel(level) +} + +func ParseGRPCEndpoint(configEndpoint string, networkName string) (*Network, error) { + config := strings.Split(configEndpoint, ",") + if len(config) != 3 { + return nil, fmt.Errorf(fmt.Sprintf("Endpoint config for %s is invalid: %s", networkName, configEndpoint)) + } + useTls, err := strconv.ParseBool(config[1]) + if err != nil { + return nil, fmt.Errorf(fmt.Sprintf("useTls value %s for %s endpoint is invalid", configEndpoint, networkName)) + } + timeout, err := time.ParseDuration(config[2]) + if err != nil { + return nil, fmt.Errorf(fmt.Sprintf("Timeout value %s for %s endpoint is invalid", configEndpoint, networkName)) + } + + return &Network{ + Namespace: networkName, + Endpoint: config[0], + UseTls: useTls, + Timeout: timeout, + }, nil +} + +// Config functions + +func LoadConfig() (Config, error) { + if _, err := os.Stat("config.env"); err == nil { + viper.SetConfigFile("config.env") + err := viper.ReadInConfig() + if err != nil { + return Config{}, fmt.Errorf("error reading config.env: %v", err) + } + } + viper.SetDefault("MAINNET_ENDPOINT", "") + viper.SetDefault("TESTNET_ENDPOINT", "") + viper.SetDefault("LOG_LEVEL", "") + viper.SetDefault("RESOLVER_LISTENER", "") + viper.AutomaticEnv() + + rawConf := &RawConfig{} + err := viper.Unmarshal(rawConf) + if err != nil { + return Config{}, fmt.Errorf("unable to decode into config struct, %v", err) + } + conf, err := NewConfig(*rawConf) + if err != nil { + return Config{}, fmt.Errorf("invalid config parameter, %v", err) + } + return conf, nil +} + +func MustLoadConfig() Config { + config, err := LoadConfig() + if err != nil { + panic(err) + } + + return config +} + +func NewConfig(rawConfig RawConfig) (Config, error) { + mainnetEndpoint, err := ParseGRPCEndpoint(rawConfig.MainnetEndpoint, "mainnet") + if err != nil { + return Config{}, err + } + testnetEndpoint, err := ParseGRPCEndpoint(rawConfig.TestnetEndpoint, "testnet") + if err != nil { + return Config{}, err + } + return Config{ + Networks: []Network{*mainnetEndpoint, *testnetEndpoint}, + ResolverListener: rawConfig.ResolverListener, + LogLevel: rawConfig.LogLevel, + }, nil +} + +func PrintConfig() error { + config := MustLoadConfig() + configJson := config.MustMarshalJson() + + println(configJson) + + return nil +} + +func GetConfig() Config { + log.Info().Msg("Loading configuration") + config, err := LoadConfig() + if err != nil { + panic(err) + } + log.Info().Msgf("Configuration: %s", config.MustMarshalJson()) + return config +} diff --git a/types/interfaces.go b/types/interfaces.go index e778570b..7f54f8d5 100644 --- a/types/interfaces.go +++ b/types/interfaces.go @@ -9,4 +9,5 @@ type ContentStreamI interface { type ResolutionResultI interface { GetContentType() string GetBytes() []byte + IsRedirect() bool } diff --git a/types/resolution_metadata.go b/types/resolution_metadata.go index b3e25cac..9ccf0ca1 100644 --- a/types/resolution_metadata.go +++ b/types/resolution_metadata.go @@ -1,9 +1,9 @@ package types import ( - "errors" - "regexp" "time" + + "github.com/cheqd/did-resolver/utils" ) type ResolutionMetadata struct { @@ -26,9 +26,29 @@ type DidResolution struct { Metadata ResolutionDidDocMetadata `json:"didDocumentMetadata"` } +// Interface implementation + +func (r DidResolution) GetContentType() string { + return string(r.ResolutionMetadata.ContentType) +} + +func (r DidResolution) GetBytes() []byte { + return []byte{} +} + +func (r DidResolution) IsRedirect() bool { + return false +} + +func (r DidResolution) GetServiceByName(serviceName string) (string, error) { + return r.Did.GetServiceByName(serviceName) +} + +// end of Interface implementation + func NewResolutionMetadata(didUrl string, contentType ContentType, resolutionError string) ResolutionMetadata { - did, _, _, _, err1 := TrySplitDIDUrl(didUrl) - method, _, id, err2 := TrySplitDID(did) + did, _, _, _, err1 := utils.TrySplitDIDUrl(didUrl) + method, _, id, err2 := utils.TrySplitDID(did) var didProperties DidProperties if err1 == nil && err2 == nil { didProperties = DidProperties{ @@ -45,65 +65,3 @@ func NewResolutionMetadata(didUrl string, contentType ContentType, resolutionErr } } -func (r DidResolution) GetContentType() string { - return string(r.ResolutionMetadata.ContentType) -} - -func (r DidResolution) GetBytes() []byte { - return []byte{} -} - -// SplitDIDURLRegexp ... -// That for groups: -// Example: did:cheqd:testnet:fafdsffq11213343/path-to-s/ome-external-resource?query#key1??? -// 1 - [^/?#]* - all the symbols except / and ? and # . This is the DID part (did:cheqd:testnet:fafdsffq11213343) -// 2 - [^?#]* - all the symbols except ? and #. it means te section started from /, path-abempty (/path-to-s/ome-external-resource) -// 3 - \?([^#]*) - group for `query` part but with ? symbol (?query) -// 4 - [^#]* - group inside query string, match only exact query (query) -// 5 - #([^#]+[\$]?) - group for fragment, starts with #, includes # (#key1???) -// 6 - [^#]+[\$]? - fragment only (key1???) -// Number of queries is not limited. -var SplitDIDURLRegexp = regexp.MustCompile(`([^/?#]*)?([^?#]*)(\?([^#]*))?(#([^#]+$))?$`) - -var ( - DIDPathAbemptyRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@]*|(%[0-9A-Fa-f]{2})*)*$`) - DIDQueryRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]*|(%[0-9A-Fa-f]{2})*)*$`) - DIDFragmentRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]*|(%[0-9A-Fa-f]{2})*)*$`) -) - -// TrySplitDIDUrl Validates generic format of DIDUrl. It doesn't validate path, query and fragment content. -// Call ValidateDIDUrl for further validation. -func TrySplitDIDUrl(didURL string) (did string, path string, query string, fragment string, err error) { - matches := SplitDIDURLRegexp.FindAllStringSubmatch(didURL, -1) - - if len(matches) != 1 { - return "", "", "", "", errors.New("unable to split did url into did, path, query and fragment") - } - - match := matches[0] - - return match[1], match[2], match[4], match[6], nil -} - -var ( - SplitDIDRegexp = regexp.MustCompile(`^did:([^:]+?)(:([^:]+?))?:([^:]+)$`) - DidNamespaceRegexp = regexp.MustCompile(`^[a-zA-Z0-9]*$`) -) - -// TrySplitDID Validates generic format of DID. It doesn't validate method, name and id content. -// Call ValidateDID for further validation. -func TrySplitDID(did string) (method string, namespace string, id string, err error) { - // Example: did:cheqd:testnet:base58str1ng1111 - // match [0] - the whole string - // match [1] - cheqd - method - // match [2] - :testnet - // match [3] - testnet - namespace - // match [4] - base58str1ng1111 - id - matches := SplitDIDRegexp.FindAllStringSubmatch(did, -1) - if len(matches) != 1 { - return "", "", "", errors.New("unable to split did into method, namespace and id") - } - - match := matches[0] - return match[1], match[3], match[4], nil -} diff --git a/types/supported_queries.go b/types/supported_queries.go new file mode 100644 index 00000000..743c53ef --- /dev/null +++ b/types/supported_queries.go @@ -0,0 +1,29 @@ +package types + +import ( + "net/url" + + "github.com/cheqd/did-resolver/utils" +) + +type SupportedQueriesT []string + +// DiffWithUrlValues returns values which are in url.Values but not in SupportedQueriesT +func (s *SupportedQueriesT) DiffWithUrlValues(values url.Values) []string { + var result []string + for k, _ := range values { + if !utils.Contains(*s, k) { + result = append(result, k) + } + } + return result +} + +var ( + DidSupportedQueries = SupportedQueriesT{ + VersionId, + VersionTime, + ServiceQ, + RelativeRef, + } +) \ No newline at end of file diff --git a/utils/config.go b/utils/config.go deleted file mode 100644 index 7ac8833f..00000000 --- a/utils/config.go +++ /dev/null @@ -1,117 +0,0 @@ -package utils - -import ( - "fmt" - "os" - "strconv" - "strings" - "time" - - "github.com/cheqd/did-resolver/types" - "github.com/rs/zerolog" - "github.com/rs/zerolog/log" - "github.com/spf13/viper" -) - -func SetupLogger(config types.Config) { - log.Info().Msgf("Setting log level: %s", config.LogLevel) - level, err := zerolog.ParseLevel(config.LogLevel) - if err != nil { - panic(err) - } - zerolog.SetGlobalLevel(level) -} - -func ParseGRPCEndpoint(configEndpoint string, networkName string) (*types.Network, error) { - config := strings.Split(configEndpoint, ",") - if len(config) != 3 { - return nil, fmt.Errorf(fmt.Sprintf("Endpoint config for %s is invalid: %s", networkName, configEndpoint)) - } - useTls, err := strconv.ParseBool(config[1]) - if err != nil { - return nil, fmt.Errorf(fmt.Sprintf("useTls value %s for %s endpoint is invalid", configEndpoint, networkName)) - } - timeout, err := time.ParseDuration(config[2]) - if err != nil { - return nil, fmt.Errorf(fmt.Sprintf("Timeout value %s for %s endpoint is invalid", configEndpoint, networkName)) - } - - return &types.Network{ - Namespace: networkName, - Endpoint: config[0], - UseTls: useTls, - Timeout: timeout, - }, nil -} - -// Config functions - -func LoadConfig() (types.Config, error) { - if _, err := os.Stat("config.env"); err == nil { - viper.SetConfigFile("config.env") - err := viper.ReadInConfig() - if err != nil { - return types.Config{}, fmt.Errorf("error reading config.env: %v", err) - } - } - viper.SetDefault("MAINNET_ENDPOINT", "") - viper.SetDefault("TESTNET_ENDPOINT", "") - viper.SetDefault("LOG_LEVEL", "") - viper.SetDefault("RESOLVER_LISTENER", "") - viper.AutomaticEnv() - - rawConf := &types.RawConfig{} - err := viper.Unmarshal(rawConf) - if err != nil { - return types.Config{}, fmt.Errorf("unable to decode into config struct, %v", err) - } - conf, err := NewConfig(*rawConf) - if err != nil { - return types.Config{}, fmt.Errorf("invalid config parameter, %v", err) - } - return conf, nil -} - -func MustLoadConfig() types.Config { - config, err := LoadConfig() - if err != nil { - panic(err) - } - - return config -} - -func NewConfig(rawConfig types.RawConfig) (types.Config, error) { - mainnetEndpoint, err := ParseGRPCEndpoint(rawConfig.MainnetEndpoint, "mainnet") - if err != nil { - return types.Config{}, err - } - testnetEndpoint, err := ParseGRPCEndpoint(rawConfig.TestnetEndpoint, "testnet") - if err != nil { - return types.Config{}, err - } - return types.Config{ - Networks: []types.Network{*mainnetEndpoint, *testnetEndpoint}, - ResolverListener: rawConfig.ResolverListener, - LogLevel: rawConfig.LogLevel, - }, nil -} - -func PrintConfig() error { - config := MustLoadConfig() - configJson := config.MustMarshalJson() - - println(configJson) - - return nil -} - -func GetConfig() types.Config { - log.Info().Msg("Loading configuration") - config, err := LoadConfig() - if err != nil { - panic(err) - } - log.Info().Msgf("Configuration: %s", config.MustMarshalJson()) - return config -} diff --git a/utils/did.go b/utils/did.go index c3593efe..89949eb3 100644 --- a/utils/did.go +++ b/utils/did.go @@ -4,12 +4,10 @@ import ( "errors" "fmt" "strings" - - "github.com/cheqd/did-resolver/types" ) func MustSplitDID(did string) (method string, namespace string, id string) { - method, namespace, id, err := types.TrySplitDID(did) + method, namespace, id, err := TrySplitDID(did) if err != nil { panic(err.Error()) } @@ -28,7 +26,7 @@ func JoinDID(method, namespace, id string) string { // ValidateDID checks method and allowed namespaces only when the corresponding parameters are specified. func ValidateDID(did string, method string, allowedNamespaces []string) error { - sMethod, sNamespace, sUniqueID, err := types.TrySplitDID(did) + sMethod, sNamespace, sUniqueID, err := TrySplitDID(did) if err != nil { return err } @@ -39,7 +37,7 @@ func ValidateDID(did string, method string, allowedNamespaces []string) error { } // check namespaces - if !types.DidNamespaceRegexp.MatchString(sNamespace) { + if !DidNamespaceRegexp.MatchString(sNamespace) { return errors.New("invalid did namespace") } diff --git a/utils/did_url.go b/utils/did_url.go index f482536b..8d6b25f3 100644 --- a/utils/did_url.go +++ b/utils/did_url.go @@ -4,11 +4,30 @@ import ( "errors" "fmt" "net/url" + "regexp" - "github.com/cheqd/did-resolver/types" "github.com/google/uuid" ) + +// SplitDIDURLRegexp ... +// That for groups: +// Example: did:cheqd:testnet:fafdsffq11213343/path-to-s/ome-external-resource?query#key1??? +// 1 - [^/?#]* - all the symbols except / and ? and # . This is the DID part (did:cheqd:testnet:fafdsffq11213343) +// 2 - [^?#]* - all the symbols except ? and #. it means te section started from /, path-abempty (/path-to-s/ome-external-resource) +// 3 - \?([^#]*) - group for `query` part but with ? symbol (?query) +// 4 - [^#]* - group inside query string, match only exact query (query) +// 5 - #([^#]+[\$]?) - group for fragment, starts with #, includes # (#key1???) +// 6 - [^#]+[\$]? - fragment only (key1???) +// Number of queries is not limited. +var SplitDIDURLRegexp = regexp.MustCompile(`([^/?#]*)?([^?#]*)(\?([^#]*))?(#([^#]+$))?$`) + +var ( + DIDPathAbemptyRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@]*|(%[0-9A-Fa-f]{2})*)*$`) + DIDQueryRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]*|(%[0-9A-Fa-f]{2})*)*$`) + DIDFragmentRegexp = regexp.MustCompile(`^([/a-zA-Z0-9\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@\/\?]*|(%[0-9A-Fa-f]{2})*)*$`) +) + func IsValidResourceId(u string) bool { _, err := uuid.Parse(u) return err == nil @@ -32,7 +51,7 @@ func IsValidV1ID(id string) bool { } func MustSplitDIDUrl(didURL string) (did string, path string, query string, fragment string) { - did, path, query, fragment, err := types.TrySplitDIDUrl(didURL) + did, path, query, fragment, err := TrySplitDIDUrl(didURL) if err != nil { panic(err.Error()) } @@ -55,7 +74,7 @@ func JoinDIDUrl(did string, path string, query string, fragment string) string { // ValidateDIDUrl checks method and allowed namespaces only when the corresponding parameters are specified. func ValidateDIDUrl(didURL string, method string, allowedNamespaces []string) error { - did, path, query, fragment, err := types.TrySplitDIDUrl(didURL) + did, path, query, fragment, err := TrySplitDIDUrl(didURL) if err != nil { return err } @@ -85,22 +104,22 @@ func ValidateDIDUrl(didURL string, method string, allowedNamespaces []string) er } func ValidateFragment(fragment string) error { - if !types.DIDFragmentRegexp.MatchString(fragment) { - return fmt.Errorf("did url fragment must match the following regexp: %s", types.DIDFragmentRegexp) + if !DIDFragmentRegexp.MatchString(fragment) { + return fmt.Errorf("did url fragment must match the following regexp: %s", DIDFragmentRegexp) } return nil } func ValidateQuery(query string) error { - if !types.DIDQueryRegexp.MatchString(query) { - return fmt.Errorf("did url query must match the following regexp: %s", types.DIDQueryRegexp) + if !DIDQueryRegexp.MatchString(query) { + return fmt.Errorf("did url query must match the following regexp: %s", DIDQueryRegexp) } return nil } func ValidatePath(path string) error { - if !types.DIDPathAbemptyRegexp.MatchString(path) { - return fmt.Errorf("did url path abempty must match the following regexp: %s", types.DIDPathAbemptyRegexp) + if !DIDPathAbemptyRegexp.MatchString(path) { + return fmt.Errorf("did url path abempty must match the following regexp: %s", DIDPathAbemptyRegexp) } return nil } @@ -130,3 +149,40 @@ func GetFragment(fragmentId string) (fragment string) { return fragment } + +// TrySplitDIDUrl Validates generic format of DIDUrl. It doesn't validate path, query and fragment content. +// Call ValidateDIDUrl for further validation. +func TrySplitDIDUrl(didURL string) (did string, path string, query string, fragment string, err error) { + matches := SplitDIDURLRegexp.FindAllStringSubmatch(didURL, -1) + + if len(matches) != 1 { + return "", "", "", "", errors.New("unable to split did url into did, path, query and fragment") + } + + match := matches[0] + + return match[1], match[2], match[4], match[6], nil +} + +var ( + SplitDIDRegexp = regexp.MustCompile(`^did:([^:]+?)(:([^:]+?))?:([^:]+)$`) + DidNamespaceRegexp = regexp.MustCompile(`^[a-zA-Z0-9]*$`) +) + +// TrySplitDID Validates generic format of DID. It doesn't validate method, name and id content. +// Call ValidateDID for further validation. +func TrySplitDID(did string) (method string, namespace string, id string, err error) { + // Example: did:cheqd:testnet:base58str1ng1111 + // match [0] - the whole string + // match [1] - cheqd - method + // match [2] - :testnet + // match [3] - testnet - namespace + // match [4] - base58str1ng1111 - id + matches := SplitDIDRegexp.FindAllStringSubmatch(did, -1) + if len(matches) != 1 { + return "", "", "", errors.New("unable to split did into method, namespace and id") + } + + match := matches[0] + return match[1], match[3], match[4], nil +} diff --git a/utils/parse_time.go b/utils/parse_time.go new file mode 100644 index 00000000..d1360be1 --- /dev/null +++ b/utils/parse_time.go @@ -0,0 +1,20 @@ +package utils + +import "time" + +func ParseFromStringTimeToGoTime(timeString string) (time.Time, error ){ + // If timeString is empty return default nullable time value (0001-01-01 00:00:00 +0000 UTC) + if timeString == "" { + return time.Time{}, nil + } + + t, err := time.Parse(time.RFC3339, timeString) + if err != nil { + return time.Time{}, err + } + t, err = time.Parse(time.RFC3339Nano, timeString) + if err != nil { + return time.Time{}, err + } + return t, nil +} \ No newline at end of file From 0e25625189bde2ebb253175e1b18a0671aa9c09a Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Tue, 4 Apr 2023 09:13:11 +0400 Subject: [PATCH 02/46] Makes linter happy --- .../diddoc/diddoc_all_version_metadata.go | 3 +- services/diddoc/diddoc_fragment.go | 3 +- services/diddoc/diddoc_query.go | 43 +++++--- services/diddoc/diddoc_version_metadata.go | 3 +- services/queries/base_handler.go | 2 +- services/queries/relative_ref_handler.go | 2 +- services/queries/service_handler.go | 2 +- services/queries/stop_handler.go | 4 +- services/queries/version_time_handler.go | 2 +- services/request_service_base.go | 5 +- .../resource_collection_dereferencing.go | 3 +- .../resource/resource_data_dereferencing.go | 3 +- .../resource_metadata_dereferencing.go | 3 +- tests/unit-tests/query_handlers_test.go | 99 +++++++++++++++++++ tests/unit-tests/supported_queries_test.go | 2 +- tests/unit-tests/test_utils.go | 19 +++- types/dereferecing_metadata.go | 23 +++-- types/did_doc.go | 1 - types/did_service.go | 3 +- types/resolution_metadata.go | 1 - types/supported_queries.go | 16 ++- utils/did_url.go | 1 - utils/parse_time.go | 14 +-- 23 files changed, 184 insertions(+), 73 deletions(-) create mode 100644 tests/unit-tests/query_handlers_test.go diff --git a/services/diddoc/diddoc_all_version_metadata.go b/services/diddoc/diddoc_all_version_metadata.go index 5fba1e90..4da0ff85 100644 --- a/services/diddoc/diddoc_all_version_metadata.go +++ b/services/diddoc/diddoc_all_version_metadata.go @@ -34,6 +34,5 @@ func (dd *DIDDocAllVersionMetadataRequestService) Query(c services.ResolverConte if err != nil { return err } - dd.SetResponse(result) - return nil + return dd.SetResponse(result) } diff --git a/services/diddoc/diddoc_fragment.go b/services/diddoc/diddoc_fragment.go index ef5a7fb2..3719bb54 100644 --- a/services/diddoc/diddoc_fragment.go +++ b/services/diddoc/diddoc_fragment.go @@ -34,6 +34,5 @@ func (dd *FragmentDIDDocRequestService) Query(c services.ResolverContext) error err.IsDereferencing = dd.IsDereferencing return err } - dd.SetResponse(result) - return nil + return dd.SetResponse(result) } diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 36c2df5d..f41aa9f7 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -9,11 +9,6 @@ import ( "github.com/cheqd/did-resolver/services/queries" "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/utils" - // "github.com/cheqd/did-resolver/utils" -) - -const ( - supportedQueries = "versionId,versionTime,service,relativeRef" ) type QueryDIDDocRequestService struct { @@ -36,7 +31,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte diff := types.DidSupportedQueries.DiffWithUrlValues(dd.Queries) if len(diff) > 0 { - return types.NewRepresentationNotSupportedError("Queries from list: " + strings.Join(diff, ","), dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError("Queries from list: "+strings.Join(diff, ","), dd.RequestedContentType, nil, dd.IsDereferencing) } versionId := dd.GetQueryParam(types.VersionId) @@ -60,9 +55,9 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewRepresentationNotSupportedError(versionTime, dd.RequestedContentType, err, dd.IsDereferencing) } } - + // Validate that versionId is UUID - if versionId != "" && !utils.IsValidUUID(dd.Version) { + if versionId != "" && !utils.IsValidUUID(versionId) { return types.NewInvalidDIDUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) } @@ -100,11 +95,30 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // After that we can find for service field if it's set. // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler - didQueryHandler.SetNext(c, &versionIdHandler) - versionIdHandler.SetNext(c, &versionTimeHandler) - versionTimeHandler.SetNext(c, &serviceHandler) - serviceHandler.SetNext(c, &relativeRefHandler) - relativeRefHandler.SetNext(c, &stopHandler) + err := didQueryHandler.SetNext(c, &versionIdHandler) + if err != nil { + return err + } + + err = versionIdHandler.SetNext(c, &versionTimeHandler) + if err != nil { + return err + } + + err = versionTimeHandler.SetNext(c, &serviceHandler) + if err != nil { + return err + } + + err = serviceHandler.SetNext(c, &relativeRefHandler) + if err != nil { + return err + } + + err = relativeRefHandler.SetNext(c, &stopHandler) + if err != nil { + return err + } dd.FirstHandler = &didQueryHandler @@ -119,8 +133,7 @@ func (dd *QueryDIDDocRequestService) Query(c services.ResolverContext) error { if result == nil { return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } - dd.SetResponse(result) - return nil + return dd.SetResponse(result) } func (dd QueryDIDDocRequestService) Respond(c services.ResolverContext) error { diff --git a/services/diddoc/diddoc_version_metadata.go b/services/diddoc/diddoc_version_metadata.go index 49dcbcd8..a0bfdd19 100644 --- a/services/diddoc/diddoc_version_metadata.go +++ b/services/diddoc/diddoc_version_metadata.go @@ -43,6 +43,5 @@ func (dd *DIDDocVersionMetadataRequestService) Query(c services.ResolverContext) if err != nil { return err } - dd.SetResponse(result) - return nil + return dd.SetResponse(result) } diff --git a/services/queries/base_handler.go b/services/queries/base_handler.go index 535ae07a..a492d5e2 100644 --- a/services/queries/base_handler.go +++ b/services/queries/base_handler.go @@ -14,7 +14,7 @@ type BaseQueryHandlerI interface { type BaseQueryHandler struct { IsDereferencing bool - next BaseQueryHandlerI + next BaseQueryHandlerI } func (b *BaseQueryHandler) SetNext(c services.ResolverContext, next BaseQueryHandlerI) error { diff --git a/services/queries/relative_ref_handler.go b/services/queries/relative_ref_handler.go index 60c88035..8a2d624f 100644 --- a/services/queries/relative_ref_handler.go +++ b/services/queries/relative_ref_handler.go @@ -25,5 +25,5 @@ func (r *RelativeRefHandler) Handle(c services.ResolverContext, service services } // Call the next handler - return r.Continue(c, service, types.NewServiceResult(serviceResult.GetServiceEndpoint() + relativeRef)) + return r.Continue(c, service, types.NewServiceResult(serviceResult.GetServiceEndpoint()+relativeRef)) } diff --git a/services/queries/service_handler.go b/services/queries/service_handler.go index 2cd8a405..0dda5676 100644 --- a/services/queries/service_handler.go +++ b/services/queries/service_handler.go @@ -28,7 +28,7 @@ func (s *ServiceHandler) Handle(c services.ResolverContext, service services.Req if err != nil { return nil, err } - + // Call the next handler return s.Continue(c, service, types.NewServiceResult(result)) } diff --git a/services/queries/stop_handler.go b/services/queries/stop_handler.go index dbe9f6d0..46ced059 100644 --- a/services/queries/stop_handler.go +++ b/services/queries/stop_handler.go @@ -9,6 +9,6 @@ type StopHandler struct { BaseQueryHandler } -func (s *StopHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { +func (s *StopHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { return response, nil -} \ No newline at end of file +} diff --git a/services/queries/version_time_handler.go b/services/queries/version_time_handler.go index 208f8098..9ded1271 100644 --- a/services/queries/version_time_handler.go +++ b/services/queries/version_time_handler.go @@ -44,4 +44,4 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services // Call the next handler return v.Continue(c, service, result) -} \ No newline at end of file +} diff --git a/services/request_service_base.go b/services/request_service_base.go index 7d5d5721..a63fef50 100644 --- a/services/request_service_base.go +++ b/services/request_service_base.go @@ -102,8 +102,7 @@ func (dd *BaseRequestService) Query(c ResolverContext) error { err.IsDereferencing = false return err } - dd.SetResponse(result) - return nil + return dd.SetResponse(result) } func (dd BaseRequestService) SetupResponse(c ResolverContext) error { @@ -123,4 +122,4 @@ func (dd BaseRequestService) Respond(c ResolverContext) error { func (dd *BaseRequestService) SetResponse(response types.ResolutionResultI) error { dd.Result = response return nil -} \ No newline at end of file +} diff --git a/services/resource/resource_collection_dereferencing.go b/services/resource/resource_collection_dereferencing.go index 440186ec..9cd2c953 100644 --- a/services/resource/resource_collection_dereferencing.go +++ b/services/resource/resource_collection_dereferencing.go @@ -39,6 +39,5 @@ func (dr *ResourceCollectionDereferencingService) Query(c services.ResolverConte err.IsDereferencing = dr.IsDereferencing return err } - dr.SetResponse(result) - return nil + return dr.SetResponse(result) } diff --git a/services/resource/resource_data_dereferencing.go b/services/resource/resource_data_dereferencing.go index 6ebfe43c..6a011288 100644 --- a/services/resource/resource_data_dereferencing.go +++ b/services/resource/resource_data_dereferencing.go @@ -45,8 +45,7 @@ func (dr *ResourceDataDereferencingService) Query(c services.ResolverContext) er err.IsDereferencing = dr.IsDereferencing return err } - dr.SetResponse(result) - return nil + return dr.SetResponse(result) } func (dr ResourceDataDereferencingService) Respond(c services.ResolverContext) error { diff --git a/services/resource/resource_metadata_dereferencing.go b/services/resource/resource_metadata_dereferencing.go index 00215822..5232c544 100644 --- a/services/resource/resource_metadata_dereferencing.go +++ b/services/resource/resource_metadata_dereferencing.go @@ -44,6 +44,5 @@ func (dr *ResourceMetadataDereferencingService) Query(c services.ResolverContext err.IsDereferencing = dr.IsDereferencing return err } - dr.SetResponse(result) - return nil + return dr.SetResponse(result) } diff --git a/tests/unit-tests/query_handlers_test.go b/tests/unit-tests/query_handlers_test.go new file mode 100644 index 00000000..01438c4c --- /dev/null +++ b/tests/unit-tests/query_handlers_test.go @@ -0,0 +1,99 @@ +package tests + +import ( + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + "time" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" + didDocService "github.com/cheqd/did-resolver/services/diddoc" + "github.com/cheqd/did-resolver/types" +) + +type queriesDIDDocTestCase struct { + didURL string + resolutionType types.ContentType + expectedDIDResolution *types.DidResolution + expectedError error +} + +var _ = DescribeTable("Test Query handler", func(testCase queriesDIDDocTestCase) { + request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) + context, rec := setupEmptyContext(request, testCase.resolutionType, mockLedgerService) + + if (testCase.resolutionType == "" || testCase.resolutionType == types.DIDJSONLD) && testCase.expectedError == nil { + testCase.expectedDIDResolution.Did.Context = []string{types.DIDSchemaJSONLD, types.JsonWebKey2020JSONLD} + } else if testCase.expectedDIDResolution.Did != nil { + testCase.expectedDIDResolution.Did.Context = nil + } + + expectedContentType := defineContentType(testCase.expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) + + err := didDocService.DidDocEchoHandler(context) + if testCase.expectedError != nil { + Expect(testCase.expectedError.Error()).To(Equal(err.Error())) + } else { + var resolutionResult types.DidResolution + unmarshalErr := json.Unmarshal(rec.Body.Bytes(), &resolutionResult) + Expect(unmarshalErr).To(BeNil()) + Expect(err).To(BeNil()) + Expect(testCase.expectedDIDResolution.Did).To(Equal(resolutionResult.Did)) + Expect(testCase.expectedDIDResolution.Metadata).To(Equal(resolutionResult.Metadata)) + Expect(expectedContentType).To(Equal(resolutionResult.ResolutionMetadata.ContentType)) + Expect(testCase.expectedDIDResolution.ResolutionMetadata.DidProperties).To(Equal(resolutionResult.ResolutionMetadata.DidProperties)) + Expect(expectedContentType).To(Equal(types.ContentType(rec.Header().Get("Content-Type")))) + } +}, + + // Positive cases + + Entry( + "Positive VersionId case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", ValidDid, ValidVersionId), + resolutionType: types.DIDJSONLD, + expectedDIDResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: ValidDid, + MethodSpecificId: ValidIdentifier, + Method: ValidMethod, + }, + }, + Did: &validDIDDocResolution, + Metadata: types.NewResolutionDidDocMetadata( + ValidDid, &validMetadata, + []*resourceTypes.Metadata{validResource.Metadata}, + ), + }, + expectedError: nil, + }, + ), + Entry( + "Positive VersionTime case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", ValidDid, CreatedAfter.Format(time.RFC3339)), + resolutionType: types.DIDJSONLD, + expectedDIDResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: ValidDid, + MethodSpecificId: ValidIdentifier, + Method: ValidMethod, + }, + }, + Did: &validDIDDocResolution, + Metadata: types.NewResolutionDidDocMetadata( + ValidDid, &validMetadata, + []*resourceTypes.Metadata{validResource.Metadata}, + ), + }, + expectedError: nil, + }, + ), +) diff --git a/tests/unit-tests/supported_queries_test.go b/tests/unit-tests/supported_queries_test.go index 88f64524..d4a9198d 100644 --- a/tests/unit-tests/supported_queries_test.go +++ b/tests/unit-tests/supported_queries_test.go @@ -31,4 +31,4 @@ var _ = Describe("Diff with values tests", func() { result := supportedQueries.DiffWithUrlValues(values) Expect(result).To(Equal([]string{"d"})) }) -}) \ No newline at end of file +}) diff --git a/tests/unit-tests/test_utils.go b/tests/unit-tests/test_utils.go index 02a134f9..a22b581f 100644 --- a/tests/unit-tests/test_utils.go +++ b/tests/unit-tests/test_utils.go @@ -6,6 +6,8 @@ import ( "net/http" "net/http/httptest" "net/url" + "strings" + "time" didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" @@ -31,7 +33,8 @@ const ( "\"kty\":\"OKP\"," + "\"x\":\"VCpo2LMLhn6iWku8MKvSLg2ZAoC-nlOyPVQaO3FxVeQ\"" + "}" - ValidVersionId = "test_version_id" + ValidVersionId = "32e0613e-bee4-4ea4-952c-bba3e857fa2a" + ValidServiceId = "service-1" ) const ( @@ -60,6 +63,10 @@ var ( Nanos: 0, } NotEmptyTime = NotEmptyTimestamp.AsTime() + + ValidCreated, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:00Z") + CreatedAfter, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:01Z") + CreatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T08:59:59Z") ) var ( @@ -111,7 +118,7 @@ func ValidVerificationMethod() didTypes.VerificationMethod { func ValidService() didTypes.Service { return didTypes.Service{ - Id: ValidDid + "#service-1", + Id: ValidDid + "#" + ValidServiceId, ServiceType: "DIDCommMessaging", ServiceEndpoint: []string{"http://example.com"}, } @@ -147,7 +154,11 @@ func ValidResource() resourceTypes.ResourceWithMetadata { } func ValidMetadata() didTypes.Metadata { - return didTypes.Metadata{VersionId: "test_version_id", Deactivated: false} + return didTypes.Metadata{ + VersionId: ValidVersionId, + Deactivated: false, + Created: timestamppb.New(ValidCreated), + } } func generateChecksum(data []byte) string { @@ -175,7 +186,7 @@ func setupEmptyContext(request *http.Request, resolutionType types.ContentType, rec := httptest.NewRecorder() context := e.NewContext(request, rec) - e.Router().Find("GET", request.RequestURI, context) + e.Router().Find("GET", strings.Split(request.RequestURI, "?")[0], context) rc := services.ResolverContext{ Context: context, LedgerService: ledgerService, diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index 6dbb2578..1fd99fd4 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -5,15 +5,15 @@ import ( "github.com/cheqd/did-resolver/utils" ) -type DereferencingMetadata ResolutionMetadata - - -type DidDereferencing struct { - Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` - DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` - ContentStream ContentStreamI `json:"contentStream"` - Metadata ResolutionDidDocMetadata `json:"contentMetadata"` -} +type ( + DereferencingMetadata ResolutionMetadata + DidDereferencing struct { + Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` + DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` + ContentStream ContentStreamI `json:"contentStream"` + Metadata ResolutionDidDocMetadata `json:"contentMetadata"` + } +) func NewDereferencingMetadata(did string, contentType ContentType, resolutionError string) DereferencingMetadata { return DereferencingMetadata(NewResolutionMetadata(did, contentType, resolutionError)) @@ -35,6 +35,7 @@ func (d DidDereferencing) GetBytes() []byte { func (r DidDereferencing) IsRedirect() bool { return false } + // end of Interface implementation type ResourceDereferencing struct { @@ -60,8 +61,6 @@ func (d ResourceDereferencing) GetBytes() []byte { func (r ResourceDereferencing) IsRedirect() bool { return false } -// end of Interface implementation - type DereferencedDidVersionsList struct { Versions []ResolutionDidDocMetadata `json:"versions,omitempty"` @@ -84,7 +83,7 @@ func (e *DereferencedDidVersionsList) GetBytes() []byte { return [] // Returns VersionId if there is a version before the given time // Otherwise NotFound error -func (e DereferencedDidVersionsList) FindBeforeTime(before string) (string, error) { +func (e DereferencedDidVersionsList) FindBeforeTime(before string) (string, error) { time_before, err := utils.ParseFromStringTimeToGoTime(before) if err != nil { return "", err diff --git a/types/did_doc.go b/types/did_doc.go index 4ca4103f..955fe3d4 100644 --- a/types/did_doc.go +++ b/types/did_doc.go @@ -112,7 +112,6 @@ func (e *VerificationMethod) AddContext(newProtocol string) { func (e *VerificationMethod) RemoveContext() { e.Context = nil } func (e *VerificationMethod) GetBytes() []byte { return []byte{} } - func (d DidDoc) GetServiceByName(serviceId string) (string, error) { for _, s := range d.Service { _url, err := url.Parse(s.Id) diff --git a/types/did_service.go b/types/did_service.go index bdd59bbe..47b00720 100644 --- a/types/did_service.go +++ b/types/did_service.go @@ -21,8 +21,9 @@ func (s ServiceResult) GetServiceEndpoint() string { func (r ServiceResult) IsRedirect() bool { return true } + // end of Interface implementation func NewServiceResult(endpoint string) *ServiceResult { return &ServiceResult{endpoint: endpoint} -} \ No newline at end of file +} diff --git a/types/resolution_metadata.go b/types/resolution_metadata.go index 9ccf0ca1..9825d04d 100644 --- a/types/resolution_metadata.go +++ b/types/resolution_metadata.go @@ -64,4 +64,3 @@ func NewResolutionMetadata(didUrl string, contentType ContentType, resolutionErr DidProperties: didProperties, } } - diff --git a/types/supported_queries.go b/types/supported_queries.go index 743c53ef..01b302db 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -11,7 +11,7 @@ type SupportedQueriesT []string // DiffWithUrlValues returns values which are in url.Values but not in SupportedQueriesT func (s *SupportedQueriesT) DiffWithUrlValues(values url.Values) []string { var result []string - for k, _ := range values { + for k := range values { if !utils.Contains(*s, k) { result = append(result, k) } @@ -19,11 +19,9 @@ func (s *SupportedQueriesT) DiffWithUrlValues(values url.Values) []string { return result } -var ( - DidSupportedQueries = SupportedQueriesT{ - VersionId, - VersionTime, - ServiceQ, - RelativeRef, - } -) \ No newline at end of file +var DidSupportedQueries = SupportedQueriesT{ + VersionId, + VersionTime, + ServiceQ, + RelativeRef, +} diff --git a/utils/did_url.go b/utils/did_url.go index 8d6b25f3..7b821dbe 100644 --- a/utils/did_url.go +++ b/utils/did_url.go @@ -9,7 +9,6 @@ import ( "github.com/google/uuid" ) - // SplitDIDURLRegexp ... // That for groups: // Example: did:cheqd:testnet:fafdsffq11213343/path-to-s/ome-external-resource?query#key1??? diff --git a/utils/parse_time.go b/utils/parse_time.go index d1360be1..4497421c 100644 --- a/utils/parse_time.go +++ b/utils/parse_time.go @@ -2,19 +2,19 @@ package utils import "time" -func ParseFromStringTimeToGoTime(timeString string) (time.Time, error ){ +func ParseFromStringTimeToGoTime(timeString string) (time.Time, error) { // If timeString is empty return default nullable time value (0001-01-01 00:00:00 +0000 UTC) if timeString == "" { return time.Time{}, nil } t, err := time.Parse(time.RFC3339, timeString) - if err != nil { - return time.Time{}, err + if err == nil { + return t, nil } t, err = time.Parse(time.RFC3339Nano, timeString) - if err != nil { - return time.Time{}, err + if err == nil { + return t, nil } - return t, nil -} \ No newline at end of file + return time.Time{}, err +} From df549e528dd702c85044f740a0372a70b07470c6 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Thu, 6 Apr 2023 12:09:06 +0400 Subject: [PATCH 03/46] Add unit tests --- services/diddoc/diddoc_query.go | 4 +- services/queries/service_handler.go | 4 + services/queries/version_time_handler.go | 4 + .../unit-tests/dereferencing_metadata_test.go | 61 +++++ tests/unit-tests/query_handlers_test.go | 225 ++++++++++++++++-- tests/unit-tests/test_utils.go | 16 +- types/dereferecing_metadata.go | 40 +++- 7 files changed, 328 insertions(+), 26 deletions(-) create mode 100644 tests/unit-tests/dereferencing_metadata_test.go diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index f41aa9f7..99c30a38 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -58,7 +58,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte // Validate that versionId is UUID if versionId != "" && !utils.IsValidUUID(versionId) { - return types.NewInvalidDIDUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewInvalidDIDUrlError(versionId, dd.RequestedContentType, nil, dd.IsDereferencing) } return nil @@ -93,7 +93,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // or // - versionIdHandler // After that we can find for service field if it's set. - // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler + // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler -> stopHandler err := didQueryHandler.SetNext(c, &versionIdHandler) if err != nil { diff --git a/services/queries/service_handler.go b/services/queries/service_handler.go index 0dda5676..742dd15d 100644 --- a/services/queries/service_handler.go +++ b/services/queries/service_handler.go @@ -29,6 +29,10 @@ func (s *ServiceHandler) Handle(c services.ResolverContext, service services.Req return nil, err } + if result == "" { + return nil, types.NewNotFoundError("Service not found", types.DIDJSONLD, nil, s.IsDereferencing) + } + // Call the next handler return s.Continue(c, service, types.NewServiceResult(result)) } diff --git a/services/queries/version_time_handler.go b/services/queries/version_time_handler.go index 9ded1271..9b015ed0 100644 --- a/services/queries/version_time_handler.go +++ b/services/queries/version_time_handler.go @@ -36,6 +36,10 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services return nil, types.NewInternalError("error while finding version before time", contentType, _err, v.IsDereferencing) } + if versionId == "" { + return nil, types.NewNotFoundError("No versions found", contentType, nil, v.IsDereferencing) + } + result, err := c.DidDocService.Resolve(did, versionId, contentType) if err != nil { err.IsDereferencing = v.IsDereferencing diff --git a/tests/unit-tests/dereferencing_metadata_test.go b/tests/unit-tests/dereferencing_metadata_test.go new file mode 100644 index 00000000..d3e2eada --- /dev/null +++ b/tests/unit-tests/dereferencing_metadata_test.go @@ -0,0 +1,61 @@ +package tests + +import ( + "time" + + "github.com/cheqd/did-resolver/types" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("DereferencingMetadata", func() { + var versionList types.DereferencedDidVersionsList + + BeforeEach(func() { + _tcreated := MustParseDate("2021-08-23T09:00:00Z") + _t1 := MustParseDate("2021-08-23T09:30:00Z") + _t2 := MustParseDate("2021-08-23T09:40:00Z") + versionList = types.DereferencedDidVersionsList{ + Versions: []types.ResolutionDidDocMetadata{ + { + VersionId: "1", + Deactivated: false, + Created: &_tcreated, + Updated: nil, + }, + { + VersionId: "2", + Deactivated: false, + Created: &_tcreated, + Updated: &_t1, + }, + { + VersionId: "3", + Deactivated: false, + Created: &_tcreated, + Updated: &_t2, + }, + }, + } + }) + + Context("FindBeforeTime", func() { + // Time right after creation but before first update + It("should return versionId of metadata with created", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) + }) + // Time after first update but the the latest + It("should return versionId of metadata with the first updated", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) + }) + //Time after the latest update + It("should return versionId of metadata with the latest updated", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) + }) + // Time before the creation + It("should return empty string if no metadata found", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) + }) + + }) +}) diff --git a/tests/unit-tests/query_handlers_test.go b/tests/unit-tests/query_handlers_test.go index 01438c4c..83c5579d 100644 --- a/tests/unit-tests/query_handlers_test.go +++ b/tests/unit-tests/query_handlers_test.go @@ -16,23 +16,24 @@ import ( ) type queriesDIDDocTestCase struct { - didURL string - resolutionType types.ContentType - expectedDIDResolution *types.DidResolution - expectedError error + didURL string + resolutionType types.ContentType + expectedResolution types.ResolutionResultI + expectedError error } -var _ = DescribeTable("Test Query handler", func(testCase queriesDIDDocTestCase) { +var _ = DescribeTable("Test Query handlers with versionId and versionTime params", func(testCase queriesDIDDocTestCase) { request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) context, rec := setupEmptyContext(request, testCase.resolutionType, mockLedgerService) + expectedDIDResolution := testCase.expectedResolution.(*types.DidResolution) if (testCase.resolutionType == "" || testCase.resolutionType == types.DIDJSONLD) && testCase.expectedError == nil { - testCase.expectedDIDResolution.Did.Context = []string{types.DIDSchemaJSONLD, types.JsonWebKey2020JSONLD} - } else if testCase.expectedDIDResolution.Did != nil { - testCase.expectedDIDResolution.Did.Context = nil + expectedDIDResolution.Did.Context = []string{types.DIDSchemaJSONLD, types.JsonWebKey2020JSONLD} + } else if expectedDIDResolution.Did != nil { + expectedDIDResolution.Did.Context = nil } - expectedContentType := defineContentType(testCase.expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) + expectedContentType := defineContentType(expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) err := didDocService.DidDocEchoHandler(context) if testCase.expectedError != nil { @@ -42,22 +43,21 @@ var _ = DescribeTable("Test Query handler", func(testCase queriesDIDDocTestCase) unmarshalErr := json.Unmarshal(rec.Body.Bytes(), &resolutionResult) Expect(unmarshalErr).To(BeNil()) Expect(err).To(BeNil()) - Expect(testCase.expectedDIDResolution.Did).To(Equal(resolutionResult.Did)) - Expect(testCase.expectedDIDResolution.Metadata).To(Equal(resolutionResult.Metadata)) + Expect(expectedDIDResolution.Did).To(Equal(resolutionResult.Did)) + Expect(expectedDIDResolution.Metadata).To(Equal(resolutionResult.Metadata)) Expect(expectedContentType).To(Equal(resolutionResult.ResolutionMetadata.ContentType)) - Expect(testCase.expectedDIDResolution.ResolutionMetadata.DidProperties).To(Equal(resolutionResult.ResolutionMetadata.DidProperties)) + Expect(expectedDIDResolution.ResolutionMetadata.DidProperties).To(Equal(resolutionResult.ResolutionMetadata.DidProperties)) Expect(expectedContentType).To(Equal(types.ContentType(rec.Header().Get("Content-Type")))) } }, // Positive cases - Entry( - "Positive VersionId case", + "Positive. VersionId case", queriesDIDDocTestCase{ didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", ValidDid, ValidVersionId), resolutionType: types.DIDJSONLD, - expectedDIDResolution: &types.DidResolution{ + expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ DidString: ValidDid, @@ -75,11 +75,11 @@ var _ = DescribeTable("Test Query handler", func(testCase queriesDIDDocTestCase) }, ), Entry( - "Positive VersionTime case", + "Positive. VersionTime case", queriesDIDDocTestCase{ didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", ValidDid, CreatedAfter.Format(time.RFC3339)), resolutionType: types.DIDJSONLD, - expectedDIDResolution: &types.DidResolution{ + expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ DidString: ValidDid, @@ -96,4 +96,195 @@ var _ = DescribeTable("Test Query handler", func(testCase queriesDIDDocTestCase) expectedError: nil, }, ), + // Negative cases + Entry( + "Negative VersionId case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", ValidDid, InvalidVersionId), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: ValidDid, + MethodSpecificId: ValidIdentifier, + Method: ValidMethod, + }, + }, + Did: &validDIDDocResolution, + Metadata: types.NewResolutionDidDocMetadata( + ValidDid, &validMetadata, + []*resourceTypes.Metadata{validResource.Metadata}, + ), + }, + expectedError: types.NewInvalidDIDUrlError(InvalidVersionId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. VersionTime before created", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", ValidDid, CreatedBefore.Format(time.RFC3339)), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: ValidDid, + MethodSpecificId: ValidIdentifier, + Method: ValidMethod, + }, + }, + Did: &validDIDDocResolution, + Metadata: types.NewResolutionDidDocMetadata( + ValidDid, &validMetadata, + []*resourceTypes.Metadata{validResource.Metadata}, + ), + }, + expectedError: types.NewNotFoundError(InvalidVersionId, types.DIDJSONLD, nil, true), + }, + ), + // Entry( + // "Negative. Query parameter is not supported", + // queriesDIDDocTestCase{ + // didURL: fmt.Sprintf("/1.0/identifiers/%s?unsupportedQuery=%s", ValidDid, "blabla"), + // resolutionType: types.DIDJSONLD, + // expectedResolution: &DereferencingResult{ + // DereferencingMetadata: &types.DereferencingMetadata{ + // DidProperties: types.DidProperties{ + // DidString: NotExistDID, + // MethodSpecificId: NotExistIdentifier, + // Method: ValidMethod, + // }, + // }, + // ContentStream: nil, + // Metadata: &types.ResolutionDidDocMetadata{}, + // }, + // expectedError: types.NewRepresentationNotSupportedError(ValidDid, types.DIDJSONLD, nil, true), + // }, + // ), +) + +var _ = DescribeTable("Test Query handlers with service and relativeRef params", func(testCase queriesDIDDocTestCase) { + request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) + context, rec := setupEmptyContext(request, testCase.resolutionType, mockLedgerService) + + err := didDocService.DidDocEchoHandler(context) + if testCase.expectedError != nil { + Expect(testCase.expectedError.Error()).To(Equal(err.Error())) + } else { + Expect(rec.Code).To(Equal(http.StatusSeeOther)) + Expect(string(testCase.expectedResolution.GetBytes())).To(Equal(rec.HeaderMap.Get("Location"))) + Expect(err).To(BeNil()) + } +}, + + // Positive cases + Entry( + "Positive. Service case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", ValidDid, ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedError: nil, + }, + ), + Entry( + "Positive. relativeRef case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", ValidDid, ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedError: nil, + }, + ), + Entry( + "Positive. VersionId + Service case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", ValidDid, ValidVersionId, ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedError: nil, + }, + ), + Entry( + "Positive. VersionId + Service case + relativeRef", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s&relativeRef=foo", ValidDid, ValidVersionId, ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedError: nil, + }, + ), + Entry( + "Positive. VersionTime + Service case", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", ValidDid, CreatedAfter.Format(time.RFC3339), ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedError: nil, + }, + ), + Entry( + "Positive. VersionTime + Service case + relativeRef", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s&relativeRef=foo", ValidDid, CreatedAfter.Format(time.RFC3339), ValidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedError: nil, + }, + ), + + // Negative Cases + Entry( + "Negative. Service not found", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", ValidDid, InvalidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Service not found + relativeRef", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", ValidDid, InvalidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Service not found + versionId", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", ValidDid, ValidVersionId, InvalidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Service not found + versionId + relativeRef", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s", ValidDid, InvalidServiceId, ValidVersionId), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Service not found + versionTime", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", ValidDid, CreatedAfter.Format(time.RFC3339), InvalidServiceId), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Service not found + versionTime + relativeRef", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionTime=%s", ValidDid, InvalidServiceId, CreatedAfter.Format(time.RFC3339)), + resolutionType: types.DIDJSONLD, + expectedResolution: nil, + expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + }, + ), ) diff --git a/tests/unit-tests/test_utils.go b/tests/unit-tests/test_utils.go index a22b581f..df25f83e 100644 --- a/tests/unit-tests/test_utils.go +++ b/tests/unit-tests/test_utils.go @@ -43,6 +43,8 @@ const ( InvalidIdentifier = "invalid_identifier" InvalidDid = "did:" + InvalidMethod + ":" + InvalidNamespace + ":" + InvalidIdentifier InvalidResourceId = "invalid_resource_id" + InvalidVersionId = "invalid_uuid_identifier" + InvalidServiceId = "not_found_service_id" ) const ( @@ -66,7 +68,10 @@ var ( ValidCreated, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:00Z") CreatedAfter, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:01Z") - CreatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T08:59:59Z") + CreatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T08:00:00Z") + ValidUpdated, _ = time.Parse(time.RFC3339, "2021-08-23T09:30:00Z") + UpdatedAfter, _ = time.Parse(time.RFC3339, "2021-08-23T09:30:01Z") + UpdatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T09:20:00Z") ) var ( @@ -250,3 +255,12 @@ func (ls MockLedgerService) QueryCollectionResources(did string) ([]*resourceTyp func (ls MockLedgerService) GetNamespaces() []string { return []string{"testnet", "mainnet"} } + +func MustParseDate(sdate string) time.Time { + date, err := time.Parse(time.RFC3339, sdate) + if err != nil { + panic(err) + } + + return date +} \ No newline at end of file diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index 1fd99fd4..2827f19f 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -1,6 +1,7 @@ package types import ( + "sort" didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" "github.com/cheqd/did-resolver/utils" ) @@ -62,12 +63,33 @@ func (r ResourceDereferencing) IsRedirect() bool { return false } +type DidDocMetadataList []ResolutionDidDocMetadata + +func (dd DidDocMetadataList) Len() int { + return len(dd) +} + +// Sort in reverse order +func (dd DidDocMetadataList) Less(i, j int) bool { + if dd[i].Updated == nil { + return false + } + if dd[j].Updated == nil { + return true + } + return dd[i].Updated.After(*dd[j].Updated) +} + +func (dd DidDocMetadataList) Swap(i, j int) { + dd[i], dd[j] = dd[j], dd[i] +} + type DereferencedDidVersionsList struct { - Versions []ResolutionDidDocMetadata `json:"versions,omitempty"` + Versions DidDocMetadataList `json:"versions,omitempty"` } func NewDereferencedDidVersionsList(versions []*didTypes.Metadata) *DereferencedDidVersionsList { - didVersionList := []ResolutionDidDocMetadata{} + didVersionList := DidDocMetadataList{} for _, version := range versions { didVersionList = append(didVersionList, NewResolutionDidDocMetadata("", version, nil)) } @@ -83,13 +105,19 @@ func (e *DereferencedDidVersionsList) GetBytes() []byte { return [] // Returns VersionId if there is a version before the given time // Otherwise NotFound error -func (e DereferencedDidVersionsList) FindBeforeTime(before string) (string, error) { - time_before, err := utils.ParseFromStringTimeToGoTime(before) +func (e DereferencedDidVersionsList) FindBeforeTime(stime string) (string, error) { + search_time, err := utils.ParseFromStringTimeToGoTime(stime) if err != nil { return "", err } - for _, version := range e.Versions { - if version.Created.Before(time_before) { + // Firstly - sort versions by Updated time + versions := e.Versions + sort.Sort(DidDocMetadataList(versions)) + for _, version := range versions { + if version.Updated != nil && version.Updated.Before(search_time) { + return version.VersionId, nil + } + if version.Updated == nil && version.Created.Before(search_time) { return version.VersionId, nil } } From 7a373ee9084961d977ce30b69d8777b9cdf38b66 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Sun, 9 Apr 2023 17:08:10 +0400 Subject: [PATCH 04/46] Add basic implementation for resource queries --- services/diddoc/diddoc_query.go | 80 +++++++++++++++++-- .../queries/resource_collection_id_handler.go | 48 +++++++++++ services/queries/resource_helpers.go | 24 ++++++ services/queries/resource_id_handler.go | 46 +++++++++++ services/queries/resource_metadata_handler.go | 21 +++++ services/queries/resource_name_handler.go | 49 ++++++++++++ services/queries/resource_query_handler.go | 33 ++++++++ services/queries/resource_type_handler.go | 48 +++++++++++ services/queries/resource_version_handler.go | 17 ++++ .../queries/resource_version_time_handler.go | 17 ++++ services/queries/version_time_handler.go | 6 +- services/resource_dereference_service.go | 2 +- ...e_dereference_collection_resources_test.go | 2 +- ...vice_dereference_resource_metadata_test.go | 8 +- tests/unit-tests/test_utils.go | 6 +- types/constants.go | 15 +++- types/dereferencing_content_stream.go | 56 ++++++++++++- types/did_doc_metadata.go | 12 +-- types/supported_queries.go | 33 ++++++++ 19 files changed, 489 insertions(+), 34 deletions(-) create mode 100644 services/queries/resource_collection_id_handler.go create mode 100644 services/queries/resource_helpers.go create mode 100644 services/queries/resource_id_handler.go create mode 100644 services/queries/resource_metadata_handler.go create mode 100644 services/queries/resource_name_handler.go create mode 100644 services/queries/resource_query_handler.go create mode 100644 services/queries/resource_type_handler.go create mode 100644 services/queries/resource_version_handler.go create mode 100644 services/queries/resource_version_time_handler.go diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 99c30a38..bfd4bdf7 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -18,9 +18,7 @@ type QueryDIDDocRequestService struct { func (dd *QueryDIDDocRequestService) Setup(c services.ResolverContext) error { dd.IsDereferencing = true - - // Register query handlers - return dd.RegisterQueryHandlers(c) + return nil } func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverContext) error { @@ -29,7 +27,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewInvalidDIDUrlError(dd.Did, dd.RequestedContentType, err, dd.IsDereferencing) } - diff := types.DidSupportedQueries.DiffWithUrlValues(dd.Queries) + diff := types.AllSupportedQueries.DiffWithUrlValues(dd.Queries) if len(diff) > 0 { return types.NewRepresentationNotSupportedError("Queries from list: "+strings.Join(diff, ","), dd.RequestedContentType, nil, dd.IsDereferencing) } @@ -74,7 +72,9 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) } dd.Queries = queries - return nil + + // Register query handlers + return dd.RegisterQueryHandlers(c) } func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { @@ -85,6 +85,17 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo versionTimeHandler := queries.VersionTimeHandler{} didQueryHandler := queries.DidQueryHandler{} + // Resource handlers + resourceQueryHandler := queries.ResourceQueryHandler{} + resourceIdHandler := queries.ResourceIdHandler{} + resourceMetadataHandler := queries.ResourceMetadataHandler{} + resourceCollectionIdHandler := queries.ResourceCollectionIdHandler{} + resourceNameHandler := queries.ResourceNameHandler{} + resourceTypeHandler := queries.ResourceTypeHandler{} + resourceVersionHandler := queries.ResourceVersionHandler{} + resourceVersionTimeHandler := queries.ResourceVersionTimeHandler{} + + stopHandler := queries.StopHandler{} // Create Chain of responsibility @@ -95,6 +106,8 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // After that we can find for service field if it's set. // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler -> stopHandler + // DidDoc handlers + err := didQueryHandler.SetNext(c, &versionIdHandler) if err != nil { return err @@ -115,9 +128,60 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo return err } - err = relativeRefHandler.SetNext(c, &stopHandler) - if err != nil { - return err + if len(types.ResourceSupportedQueries.IntersectWithUrlValues(dd.Queries)) > 0 { + err = relativeRefHandler.SetNext(c, &resourceQueryHandler) + if err != nil { + return err + } + + resourceQueryHandler.SetNext(c, &resourceIdHandler) + if err != nil { + return err + } + + // Resource handlers + // Chain would be: + // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> resourceMetadataHandler -> stopHandler + err = resourceIdHandler.SetNext(c, &resourceVersionTimeHandler) + if err != nil { + return err + } + + err = resourceVersionTimeHandler.SetNext(c, &resourceCollectionIdHandler) + if err != nil { + return err + } + + err = resourceCollectionIdHandler.SetNext(c, &resourceNameHandler) + if err != nil { + return err + } + + err = resourceNameHandler.SetNext(c, &resourceTypeHandler) + if err != nil { + return err + } + + err = resourceTypeHandler.SetNext(c, &resourceVersionHandler) + if err != nil { + return err + } + + err = resourceVersionHandler.SetNext(c, &resourceMetadataHandler) + if err != nil { + return err + } + + err = resourceMetadataHandler.SetNext(c, &stopHandler) + if err != nil { + return err + } + + } else { + err = relativeRefHandler.SetNext(c, &stopHandler) + if err != nil { + return err + } } dd.FirstHandler = &didQueryHandler diff --git a/services/queries/resource_collection_id_handler.go b/services/queries/resource_collection_id_handler.go new file mode 100644 index 00000000..2464766e --- /dev/null +++ b/services/queries/resource_collection_id_handler.go @@ -0,0 +1,48 @@ +package queries + +import ( + "errors" + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceCollectionIdHandler struct { + BaseQueryHandler +} + +func (d *ResourceCollectionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceCollectionId := service.GetQueryParam(types.ResourceCollectionId) + if resourceCollectionId == "" { + return d.Continue(c, service, response) + } + + // If response has type of ResourceDefereferencingResult, + // then we need to check if the resourceCollectionId is the same as the one in the response + resDeref, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + } + + // Cast to DereferencedResourceListStruct for getting the list of metadatas + resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + } + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByCollectionId(resourceCollectionId) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resDeref.ContentStream = &types.ResolutionDidDocMetadata{ + Created: resourceCollection.Created, + Updated: resourceCollection.Updated, + Deactivated: resourceCollection.Deactivated, + VersionId: resourceCollection.VersionId, + Resources: resourceCollectionFiltered, + } + + // Call the next handler + return d.Continue(c, service, resDeref) +} diff --git a/services/queries/resource_helpers.go b/services/queries/resource_helpers.go new file mode 100644 index 00000000..b8b4ee81 --- /dev/null +++ b/services/queries/resource_helpers.go @@ -0,0 +1,24 @@ +package queries + +// import "github.com/cheqd/did-resolver/types" + +// func FilterResourceDereferencingByQueryValue(response types.ResolutionResultI, valuestring) (types.ResourceDereferencing, error) { +// // If response has type of ResourceDefereferencingResult, +// // then we need to check if the resourceCollectionId is the same as the one in the response +// resDeref, ok := response.(*types.ResourceDereferencing) +// if !ok { +// return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) +// } + +// resourceCollection := resDeref.ContentStream.(*types.DereferencedResourceListStruct) +// resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceCollectionId) +// if len(resourceCollectionFiltered) == 0 { +// return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) +// } + +// resDeref.ContentStream = &types.DereferencedResourceListStruct{ +// Resources: resourceCollectionFiltered, +// } + +// return types.ResourceDereferencing{}, nil +// } \ No newline at end of file diff --git a/services/queries/resource_id_handler.go b/services/queries/resource_id_handler.go new file mode 100644 index 00000000..db88fc78 --- /dev/null +++ b/services/queries/resource_id_handler.go @@ -0,0 +1,46 @@ +package queries + +import ( + "errors" + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceIdHandler struct { + BaseQueryHandler +} + +func (d *ResourceIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceId := service.GetQueryParam(types.ResourceId) + if resourceId == "" { + return d.Continue(c, service, response) + } + + // If response has type of ResourceDefereferencingResult, + // then we need to check if the resourceCollectionId is the same as the one in the response + resDeref, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + } + + resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + } + resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resDeref.ContentStream = &types.ResolutionDidDocMetadata{ + Created: resourceCollection.Created, + Updated: resourceCollection.Updated, + Deactivated: resourceCollection.Deactivated, + VersionId: resourceCollection.VersionId, + Resources: resourceCollectionFiltered, + } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_metadata_handler.go b/services/queries/resource_metadata_handler.go new file mode 100644 index 00000000..1c689c7b --- /dev/null +++ b/services/queries/resource_metadata_handler.go @@ -0,0 +1,21 @@ +package queries + +import ( + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceMetadataHandler struct { + BaseQueryHandler +} + +func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceMetadata := service.GetQueryParam(types.ResourceMetadata) + if resourceMetadata == "" { + return d.Continue(c, service, response) + } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_name_handler.go b/services/queries/resource_name_handler.go new file mode 100644 index 00000000..659d9274 --- /dev/null +++ b/services/queries/resource_name_handler.go @@ -0,0 +1,49 @@ +package queries + +import ( + "errors" + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceNameHandler struct { + BaseQueryHandler +} + +func (d *ResourceNameHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceName := service.GetQueryParam(types.ResourceName) + + if resourceName == "" { + return d.Continue(c, service, response) + } + + // If response has type of ResourceDefereferencingResult, + // then we need to check if the resourceCollectionId is the same as the one in the response + resDeref, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceNameHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + } + + // Cast to DereferencedResourceListStruct for getting the list of metadatas + resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceNameHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + } + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceName(resourceName) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resDeref.ContentStream = &types.ResolutionDidDocMetadata{ + Created: resourceCollection.Created, + Updated: resourceCollection.Updated, + Deactivated: resourceCollection.Deactivated, + VersionId: resourceCollection.VersionId, + Resources: resourceCollectionFiltered, + } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_query_handler.go b/services/queries/resource_query_handler.go new file mode 100644 index 00000000..d33bbad8 --- /dev/null +++ b/services/queries/resource_query_handler.go @@ -0,0 +1,33 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceQueryHandler struct { + BaseQueryHandler +} + +func (d *ResourceQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // If response is nil, then we need to dereference the resource from the beginning + if response == nil { + resolutionResult, err := c.ResourceService.DereferenceCollectionResources(service.GetDid(), service.GetContentType()) + if err != nil { + return nil, err + } + // Call the next handler + return d.Continue(c, service, resolutionResult) + } + // Otherwise, we need to dereference the resource using information from previous handlers + rp, ok := response.(*types.DidResolution) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + resolutionResult, err := c.DidDocService.GetDIDDocVersionsMetadata(rp.Did.Id, rp.Metadata.VersionId, service.GetContentType()) + if err != nil { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), err, d.IsDereferencing) + } + // Call the next handler + return d.Continue(c, service, resolutionResult) +} diff --git a/services/queries/resource_type_handler.go b/services/queries/resource_type_handler.go new file mode 100644 index 00000000..5b7a9461 --- /dev/null +++ b/services/queries/resource_type_handler.go @@ -0,0 +1,48 @@ +package queries + +import ( + "errors" + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceTypeHandler struct { + BaseQueryHandler +} + +func (d *ResourceTypeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceType := service.GetQueryParam(types.ResourceType) + if resourceType == "" { + return d.Continue(c, service, response) + } + + // If response has type of ResourceDefereferencingResult, + // then we need to check if the resourceCollectionId is the same as the one in the response + resDeref, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceTypeHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + } + + // Cast to DereferencedResourceListStruct for getting the list of metadatas + resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceTypeHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + } + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceType(resourceType) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resDeref.ContentStream = &types.ResolutionDidDocMetadata{ + Created: resourceCollection.Created, + Updated: resourceCollection.Updated, + Deactivated: resourceCollection.Deactivated, + VersionId: resourceCollection.VersionId, + Resources: resourceCollectionFiltered, + } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_version_handler.go b/services/queries/resource_version_handler.go new file mode 100644 index 00000000..7af9b271 --- /dev/null +++ b/services/queries/resource_version_handler.go @@ -0,0 +1,17 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceVersionHandler struct { + BaseQueryHandler +} + +func (d *ResourceVersionHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // resourceVersion := service.GetQueryParam(types.ResourceVersion) + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_version_time_handler.go b/services/queries/resource_version_time_handler.go new file mode 100644 index 00000000..4054ae12 --- /dev/null +++ b/services/queries/resource_version_time_handler.go @@ -0,0 +1,17 @@ +package queries + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceVersionTimeHandler struct { + BaseQueryHandler +} + +func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // resourceVersionTime := service.GetQueryParam(types.ResourceVersionTime) + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/version_time_handler.go b/services/queries/version_time_handler.go index 9b015ed0..29674a09 100644 --- a/services/queries/version_time_handler.go +++ b/services/queries/version_time_handler.go @@ -28,16 +28,16 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services allVersions := allMetadatas.ContentStream.(*types.DereferencedDidVersionsList) if len(allVersions.Versions) == 0 { - return nil, types.NewNotFoundError("No versions found", contentType, nil, v.IsDereferencing) + return nil, types.NewNotFoundError(did, contentType, nil, v.IsDereferencing) } versionId, _err := allVersions.FindBeforeTime(versionTime) if _err != nil { - return nil, types.NewInternalError("error while finding version before time", contentType, _err, v.IsDereferencing) + return nil, types.NewInternalError(did, contentType, _err, v.IsDereferencing) } if versionId == "" { - return nil, types.NewNotFoundError("No versions found", contentType, nil, v.IsDereferencing) + return nil, types.NewNotFoundError(did, contentType, nil, v.IsDereferencing) } result, err := c.DidDocService.Resolve(did, versionId, contentType) diff --git a/services/resource_dereference_service.go b/services/resource_dereference_service.go index 1ce60f43..ff1ed4ac 100644 --- a/services/resource_dereference_service.go +++ b/services/resource_dereference_service.go @@ -36,7 +36,7 @@ func (rds ResourceService) DereferenceResourceMetadata(did string, resourceId st context = types.ResolutionSchemaJSONLD } - contentStream := types.NewDereferencedResourceList(did, []*resourceTypes.Metadata{resource.Metadata}) + contentStream := types.NewDereferencedResourceListStruct(did, []*resourceTypes.Metadata{resource.Metadata}) return &types.ResourceDereferencing{Context: context, ContentStream: contentStream, DereferencingMetadata: dereferenceMetadata}, nil } diff --git a/tests/unit-tests/request_service_dereference_collection_resources_test.go b/tests/unit-tests/request_service_dereference_collection_resources_test.go index 12e190bf..d142df41 100644 --- a/tests/unit-tests/request_service_dereference_collection_resources_test.go +++ b/tests/unit-tests/request_service_dereference_collection_resources_test.go @@ -63,7 +63,7 @@ var _ = DescribeTable("Test ResourceCollectionEchoHandler function", func(testCa Method: ValidMethod, }, }, - ContentStream: types.NewDereferencedResourceList( + ContentStream: types.NewDereferencedResourceListStruct( ValidDid, []*resourceTypes.Metadata{validResource.Metadata}, ), diff --git a/tests/unit-tests/request_service_dereference_resource_metadata_test.go b/tests/unit-tests/request_service_dereference_resource_metadata_test.go index 455c67ab..e870f317 100644 --- a/tests/unit-tests/request_service_dereference_resource_metadata_test.go +++ b/tests/unit-tests/request_service_dereference_resource_metadata_test.go @@ -15,9 +15,9 @@ import ( ) type DereferencingResult struct { - DereferencingMetadata *types.DereferencingMetadata `json:"dereferencingMetadata"` - ContentStream *types.DereferencedResourceList `json:"contentStream"` - Metadata *types.ResolutionDidDocMetadata `json:"contentMetadata"` + DereferencingMetadata *types.DereferencingMetadata `json:"dereferencingMetadata"` + ContentStream *types.DereferencedResourceListStruct `json:"contentStream"` + Metadata *types.ResolutionDidDocMetadata `json:"contentMetadata"` } type resourceMetadataTestCase struct { @@ -68,7 +68,7 @@ var _ = DescribeTable("Test ResourceMetadataEchoHandler function", func(testCase Method: ValidMethod, }, }, - ContentStream: types.NewDereferencedResourceList( + ContentStream: types.NewDereferencedResourceListStruct( ValidDid, []*resourceTypes.Metadata{validResource.Metadata}, ), diff --git a/tests/unit-tests/test_utils.go b/tests/unit-tests/test_utils.go index df25f83e..b86f0023 100644 --- a/tests/unit-tests/test_utils.go +++ b/tests/unit-tests/test_utils.go @@ -44,7 +44,7 @@ const ( InvalidDid = "did:" + InvalidMethod + ":" + InvalidNamespace + ":" + InvalidIdentifier InvalidResourceId = "invalid_resource_id" InvalidVersionId = "invalid_uuid_identifier" - InvalidServiceId = "not_found_service_id" + InvalidServiceId = "not_found_service_id" ) const ( @@ -110,7 +110,7 @@ var ( validQuery, _ = url.ParseQuery("attr=value") ) -var dereferencedResourceList = types.NewDereferencedResourceList(ValidDid, []*resourceTypes.Metadata{validResource.Metadata}) +var dereferencedResourceList = types.NewDereferencedResourceListStruct(ValidDid, []*resourceTypes.Metadata{validResource.Metadata}) func ValidVerificationMethod() didTypes.VerificationMethod { return didTypes.VerificationMethod{ @@ -263,4 +263,4 @@ func MustParseDate(sdate string) time.Time { } return date -} \ No newline at end of file +} diff --git a/types/constants.go b/types/constants.go index 0f78fe86..399bd8f2 100644 --- a/types/constants.go +++ b/types/constants.go @@ -37,8 +37,15 @@ const ( ) const ( - VersionId string = "versionId" - VersionTime string = "versionTime" - ServiceQ string = "service" - RelativeRef string = "relativeRef" + VersionId string = "versionId" + VersionTime string = "versionTime" + ServiceQ string = "service" + RelativeRef string = "relativeRef" + ResourceId string = "resourceId" + ResourceName string = "resourceName" + ResourceType string = "resourceType" + ResourceVersionTime string = "resourceVersionTime" + ResourceMetadata string = "resourceMetadata" + ResourceCollectionId string = "resourceCollectionId" + ResourceVersion string = "resourceVersion" ) diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index afa45139..61ca4af2 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -42,25 +42,73 @@ func NewDereferencedResource(did string, resource *resourceTypes.Metadata) *Dere } } -type DereferencedResourceList struct { - Resources []DereferencedResource `json:"linkedResourceMetadata,omitempty"` +type DereferencedResourceListStruct struct { + Resources DereferencedResourceList `json:"linkedResourceMetadata,omitempty"` } -func NewDereferencedResourceList(did string, protoResources []*resourceTypes.Metadata) *DereferencedResourceList { +func NewDereferencedResourceListStruct(did string, protoResources []*resourceTypes.Metadata) *DereferencedResourceListStruct { resourceList := []DereferencedResource{} for _, r := range protoResources { resourceList = append(resourceList, *NewDereferencedResource(did, r)) } - return &DereferencedResourceList{ + return &DereferencedResourceListStruct{ Resources: resourceList, } } +func (e *DereferencedResourceListStruct) AddContext(newProtocol string) {} +func (e *DereferencedResourceListStruct) RemoveContext() {} +func (e *DereferencedResourceListStruct) GetBytes() []byte { return []byte{} } + +// DereferencedResourceList + +type DereferencedResourceList []DereferencedResource func (e *DereferencedResourceList) AddContext(newProtocol string) {} func (e *DereferencedResourceList) RemoveContext() {} func (e *DereferencedResourceList) GetBytes() []byte { return []byte{} } +func (e DereferencedResourceList) GetByResourceId(resourceId string) DereferencedResourceList { + for _, r := range e { + if r.ResourceId == resourceId { + return DereferencedResourceList{r} + } + } + return DereferencedResourceList{} +} + +func (e DereferencedResourceList) FilterByCollectionId(collectionId string) DereferencedResourceList { + filteredResources := DereferencedResourceList{} + for _, r := range e { + if r.CollectionId == collectionId { + filteredResources = append(filteredResources, r) + } + } + return filteredResources +} + +func (e DereferencedResourceList) FilterByResourceType(resourceType string) DereferencedResourceList { + filteredResources := DereferencedResourceList{} + for _, r := range e { + if r.ResourceType == resourceType { + filteredResources = append(filteredResources, r) + } + } + return filteredResources +} + +func (e DereferencedResourceList) FilterByResourceName(resourceName string) DereferencedResourceList { + filteredResources := DereferencedResourceList{} + for _, r := range e { + if r.Name == resourceName { + filteredResources = append(filteredResources, r) + } + } + return filteredResources +} + +// DereferencedResourceData + type DereferencedResourceData []byte func (e *DereferencedResourceData) AddContext(newProtocol string) {} diff --git a/types/did_doc_metadata.go b/types/did_doc_metadata.go index 6566b19c..a185be2e 100644 --- a/types/did_doc_metadata.go +++ b/types/did_doc_metadata.go @@ -9,11 +9,11 @@ import ( ) type ResolutionDidDocMetadata struct { - Created *time.Time `json:"created,omitempty" example:"2021-09-01T12:00:00Z"` - Updated *time.Time `json:"updated,omitempty" example:"2021-09-10T12:00:00Z"` - Deactivated bool `json:"deactivated,omitempty" example:"false"` - VersionId string `json:"versionId,omitempty" example:"4979BAF49599FEF0BAD5ED0849FDD708156761EBBC8EBE78D0907F8BECC9CB2E"` - Resources []DereferencedResource `json:"linkedResourceMetadata,omitempty"` + Created *time.Time `json:"created,omitempty" example:"2021-09-01T12:00:00Z"` + Updated *time.Time `json:"updated,omitempty" example:"2021-09-10T12:00:00Z"` + Deactivated bool `json:"deactivated,omitempty" example:"false"` + VersionId string `json:"versionId,omitempty" example:"4979BAF49599FEF0BAD5ED0849FDD708156761EBBC8EBE78D0907F8BECC9CB2E"` + Resources DereferencedResourceList `json:"linkedResourceMetadata,omitempty"` } func NewResolutionDidDocMetadata(did string, metadata *didTypes.Metadata, resources []*resourceTypes.Metadata) ResolutionDidDocMetadata { @@ -31,7 +31,7 @@ func NewResolutionDidDocMetadata(did string, metadata *didTypes.Metadata, resour return newMetadata } - newMetadata.Resources = NewDereferencedResourceList(did, resources).Resources + newMetadata.Resources = NewDereferencedResourceListStruct(did, resources).Resources return newMetadata } diff --git a/types/supported_queries.go b/types/supported_queries.go index 01b302db..7e553f72 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -19,9 +19,42 @@ func (s *SupportedQueriesT) DiffWithUrlValues(values url.Values) []string { return result } +func (s *SupportedQueriesT) IntersectWithUrlValues(values url.Values) []string { + var result []string + for k := range values { + if utils.Contains(*s, k) { + result = append(result, k) + } + } + return result +} + +func (s *SupportedQueriesT) Plus (s2 SupportedQueriesT) SupportedQueriesT { + var result SupportedQueriesT + for _, v := range *s { + result = append(result, v) + } + for _, v := range s2 { + result = append(result, v) + } + return result +} + var DidSupportedQueries = SupportedQueriesT{ VersionId, VersionTime, ServiceQ, RelativeRef, } + +var ResourceSupportedQueries = SupportedQueriesT{ + ResourceId, + ResourceCollectionId, + ResourceName, + ResourceMetadata, + ResourceType, + ResourceVersion, + ResourceVersionTime, +} + +var AllSupportedQueries = DidSupportedQueries.Plus(ResourceSupportedQueries) From 2fe3edb3c914303dad2075d1dbbdb020f9c8d01f Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Sun, 9 Apr 2023 18:53:18 +0400 Subject: [PATCH 05/46] Small refactoring --- services/diddoc/diddoc_query.go | 28 +++++----- .../did_query_handler.go} | 5 +- .../did_relative_ref_handler.go} | 5 +- .../did_service_handler.go} | 7 +-- .../did_version_id_handler.go} | 5 +- .../did_version_time_handler.go} | 5 +- .../queries/resource_collection_id_handler.go | 48 ----------------- services/queries/resource_id_handler.go | 46 ---------------- services/queries/resource_metadata_handler.go | 21 -------- services/queries/resource_name_handler.go | 49 ----------------- services/queries/resource_type_handler.go | 48 ----------------- .../queries/resource_version_time_handler.go | 17 ------ .../resource_collection_id_handler.go | 34 ++++++++++++ .../resources/resource_helper_handler.go | 39 ++++++++++++++ .../{ => resources}/resource_helpers.go | 2 +- .../queries/resources/resource_id_handler.go | 32 +++++++++++ .../resources/resource_metadata_handler.go | 39 ++++++++++++++ .../resources/resource_name_handler.go | 35 ++++++++++++ .../{ => resources}/resource_query_handler.go | 5 +- .../resources/resource_type_handler.go | 32 +++++++++++ .../resources/resource_validation_handler.go | 35 ++++++++++++ .../resource_version_handler.go | 5 +- .../resource_version_time_handler.go | 38 +++++++++++++ .../dereferencing_content_stream_test.go | 53 +++++++++++++++++++ types/dereferencing_content_stream.go | 34 ++++++++++++ 25 files changed, 409 insertions(+), 258 deletions(-) rename services/queries/{query_did_handler.go => diddoc/did_query_handler.go} (90%) rename services/queries/{relative_ref_handler.go => diddoc/did_relative_ref_handler.go} (89%) rename services/queries/{service_handler.go => diddoc/did_service_handler.go} (88%) rename services/queries/{version_id_handler.go => diddoc/did_version_id_handler.go} (89%) rename services/queries/{version_time_handler.go => diddoc/did_version_time_handler.go} (93%) delete mode 100644 services/queries/resource_collection_id_handler.go delete mode 100644 services/queries/resource_id_handler.go delete mode 100644 services/queries/resource_metadata_handler.go delete mode 100644 services/queries/resource_name_handler.go delete mode 100644 services/queries/resource_type_handler.go delete mode 100644 services/queries/resource_version_time_handler.go create mode 100644 services/queries/resources/resource_collection_id_handler.go create mode 100644 services/queries/resources/resource_helper_handler.go rename services/queries/{ => resources}/resource_helpers.go (98%) create mode 100644 services/queries/resources/resource_id_handler.go create mode 100644 services/queries/resources/resource_metadata_handler.go create mode 100644 services/queries/resources/resource_name_handler.go rename services/queries/{ => resources}/resource_query_handler.go (92%) create mode 100644 services/queries/resources/resource_type_handler.go create mode 100644 services/queries/resources/resource_validation_handler.go rename services/queries/{ => resources}/resource_version_handler.go (82%) create mode 100644 services/queries/resources/resource_version_time_handler.go create mode 100644 tests/unit-tests/dereferencing_content_stream_test.go diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index bfd4bdf7..94a9307c 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -7,6 +7,8 @@ import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/services/queries" + diddocQueries "github.com/cheqd/did-resolver/services/queries/diddoc" + resourceQueries "github.com/cheqd/did-resolver/services/queries/resources" "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/utils" ) @@ -79,21 +81,21 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { // ToDo register query handlers - relativeRefHandler := queries.RelativeRefHandler{} - serviceHandler := queries.ServiceHandler{} - versionIdHandler := queries.VersionIdHandler{} - versionTimeHandler := queries.VersionTimeHandler{} - didQueryHandler := queries.DidQueryHandler{} + relativeRefHandler := diddocQueries.RelativeRefHandler{} + serviceHandler := diddocQueries.ServiceHandler{} + versionIdHandler := diddocQueries.VersionIdHandler{} + versionTimeHandler := diddocQueries.VersionTimeHandler{} + didQueryHandler := diddocQueries.DidQueryHandler{} // Resource handlers - resourceQueryHandler := queries.ResourceQueryHandler{} - resourceIdHandler := queries.ResourceIdHandler{} - resourceMetadataHandler := queries.ResourceMetadataHandler{} - resourceCollectionIdHandler := queries.ResourceCollectionIdHandler{} - resourceNameHandler := queries.ResourceNameHandler{} - resourceTypeHandler := queries.ResourceTypeHandler{} - resourceVersionHandler := queries.ResourceVersionHandler{} - resourceVersionTimeHandler := queries.ResourceVersionTimeHandler{} + resourceQueryHandler := resourceQueries.ResourceQueryHandler{} + resourceIdHandler := resourceQueries.ResourceIdHandler{} + resourceMetadataHandler := resourceQueries.ResourceMetadataHandler{} + resourceCollectionIdHandler := resourceQueries.ResourceCollectionIdHandler{} + resourceNameHandler := resourceQueries.ResourceNameHandler{} + resourceTypeHandler := resourceQueries.ResourceTypeHandler{} + resourceVersionHandler := resourceQueries.ResourceVersionHandler{} + resourceVersionTimeHandler := resourceQueries.ResourceVersionTimeHandler{} stopHandler := queries.StopHandler{} diff --git a/services/queries/query_did_handler.go b/services/queries/diddoc/did_query_handler.go similarity index 90% rename from services/queries/query_did_handler.go rename to services/queries/diddoc/did_query_handler.go index 6cfb7dcb..464bbd6d 100644 --- a/services/queries/query_did_handler.go +++ b/services/queries/diddoc/did_query_handler.go @@ -1,12 +1,13 @@ -package queries +package diddoc import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type DidQueryHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (d *DidQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/relative_ref_handler.go b/services/queries/diddoc/did_relative_ref_handler.go similarity index 89% rename from services/queries/relative_ref_handler.go rename to services/queries/diddoc/did_relative_ref_handler.go index 8a2d624f..7fd41e91 100644 --- a/services/queries/relative_ref_handler.go +++ b/services/queries/diddoc/did_relative_ref_handler.go @@ -1,12 +1,13 @@ -package queries +package diddoc import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type RelativeRefHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (r *RelativeRefHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/service_handler.go b/services/queries/diddoc/did_service_handler.go similarity index 88% rename from services/queries/service_handler.go rename to services/queries/diddoc/did_service_handler.go index 742dd15d..45e2b400 100644 --- a/services/queries/service_handler.go +++ b/services/queries/diddoc/did_service_handler.go @@ -1,12 +1,13 @@ -package queries +package diddoc import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type ServiceHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (s *ServiceHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { @@ -15,7 +16,7 @@ func (s *ServiceHandler) Handle(c services.ResolverContext, service services.Req // If serviceValue is empty, call the next handler. We don't need to handle it here if serviceValue == "" { - return s.next.Handle(c, service, response) + return s.Continue(c, service, response) } // We expect here only DidResolution diff --git a/services/queries/version_id_handler.go b/services/queries/diddoc/did_version_id_handler.go similarity index 89% rename from services/queries/version_id_handler.go rename to services/queries/diddoc/did_version_id_handler.go index 15487c67..5c03eb3b 100644 --- a/services/queries/version_id_handler.go +++ b/services/queries/diddoc/did_version_id_handler.go @@ -1,12 +1,13 @@ -package queries +package diddoc import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type VersionIdHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (v *VersionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/version_time_handler.go b/services/queries/diddoc/did_version_time_handler.go similarity index 93% rename from services/queries/version_time_handler.go rename to services/queries/diddoc/did_version_time_handler.go index 29674a09..e41a7318 100644 --- a/services/queries/version_time_handler.go +++ b/services/queries/diddoc/did_version_time_handler.go @@ -1,12 +1,13 @@ -package queries +package diddoc import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type VersionTimeHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/resource_collection_id_handler.go b/services/queries/resource_collection_id_handler.go deleted file mode 100644 index 2464766e..00000000 --- a/services/queries/resource_collection_id_handler.go +++ /dev/null @@ -1,48 +0,0 @@ -package queries - -import ( - "errors" - - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceCollectionIdHandler struct { - BaseQueryHandler -} - -func (d *ResourceCollectionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceCollectionId := service.GetQueryParam(types.ResourceCollectionId) - if resourceCollectionId == "" { - return d.Continue(c, service, response) - } - - // If response has type of ResourceDefereferencingResult, - // then we need to check if the resourceCollectionId is the same as the one in the response - resDeref, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - } - - // Cast to DereferencedResourceListStruct for getting the list of metadatas - resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) - } - // Filter the list of metadatas by the resourceCollectionId - resourceCollectionFiltered := resourceCollection.Resources.FilterByCollectionId(resourceCollectionId) - if len(resourceCollectionFiltered) == 0 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) - } - - resDeref.ContentStream = &types.ResolutionDidDocMetadata{ - Created: resourceCollection.Created, - Updated: resourceCollection.Updated, - Deactivated: resourceCollection.Deactivated, - VersionId: resourceCollection.VersionId, - Resources: resourceCollectionFiltered, - } - - // Call the next handler - return d.Continue(c, service, resDeref) -} diff --git a/services/queries/resource_id_handler.go b/services/queries/resource_id_handler.go deleted file mode 100644 index db88fc78..00000000 --- a/services/queries/resource_id_handler.go +++ /dev/null @@ -1,46 +0,0 @@ -package queries - -import ( - "errors" - - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceIdHandler struct { - BaseQueryHandler -} - -func (d *ResourceIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceId := service.GetQueryParam(types.ResourceId) - if resourceId == "" { - return d.Continue(c, service, response) - } - - // If response has type of ResourceDefereferencingResult, - // then we need to check if the resourceCollectionId is the same as the one in the response - resDeref, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - } - - resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) - } - resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) - if len(resourceCollectionFiltered) == 0 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) - } - - resDeref.ContentStream = &types.ResolutionDidDocMetadata{ - Created: resourceCollection.Created, - Updated: resourceCollection.Updated, - Deactivated: resourceCollection.Deactivated, - VersionId: resourceCollection.VersionId, - Resources: resourceCollectionFiltered, - } - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resource_metadata_handler.go b/services/queries/resource_metadata_handler.go deleted file mode 100644 index 1c689c7b..00000000 --- a/services/queries/resource_metadata_handler.go +++ /dev/null @@ -1,21 +0,0 @@ -package queries - -import ( - - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceMetadataHandler struct { - BaseQueryHandler -} - -func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceMetadata := service.GetQueryParam(types.ResourceMetadata) - if resourceMetadata == "" { - return d.Continue(c, service, response) - } - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resource_name_handler.go b/services/queries/resource_name_handler.go deleted file mode 100644 index 659d9274..00000000 --- a/services/queries/resource_name_handler.go +++ /dev/null @@ -1,49 +0,0 @@ -package queries - -import ( - "errors" - - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceNameHandler struct { - BaseQueryHandler -} - -func (d *ResourceNameHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceName := service.GetQueryParam(types.ResourceName) - - if resourceName == "" { - return d.Continue(c, service, response) - } - - // If response has type of ResourceDefereferencingResult, - // then we need to check if the resourceCollectionId is the same as the one in the response - resDeref, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceNameHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - } - - // Cast to DereferencedResourceListStruct for getting the list of metadatas - resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceNameHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) - } - // Filter the list of metadatas by the resourceCollectionId - resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceName(resourceName) - if len(resourceCollectionFiltered) == 0 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) - } - - resDeref.ContentStream = &types.ResolutionDidDocMetadata{ - Created: resourceCollection.Created, - Updated: resourceCollection.Updated, - Deactivated: resourceCollection.Deactivated, - VersionId: resourceCollection.VersionId, - Resources: resourceCollectionFiltered, - } - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resource_type_handler.go b/services/queries/resource_type_handler.go deleted file mode 100644 index 5b7a9461..00000000 --- a/services/queries/resource_type_handler.go +++ /dev/null @@ -1,48 +0,0 @@ -package queries - -import ( - "errors" - - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceTypeHandler struct { - BaseQueryHandler -} - -func (d *ResourceTypeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceType := service.GetQueryParam(types.ResourceType) - if resourceType == "" { - return d.Continue(c, service, response) - } - - // If response has type of ResourceDefereferencingResult, - // then we need to check if the resourceCollectionId is the same as the one in the response - resDeref, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceTypeHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - } - - // Cast to DereferencedResourceListStruct for getting the list of metadatas - resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceTypeHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) - } - // Filter the list of metadatas by the resourceCollectionId - resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceType(resourceType) - if len(resourceCollectionFiltered) == 0 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) - } - - resDeref.ContentStream = &types.ResolutionDidDocMetadata{ - Created: resourceCollection.Created, - Updated: resourceCollection.Updated, - Deactivated: resourceCollection.Deactivated, - VersionId: resourceCollection.VersionId, - Resources: resourceCollectionFiltered, - } - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resource_version_time_handler.go b/services/queries/resource_version_time_handler.go deleted file mode 100644 index 4054ae12..00000000 --- a/services/queries/resource_version_time_handler.go +++ /dev/null @@ -1,17 +0,0 @@ -package queries - -import ( - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" -) - -type ResourceVersionTimeHandler struct { - BaseQueryHandler -} - -func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // resourceVersionTime := service.GetQueryParam(types.ResourceVersionTime) - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resources/resource_collection_id_handler.go b/services/queries/resources/resource_collection_id_handler.go new file mode 100644 index 00000000..588b3b67 --- /dev/null +++ b/services/queries/resources/resource_collection_id_handler.go @@ -0,0 +1,34 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" +) + +type ResourceCollectionIdHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceCollectionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceCollectionId := service.GetQueryParam(types.ResourceCollectionId) + if resourceCollectionId == "" { + return d.Continue(c, service, response) + } + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByCollectionId(resourceCollectionId) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + // Call the next handler + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) +} diff --git a/services/queries/resources/resource_helper_handler.go b/services/queries/resources/resource_helper_handler.go new file mode 100644 index 00000000..1ba0eed9 --- /dev/null +++ b/services/queries/resources/resource_helper_handler.go @@ -0,0 +1,39 @@ +package resources + +import ( + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type ResourceHelperHandler struct { + rd *types.ResourceDereferencing + rc *types.ResolutionDidDocMetadata +} + +func (d *ResourceHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (*types.ResolutionDidDocMetadata, error) { + rd, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) + } + d.rd = rd + + // Cast to DereferencedResourceListStruct for getting the list of metadatas + rc, ok := d.rd.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) + } + d.rc = rc + return rc, nil +} + +func (d *ResourceHelperHandler) CastToResult(resourceCollectionFiltered types.DereferencedResourceList) *types.ResourceDereferencing { + d.rd.ContentStream = &types.ResolutionDidDocMetadata{ + Created: d.rc.Created, + Updated: d.rc.Updated, + Deactivated: d.rc.Deactivated, + VersionId: d.rc.VersionId, + Resources: resourceCollectionFiltered, + } + return d.rd +} \ No newline at end of file diff --git a/services/queries/resource_helpers.go b/services/queries/resources/resource_helpers.go similarity index 98% rename from services/queries/resource_helpers.go rename to services/queries/resources/resource_helpers.go index b8b4ee81..10c81a19 100644 --- a/services/queries/resource_helpers.go +++ b/services/queries/resources/resource_helpers.go @@ -1,4 +1,4 @@ -package queries +package resources // import "github.com/cheqd/did-resolver/types" diff --git a/services/queries/resources/resource_id_handler.go b/services/queries/resources/resource_id_handler.go new file mode 100644 index 00000000..56da15dd --- /dev/null +++ b/services/queries/resources/resource_id_handler.go @@ -0,0 +1,32 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" +) + +type ResourceIdHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceId := service.GetQueryParam(types.ResourceId) + if resourceId == "" { + return d.Continue(c, service, response) + } + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + // Call the next handler + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) +} diff --git a/services/queries/resources/resource_metadata_handler.go b/services/queries/resources/resource_metadata_handler.go new file mode 100644 index 00000000..a5ea9ac7 --- /dev/null +++ b/services/queries/resources/resource_metadata_handler.go @@ -0,0 +1,39 @@ +package resources + +import ( + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" +) + +type ResourceMetadataHandler struct { + queries.BaseQueryHandler +} + +func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceMetadata := service.GetQueryParam(types.ResourceMetadata) + if resourceMetadata == "" { + return d.Continue(c, service, response) + } + + // If response has type of ResourceDefereferencingResult, + // then we need to check if the resourceCollectionId is the same as the one in the response + // resDeref, ok := response.(*types.ResourceDereferencing) + // if !ok { + // return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + // } + + // // Cast to DereferencedResourceListStruct for getting the list of metadatas + // resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + // if !ok { + // return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + // } + + // if resourceMetadata != "true" { + // dereferencingResult, err := c.ResourceService.DereferenceResourceMetadata(service.GetDid(), .ResourceId, dr.RequestedContentType) + // } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resources/resource_name_handler.go b/services/queries/resources/resource_name_handler.go new file mode 100644 index 00000000..b26a7721 --- /dev/null +++ b/services/queries/resources/resource_name_handler.go @@ -0,0 +1,35 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" +) + +type ResourceNameHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceNameHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceName := service.GetQueryParam(types.ResourceName) + + if resourceName == "" { + return d.Continue(c, service, response) + } + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceName(resourceName) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + // Call the next handler + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) +} diff --git a/services/queries/resource_query_handler.go b/services/queries/resources/resource_query_handler.go similarity index 92% rename from services/queries/resource_query_handler.go rename to services/queries/resources/resource_query_handler.go index d33bbad8..ad3312b9 100644 --- a/services/queries/resource_query_handler.go +++ b/services/queries/resources/resource_query_handler.go @@ -1,12 +1,13 @@ -package queries +package resources import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type ResourceQueryHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (d *ResourceQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/resources/resource_type_handler.go b/services/queries/resources/resource_type_handler.go new file mode 100644 index 00000000..2aa8d301 --- /dev/null +++ b/services/queries/resources/resource_type_handler.go @@ -0,0 +1,32 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" +) + +type ResourceTypeHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceTypeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceType := service.GetQueryParam(types.ResourceType) + if resourceType == "" { + return d.Continue(c, service, response) + } + + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByResourceType(resourceType) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + // Call the next handler + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) +} diff --git a/services/queries/resources/resource_validation_handler.go b/services/queries/resources/resource_validation_handler.go new file mode 100644 index 00000000..1b7736b4 --- /dev/null +++ b/services/queries/resources/resource_validation_handler.go @@ -0,0 +1,35 @@ +package resources + +import ( + "errors" + + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" +) + +type ResourceValidationHandler struct { + queries.BaseQueryHandler +} + +func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // After all filters here should be a single resource. + // Else it's an error + resDeref, ok := response.(*types.ResourceDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceValidationHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) + } + + // Cast to ResolutionDidDocMetadata for getting the list of metadata + resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceValidationHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + } + + if len(resourceCollection.Resources) == 0 { + return nil, types.NewRepresentationNotSupportedError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + // Call the next handler + return d.Continue(c, service, response) +} diff --git a/services/queries/resource_version_handler.go b/services/queries/resources/resource_version_handler.go similarity index 82% rename from services/queries/resource_version_handler.go rename to services/queries/resources/resource_version_handler.go index 7af9b271..49053042 100644 --- a/services/queries/resource_version_handler.go +++ b/services/queries/resources/resource_version_handler.go @@ -1,12 +1,13 @@ -package queries +package resources import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/services/queries" ) type ResourceVersionHandler struct { - BaseQueryHandler + queries.BaseQueryHandler } func (d *ResourceVersionHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { diff --git a/services/queries/resources/resource_version_time_handler.go b/services/queries/resources/resource_version_time_handler.go new file mode 100644 index 00000000..0022b6d4 --- /dev/null +++ b/services/queries/resources/resource_version_time_handler.go @@ -0,0 +1,38 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" +) + +type ResourceVersionTimeHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceVersionTime := service.GetQueryParam(types.ResourceVersionTime) + if resourceVersionTime == "" { + return d.Continue(c, service, response) + } + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + // Get resourceId of the resource with the closest time to the requested time + resourceId, err := resourceCollection.Resources.FindBeforeTime(resourceVersionTime) + if err != nil { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + if resourceId == "" { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) + + // Call the next handler + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) +} diff --git a/tests/unit-tests/dereferencing_content_stream_test.go b/tests/unit-tests/dereferencing_content_stream_test.go new file mode 100644 index 00000000..b50d3421 --- /dev/null +++ b/tests/unit-tests/dereferencing_content_stream_test.go @@ -0,0 +1,53 @@ +package tests + +import ( + "time" + + "github.com/cheqd/did-resolver/types" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = Describe("DereferencingContentStream Find before time", func() { + var versionList types.DereferencedResourceList + + BeforeEach(func() { + _tcreated := MustParseDate("2021-08-23T09:00:00Z") + _t1 := MustParseDate("2021-08-23T09:30:00Z") + _t2 := MustParseDate("2021-08-23T09:40:00Z") + versionList = types.DereferencedResourceList{ + { + Created: &_tcreated, + ResourceId: "1", + }, + { + Created: &_t1, + ResourceId: "2", + }, + { + Created: &_t2, + ResourceId: "3", + }, + } + }) + + Context("FindBeforeTime", func() { + // Should return the first resource + It("should return resourceId of the first resource", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) + }) + // Should return the second resource + It("should return resourceId of the second resource", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) + }) + // Should return the latest resource + It("should return resourceId of the latest resource", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) + }) + // Time before the creation + It("should return empty string if no metadata found", func() { + Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) + }) + + }) +}) diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index 61ca4af2..fef025d8 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -1,9 +1,11 @@ package types import ( + "sort" "time" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" + "github.com/cheqd/did-resolver/utils" ) type DereferencedResource struct { @@ -107,6 +109,38 @@ func (e DereferencedResourceList) FilterByResourceName(resourceName string) Dere return filteredResources } +func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { + search_time, err := utils.ParseFromStringTimeToGoTime(stime) + if err != nil { + return "", err + } + // Firstly - sort versions by Updated time + versions := e + sort.Sort(DereferencedResourceList(versions)) + if len(versions) == 0 { + return "", nil + } + for _, v := range versions { + if v.Created.Before(search_time) { + return v.ResourceId, nil + } + } + return "", nil +} + +func (dr DereferencedResourceList) Len() int { + return len(dr) +} + +// Sort in reverse order +func (dr DereferencedResourceList) Less(i, j int) bool { + return dr[i].Created.After(*dr[j].Created) +} + +func (dr DereferencedResourceList) Swap(i, j int) { + dr[i], dr[j] = dr[j], dr[i] +} + // DereferencedResourceData type DereferencedResourceData []byte From 2f91293ce8bbffb34a7b7408e691fc0d125bba05 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Sun, 9 Apr 2023 19:03:16 +0400 Subject: [PATCH 06/46] Add resourceVersion and handler for it --- services/diddoc/diddoc_query.go | 13 +++++++++-- .../resources/resource_validation_handler.go | 23 +++++++------------ .../resources/resource_version_handler.go | 21 +++++++++++++---- types/dereferencing_content_stream.go | 13 +++++++++++ 4 files changed, 49 insertions(+), 21 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 94a9307c..ac5bcbfd 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -96,6 +96,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo resourceTypeHandler := resourceQueries.ResourceTypeHandler{} resourceVersionHandler := resourceQueries.ResourceVersionHandler{} resourceVersionTimeHandler := resourceQueries.ResourceVersionTimeHandler{} + resourceValidationHandler := resourceQueries.ResourceValidationHandler{} stopHandler := queries.StopHandler{} @@ -136,6 +137,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo return err } + // It's a resource query to fetch the collection of resources resourceQueryHandler.SetNext(c, &resourceIdHandler) if err != nil { return err @@ -143,7 +145,9 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // Resource handlers // Chain would be: - // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> resourceMetadataHandler -> stopHandler + // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> + // -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> + // -> resourceValidationHandler -> resourceMetadataHandler -> stopHandler err = resourceIdHandler.SetNext(c, &resourceVersionTimeHandler) if err != nil { return err @@ -169,7 +173,12 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo return err } - err = resourceVersionHandler.SetNext(c, &resourceMetadataHandler) + err = resourceVersionHandler.SetNext(c, &resourceValidationHandler) + if err != nil { + return err + } + + err = resourceValidationHandler.SetNext(c, &resourceMetadataHandler) if err != nil { return err } diff --git a/services/queries/resources/resource_validation_handler.go b/services/queries/resources/resource_validation_handler.go index 1b7736b4..7b729a42 100644 --- a/services/queries/resources/resource_validation_handler.go +++ b/services/queries/resources/resource_validation_handler.go @@ -1,35 +1,28 @@ package resources import ( - "errors" - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceValidationHandler struct { queries.BaseQueryHandler + ResourceHelperHandler } func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // After all filters here should be a single resource. - // Else it's an error - resDeref, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceValidationHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - } - // Cast to ResolutionDidDocMetadata for getting the list of metadata - resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceValidationHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err } if len(resourceCollection.Resources) == 0 { - return nil, types.NewRepresentationNotSupportedError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - + // Call the next handler return d.Continue(c, service, response) } diff --git a/services/queries/resources/resource_version_handler.go b/services/queries/resources/resource_version_handler.go index 49053042..19c696f2 100644 --- a/services/queries/resources/resource_version_handler.go +++ b/services/queries/resources/resource_version_handler.go @@ -2,17 +2,30 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceVersionHandler struct { queries.BaseQueryHandler + ResourceHelperHandler } func (d *ResourceVersionHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // resourceVersion := service.GetQueryParam(types.ResourceVersion) - + resourceVersion := service.GetQueryParam(types.ResourceVersion) + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + + // Filter the list of metadata by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByVersion(resourceVersion) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + // Call the next handler - return d.Continue(c, service, response) + return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) } diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index fef025d8..5350929c 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -19,6 +19,7 @@ type DereferencedResource struct { Checksum string `json:"checksum" example:"a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559"` PreviousVersionId *string `json:"previousVersionId" example:"ad7a8442-3531-46eb-a024-53953ec6e4ff"` NextVersionId *string `json:"nextVersionId" example:"d4829ac7-4566-478c-a408-b44767eddadc"` + Version string `json:"version" example:"1"` } func NewDereferencedResource(did string, resource *resourceTypes.Metadata) *DereferencedResource { @@ -39,6 +40,7 @@ func NewDereferencedResource(did string, resource *resourceTypes.Metadata) *Dere MediaType: resource.MediaType, Created: &created, Checksum: resource.Checksum, + Version: resource.Version, PreviousVersionId: previousVersionId, NextVersionId: nextVersionId, } @@ -66,6 +68,7 @@ func (e *DereferencedResourceListStruct) GetBytes() []byte { return // DereferencedResourceList type DereferencedResourceList []DereferencedResource + func (e *DereferencedResourceList) AddContext(newProtocol string) {} func (e *DereferencedResourceList) RemoveContext() {} func (e *DereferencedResourceList) GetBytes() []byte { return []byte{} } @@ -109,6 +112,16 @@ func (e DereferencedResourceList) FilterByResourceName(resourceName string) Dere return filteredResources } +func (e DereferencedResourceList) FilterByVersion(version string) DereferencedResourceList { + filteredResources := DereferencedResourceList{} + for _, r := range e { + if r.Version == version { + filteredResources = append(filteredResources, r) + } + } + return filteredResources +} + func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { search_time, err := utils.ParseFromStringTimeToGoTime(stime) if err != nil { From aaff569819b9b149f4667d41749c12a48eb1b7a5 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Sun, 9 Apr 2023 19:33:37 +0400 Subject: [PATCH 07/46] Makes Linter happy --- services/diddoc/diddoc_query.go | 176 ++++++++++-------- services/queries/diddoc/did_query_handler.go | 2 +- .../diddoc/did_relative_ref_handler.go | 2 +- .../queries/diddoc/did_service_handler.go | 2 +- .../queries/diddoc/did_version_id_handler.go | 2 +- .../diddoc/did_version_time_handler.go | 2 +- .../resource_collection_id_handler.go | 2 +- .../resources/resource_helper_handler.go | 11 +- .../queries/resources/resource_helpers.go | 4 +- .../resources/resource_metadata_handler.go | 5 +- .../resources/resource_name_handler.go | 4 +- .../resources/resource_query_handler.go | 2 +- .../resources/resource_type_handler.go | 4 +- .../resources/resource_validation_handler.go | 1 - .../dereferencing_content_stream_test.go | 7 +- .../unit-tests/dereferencing_metadata_test.go | 3 +- tests/unit-tests/query_handlers_test.go | 2 +- types/dereferecing_metadata.go | 11 +- types/dereferencing_content_stream.go | 2 +- types/supported_queries.go | 10 +- 20 files changed, 131 insertions(+), 123 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index ac5bcbfd..abfb64f7 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -80,124 +80,140 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) } func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { - // ToDo register query handlers - relativeRefHandler := diddocQueries.RelativeRefHandler{} - serviceHandler := diddocQueries.ServiceHandler{} - versionIdHandler := diddocQueries.VersionIdHandler{} - versionTimeHandler := diddocQueries.VersionTimeHandler{} - didQueryHandler := diddocQueries.DidQueryHandler{} - - // Resource handlers - resourceQueryHandler := resourceQueries.ResourceQueryHandler{} - resourceIdHandler := resourceQueries.ResourceIdHandler{} - resourceMetadataHandler := resourceQueries.ResourceMetadataHandler{} - resourceCollectionIdHandler := resourceQueries.ResourceCollectionIdHandler{} - resourceNameHandler := resourceQueries.ResourceNameHandler{} - resourceTypeHandler := resourceQueries.ResourceTypeHandler{} - resourceVersionHandler := resourceQueries.ResourceVersionHandler{} - resourceVersionTimeHandler := resourceQueries.ResourceVersionTimeHandler{} - resourceValidationHandler := resourceQueries.ResourceValidationHandler{} - stopHandler := queries.StopHandler{} // Create Chain of responsibility // First we need to just ask for Did: + + // DidDoc handlers + startHandler := diddocQueries.DidQueryHandler{} + lastHandler, err := dd.RegisterDidDocQueryHanlders(&startHandler, c) + if err != nil { + return err + } + + if len(types.ResourceSupportedQueries.IntersectWithUrlValues(dd.Queries)) > 0 { + lastHandler, err := dd.RegisterResourceQueryHandlers(lastHandler, c) + if err != nil { + return err + } + err = lastHandler.SetNext(c, &stopHandler) + if err != nil { + return err + } + } else { + err = lastHandler.SetNext(c, &stopHandler) + if err != nil { + return err + } + } + + dd.FirstHandler = &startHandler + + return nil +} + +func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler queries.BaseQueryHandlerI, c services.ResolverContext) (queries.BaseQueryHandlerI, error) { // - didQueryHandler // or // - versionIdHandler // After that we can find for service field if it's set. // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler -> stopHandler + relativeRefHandler := diddocQueries.RelativeRefHandler{} + serviceHandler := diddocQueries.ServiceHandler{} + versionIdHandler := diddocQueries.VersionIdHandler{} + versionTimeHandler := diddocQueries.VersionTimeHandler{} - // DidDoc handlers - - err := didQueryHandler.SetNext(c, &versionIdHandler) + err := startHandler.SetNext(c, &versionIdHandler) if err != nil { - return err + return nil, err } err = versionIdHandler.SetNext(c, &versionTimeHandler) if err != nil { - return err + return nil, err } err = versionTimeHandler.SetNext(c, &serviceHandler) if err != nil { - return err + return nil, err } err = serviceHandler.SetNext(c, &relativeRefHandler) if err != nil { - return err + return nil, err } + return &relativeRefHandler, nil - if len(types.ResourceSupportedQueries.IntersectWithUrlValues(dd.Queries)) > 0 { - err = relativeRefHandler.SetNext(c, &resourceQueryHandler) - if err != nil { - return err - } +} - // It's a resource query to fetch the collection of resources - resourceQueryHandler.SetNext(c, &resourceIdHandler) - if err != nil { - return err - } +func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler queries.BaseQueryHandlerI, c services.ResolverContext) (queries.BaseQueryHandlerI, error) { - // Resource handlers - // Chain would be: - // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> - // -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> - // -> resourceValidationHandler -> resourceMetadataHandler -> stopHandler - err = resourceIdHandler.SetNext(c, &resourceVersionTimeHandler) - if err != nil { - return err - } + // Resource handlers + resourceQueryHandler := resourceQueries.ResourceQueryHandler{} + resourceIdHandler := resourceQueries.ResourceIdHandler{} + resourceMetadataHandler := resourceQueries.ResourceMetadataHandler{} + resourceCollectionIdHandler := resourceQueries.ResourceCollectionIdHandler{} + resourceNameHandler := resourceQueries.ResourceNameHandler{} + resourceTypeHandler := resourceQueries.ResourceTypeHandler{} + resourceVersionHandler := resourceQueries.ResourceVersionHandler{} + resourceVersionTimeHandler := resourceQueries.ResourceVersionTimeHandler{} + resourceValidationHandler := resourceQueries.ResourceValidationHandler{} - err = resourceVersionTimeHandler.SetNext(c, &resourceCollectionIdHandler) - if err != nil { - return err - } + err := startHandler.SetNext(c, &resourceQueryHandler) + if err != nil { + return nil, err + } - err = resourceCollectionIdHandler.SetNext(c, &resourceNameHandler) - if err != nil { - return err - } + // It's a resource query to fetch the collection of resources + err = resourceQueryHandler.SetNext(c, &resourceIdHandler) + if err != nil { + return nil, err + } - err = resourceNameHandler.SetNext(c, &resourceTypeHandler) - if err != nil { - return err - } - - err = resourceTypeHandler.SetNext(c, &resourceVersionHandler) - if err != nil { - return err - } + // Resource handlers + // Chain would be: + // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> + // -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> + // -> resourceValidationHandler -> resourceMetadataHandler -> stopHandler + err = resourceIdHandler.SetNext(c, &resourceVersionTimeHandler) + if err != nil { + return nil, err + } - err = resourceVersionHandler.SetNext(c, &resourceValidationHandler) - if err != nil { - return err - } + err = resourceVersionTimeHandler.SetNext(c, &resourceCollectionIdHandler) + if err != nil { + return nil, err + } - err = resourceValidationHandler.SetNext(c, &resourceMetadataHandler) - if err != nil { - return err - } + err = resourceCollectionIdHandler.SetNext(c, &resourceNameHandler) + if err != nil { + return nil, err + } - err = resourceMetadataHandler.SetNext(c, &stopHandler) - if err != nil { - return err - } + err = resourceNameHandler.SetNext(c, &resourceTypeHandler) + if err != nil { + return nil, err + } - } else { - err = relativeRefHandler.SetNext(c, &stopHandler) - if err != nil { - return err - } + err = resourceTypeHandler.SetNext(c, &resourceVersionHandler) + if err != nil { + return nil, err } - dd.FirstHandler = &didQueryHandler + err = resourceVersionHandler.SetNext(c, &resourceValidationHandler) + if err != nil { + return nil, err + } + + err = resourceValidationHandler.SetNext(c, &resourceMetadataHandler) + if err != nil { + return nil, err + } + + return &resourceMetadataHandler, nil - return nil } func (dd *QueryDIDDocRequestService) Query(c services.ResolverContext) error { diff --git a/services/queries/diddoc/did_query_handler.go b/services/queries/diddoc/did_query_handler.go index 464bbd6d..e3d24f96 100644 --- a/services/queries/diddoc/did_query_handler.go +++ b/services/queries/diddoc/did_query_handler.go @@ -2,8 +2,8 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type DidQueryHandler struct { diff --git a/services/queries/diddoc/did_relative_ref_handler.go b/services/queries/diddoc/did_relative_ref_handler.go index 7fd41e91..c92347a6 100644 --- a/services/queries/diddoc/did_relative_ref_handler.go +++ b/services/queries/diddoc/did_relative_ref_handler.go @@ -2,8 +2,8 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type RelativeRefHandler struct { diff --git a/services/queries/diddoc/did_service_handler.go b/services/queries/diddoc/did_service_handler.go index 45e2b400..14840ca9 100644 --- a/services/queries/diddoc/did_service_handler.go +++ b/services/queries/diddoc/did_service_handler.go @@ -2,8 +2,8 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ServiceHandler struct { diff --git a/services/queries/diddoc/did_version_id_handler.go b/services/queries/diddoc/did_version_id_handler.go index 5c03eb3b..ffd51648 100644 --- a/services/queries/diddoc/did_version_id_handler.go +++ b/services/queries/diddoc/did_version_id_handler.go @@ -2,8 +2,8 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type VersionIdHandler struct { diff --git a/services/queries/diddoc/did_version_time_handler.go b/services/queries/diddoc/did_version_time_handler.go index e41a7318..0352e148 100644 --- a/services/queries/diddoc/did_version_time_handler.go +++ b/services/queries/diddoc/did_version_time_handler.go @@ -2,8 +2,8 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type VersionTimeHandler struct { diff --git a/services/queries/resources/resource_collection_id_handler.go b/services/queries/resources/resource_collection_id_handler.go index 588b3b67..2771e015 100644 --- a/services/queries/resources/resource_collection_id_handler.go +++ b/services/queries/resources/resource_collection_id_handler.go @@ -2,8 +2,8 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceCollectionIdHandler struct { diff --git a/services/queries/resources/resource_helper_handler.go b/services/queries/resources/resource_helper_handler.go index 1ba0eed9..15323e9a 100644 --- a/services/queries/resources/resource_helper_handler.go +++ b/services/queries/resources/resource_helper_handler.go @@ -1,7 +1,6 @@ package resources import ( - "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" ) @@ -29,11 +28,11 @@ func (d *ResourceHelperHandler) CastToContent(service services.RequestServiceI, func (d *ResourceHelperHandler) CastToResult(resourceCollectionFiltered types.DereferencedResourceList) *types.ResourceDereferencing { d.rd.ContentStream = &types.ResolutionDidDocMetadata{ - Created: d.rc.Created, - Updated: d.rc.Updated, + Created: d.rc.Created, + Updated: d.rc.Updated, Deactivated: d.rc.Deactivated, - VersionId: d.rc.VersionId, - Resources: resourceCollectionFiltered, + VersionId: d.rc.VersionId, + Resources: resourceCollectionFiltered, } return d.rd -} \ No newline at end of file +} diff --git a/services/queries/resources/resource_helpers.go b/services/queries/resources/resource_helpers.go index 10c81a19..478469ae 100644 --- a/services/queries/resources/resource_helpers.go +++ b/services/queries/resources/resource_helpers.go @@ -15,10 +15,10 @@ package resources // if len(resourceCollectionFiltered) == 0 { // return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) // } - + // resDeref.ContentStream = &types.DereferencedResourceListStruct{ // Resources: resourceCollectionFiltered, // } // return types.ResourceDereferencing{}, nil -// } \ No newline at end of file +// } diff --git a/services/queries/resources/resource_metadata_handler.go b/services/queries/resources/resource_metadata_handler.go index a5ea9ac7..069da5dc 100644 --- a/services/queries/resources/resource_metadata_handler.go +++ b/services/queries/resources/resource_metadata_handler.go @@ -1,10 +1,9 @@ package resources import ( - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceMetadataHandler struct { @@ -33,7 +32,7 @@ func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service ser // if resourceMetadata != "true" { // dereferencingResult, err := c.ResourceService.DereferenceResourceMetadata(service.GetDid(), .ResourceId, dr.RequestedContentType) // } - + // Call the next handler return d.Continue(c, service, response) } diff --git a/services/queries/resources/resource_name_handler.go b/services/queries/resources/resource_name_handler.go index b26a7721..3b4185c4 100644 --- a/services/queries/resources/resource_name_handler.go +++ b/services/queries/resources/resource_name_handler.go @@ -2,8 +2,8 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceNameHandler struct { @@ -29,7 +29,7 @@ func (d *ResourceNameHandler) Handle(c services.ResolverContext, service service if len(resourceCollectionFiltered) == 0 { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - + // Call the next handler return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) } diff --git a/services/queries/resources/resource_query_handler.go b/services/queries/resources/resource_query_handler.go index ad3312b9..6caf95ba 100644 --- a/services/queries/resources/resource_query_handler.go +++ b/services/queries/resources/resource_query_handler.go @@ -2,8 +2,8 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceQueryHandler struct { diff --git a/services/queries/resources/resource_type_handler.go b/services/queries/resources/resource_type_handler.go index 2aa8d301..cb5c8c60 100644 --- a/services/queries/resources/resource_type_handler.go +++ b/services/queries/resources/resource_type_handler.go @@ -2,8 +2,8 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" ) type ResourceTypeHandler struct { @@ -26,7 +26,7 @@ func (d *ResourceTypeHandler) Handle(c services.ResolverContext, service service if len(resourceCollectionFiltered) == 0 { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - + // Call the next handler return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) } diff --git a/services/queries/resources/resource_validation_handler.go b/services/queries/resources/resource_validation_handler.go index 7b729a42..a68d3ac8 100644 --- a/services/queries/resources/resource_validation_handler.go +++ b/services/queries/resources/resource_validation_handler.go @@ -12,7 +12,6 @@ type ResourceValidationHandler struct { } func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // Cast to just list of resources resourceCollection, err := d.CastToContent(service, response) if err != nil { diff --git a/tests/unit-tests/dereferencing_content_stream_test.go b/tests/unit-tests/dereferencing_content_stream_test.go index b50d3421..bce56edf 100644 --- a/tests/unit-tests/dereferencing_content_stream_test.go +++ b/tests/unit-tests/dereferencing_content_stream_test.go @@ -17,15 +17,15 @@ var _ = Describe("DereferencingContentStream Find before time", func() { _t2 := MustParseDate("2021-08-23T09:40:00Z") versionList = types.DereferencedResourceList{ { - Created: &_tcreated, + Created: &_tcreated, ResourceId: "1", }, { - Created: &_t1, + Created: &_t1, ResourceId: "2", }, { - Created: &_t2, + Created: &_t2, ResourceId: "3", }, } @@ -48,6 +48,5 @@ var _ = Describe("DereferencingContentStream Find before time", func() { It("should return empty string if no metadata found", func() { Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) }) - }) }) diff --git a/tests/unit-tests/dereferencing_metadata_test.go b/tests/unit-tests/dereferencing_metadata_test.go index d3e2eada..677eb963 100644 --- a/tests/unit-tests/dereferencing_metadata_test.go +++ b/tests/unit-tests/dereferencing_metadata_test.go @@ -48,7 +48,7 @@ var _ = Describe("DereferencingMetadata", func() { It("should return versionId of metadata with the first updated", func() { Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) }) - //Time after the latest update + It("should return versionId of metadata with the latest updated", func() { Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) }) @@ -56,6 +56,5 @@ var _ = Describe("DereferencingMetadata", func() { It("should return empty string if no metadata found", func() { Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) }) - }) }) diff --git a/tests/unit-tests/query_handlers_test.go b/tests/unit-tests/query_handlers_test.go index 83c5579d..81c05bc5 100644 --- a/tests/unit-tests/query_handlers_test.go +++ b/tests/unit-tests/query_handlers_test.go @@ -171,7 +171,7 @@ var _ = DescribeTable("Test Query handlers with service and relativeRef params", Expect(testCase.expectedError.Error()).To(Equal(err.Error())) } else { Expect(rec.Code).To(Equal(http.StatusSeeOther)) - Expect(string(testCase.expectedResolution.GetBytes())).To(Equal(rec.HeaderMap.Get("Location"))) + Expect(string(testCase.expectedResolution.GetBytes())).To(Equal(context.Response().Header().Get("Location"))) Expect(err).To(BeNil()) } }, diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index 2827f19f..28df7642 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -2,6 +2,7 @@ package types import ( "sort" + didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" "github.com/cheqd/did-resolver/utils" ) @@ -66,7 +67,7 @@ func (r ResourceDereferencing) IsRedirect() bool { type DidDocMetadataList []ResolutionDidDocMetadata func (dd DidDocMetadataList) Len() int { - return len(dd) + return len(dd) } // Sort in reverse order @@ -77,11 +78,11 @@ func (dd DidDocMetadataList) Less(i, j int) bool { if dd[j].Updated == nil { return true } - return dd[i].Updated.After(*dd[j].Updated) + return dd[i].Updated.After(*dd[j].Updated) } func (dd DidDocMetadataList) Swap(i, j int) { - dd[i], dd[j] = dd[j], dd[i] + dd[i], dd[j] = dd[j], dd[i] } type DereferencedDidVersionsList struct { @@ -112,11 +113,11 @@ func (e DereferencedDidVersionsList) FindBeforeTime(stime string) (string, error } // Firstly - sort versions by Updated time versions := e.Versions - sort.Sort(DidDocMetadataList(versions)) + sort.Sort(versions) for _, version := range versions { if version.Updated != nil && version.Updated.Before(search_time) { return version.VersionId, nil - } + } if version.Updated == nil && version.Created.Before(search_time) { return version.VersionId, nil } diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index 5350929c..1a22b725 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -129,7 +129,7 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { } // Firstly - sort versions by Updated time versions := e - sort.Sort(DereferencedResourceList(versions)) + sort.Sort(versions) if len(versions) == 0 { return "", nil } diff --git a/types/supported_queries.go b/types/supported_queries.go index 7e553f72..9a3da67a 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -29,14 +29,10 @@ func (s *SupportedQueriesT) IntersectWithUrlValues(values url.Values) []string { return result } -func (s *SupportedQueriesT) Plus (s2 SupportedQueriesT) SupportedQueriesT { +func (s *SupportedQueriesT) Plus(s2 SupportedQueriesT) SupportedQueriesT { var result SupportedQueriesT - for _, v := range *s { - result = append(result, v) - } - for _, v := range s2 { - result = append(result, v) - } + result = append(result, *s...) + result = append(result, s2...) return result } From 0a7793af8f20d6840d72a72df5225b0cd88a2280 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Sun, 9 Apr 2023 19:34:23 +0400 Subject: [PATCH 08/46] Makes linter happy --- services/diddoc/diddoc_query.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index abfb64f7..e5f0937b 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -80,7 +80,6 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) } func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { - stopHandler := queries.StopHandler{} // Create Chain of responsibility @@ -145,11 +144,9 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu return nil, err } return &relativeRefHandler, nil - } func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler queries.BaseQueryHandlerI, c services.ResolverContext) (queries.BaseQueryHandlerI, error) { - // Resource handlers resourceQueryHandler := resourceQueries.ResourceQueryHandler{} resourceIdHandler := resourceQueries.ResourceIdHandler{} @@ -213,7 +210,6 @@ func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler } return &resourceMetadataHandler, nil - } func (dd *QueryDIDDocRequestService) Query(c services.ResolverContext) error { From 7d07b7f73e3046fc862573bbcc1f3c8fd8a99dc5 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Mon, 10 Apr 2023 19:46:45 +0400 Subject: [PATCH 09/46] Small refactoring --- .../diddoc/diddoc_all_version_metadata.go | 2 +- services/diddoc/diddoc_fragment.go | 2 +- services/diddoc/diddoc_query.go | 32 ++++++++++---- services/diddoc/diddoc_version.go | 2 +- services/diddoc/diddoc_version_metadata.go | 4 +- ...y_handler.go => did_query_base_handler.go} | 0 ...r.go => did_query_relative_ref_handler.go} | 0 ...andler.go => did_query_service_handler.go} | 0 ...ler.go => did_query_version_id_handler.go} | 0 ...r.go => did_query_version_time_handler.go} | 0 .../resources/resource_metadata_handler.go | 38 ----------------- ...> resource_query_collection_id_handler.go} | 0 ...andler.go => resource_query_id_handler.go} | 0 .../resource_query_metadata_handler.go | 42 +++++++++++++++++++ ...dler.go => resource_query_name_handler.go} | 0 ...dler.go => resource_query_type_handler.go} | 0 ...r.go => resource_query_version_handler.go} | 3 ++ ...=> resource_query_version_time_handler.go} | 2 +- .../resources/resource_validation_handler.go | 2 +- services/request_service_base.go | 16 +++++-- .../resource_collection_dereferencing.go | 2 +- .../resource/resource_data_dereferencing.go | 9 ++-- .../resource_metadata_dereferencing.go | 4 +- 23 files changed, 94 insertions(+), 66 deletions(-) rename services/queries/diddoc/{did_query_handler.go => did_query_base_handler.go} (100%) rename services/queries/diddoc/{did_relative_ref_handler.go => did_query_relative_ref_handler.go} (100%) rename services/queries/diddoc/{did_service_handler.go => did_query_service_handler.go} (100%) rename services/queries/diddoc/{did_version_id_handler.go => did_query_version_id_handler.go} (100%) rename services/queries/diddoc/{did_version_time_handler.go => did_query_version_time_handler.go} (100%) delete mode 100644 services/queries/resources/resource_metadata_handler.go rename services/queries/resources/{resource_collection_id_handler.go => resource_query_collection_id_handler.go} (100%) rename services/queries/resources/{resource_id_handler.go => resource_query_id_handler.go} (100%) create mode 100644 services/queries/resources/resource_query_metadata_handler.go rename services/queries/resources/{resource_name_handler.go => resource_query_name_handler.go} (100%) rename services/queries/resources/{resource_type_handler.go => resource_query_type_handler.go} (100%) rename services/queries/resources/{resource_version_handler.go => resource_query_version_handler.go} (93%) rename services/queries/resources/{resource_version_time_handler.go => resource_query_version_time_handler.go} (90%) diff --git a/services/diddoc/diddoc_all_version_metadata.go b/services/diddoc/diddoc_all_version_metadata.go index 4da0ff85..37d22b8e 100644 --- a/services/diddoc/diddoc_all_version_metadata.go +++ b/services/diddoc/diddoc_all_version_metadata.go @@ -30,7 +30,7 @@ func (dd *DIDDocAllVersionMetadataRequestService) SpecificValidation(c services. } func (dd *DIDDocAllVersionMetadataRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.GetAllDidDocVersionsMetadata(dd.Did, dd.RequestedContentType) + result, err := c.DidDocService.GetAllDidDocVersionsMetadata(dd.Did, dd.GetContentType()) if err != nil { return err } diff --git a/services/diddoc/diddoc_fragment.go b/services/diddoc/diddoc_fragment.go index 3719bb54..ba06ffcc 100644 --- a/services/diddoc/diddoc_fragment.go +++ b/services/diddoc/diddoc_fragment.go @@ -29,7 +29,7 @@ func (dd *FragmentDIDDocRequestService) SpecificPrepare(c services.ResolverConte } func (dd *FragmentDIDDocRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.DereferenceSecondary(dd.Did, dd.Version, dd.Fragment, dd.RequestedContentType) + result, err := c.DidDocService.DereferenceSecondary(dd.Did, dd.Version, dd.Fragment, dd.GetContentType()) if err != nil { err.IsDereferencing = dd.IsDereferencing return err diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index e5f0937b..783f9cb4 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -26,12 +26,12 @@ func (dd *QueryDIDDocRequestService) Setup(c services.ResolverContext) error { func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverContext) error { _, err := url.QueryUnescape(dd.Did) if err != nil { - return types.NewInvalidDIDUrlError(dd.Did, dd.RequestedContentType, err, dd.IsDereferencing) + return types.NewInvalidDIDUrlError(dd.Did, dd.GetContentType(), err, dd.IsDereferencing) } diff := types.AllSupportedQueries.DiffWithUrlValues(dd.Queries) if len(diff) > 0 { - return types.NewRepresentationNotSupportedError("Queries from list: "+strings.Join(diff, ","), dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError("Queries from list: "+strings.Join(diff, ","), dd.GetContentType(), nil, dd.IsDereferencing) } versionId := dd.GetQueryParam(types.VersionId) @@ -41,24 +41,24 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte // Validation of query parameters if versionId != "" && versionTime != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } if versionTime != "" { _, err := utils.ParseFromStringTimeToGoTime(versionTime) if err != nil { - return types.NewRepresentationNotSupportedError(versionTime, dd.RequestedContentType, err, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(versionTime, dd.GetContentType(), err, dd.IsDereferencing) } } // Validate that versionId is UUID if versionId != "" && !utils.IsValidUUID(versionId) { - return types.NewInvalidDIDUrlError(versionId, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewInvalidDIDUrlError(versionId, dd.GetContentType(), nil, dd.IsDereferencing) } return nil @@ -71,7 +71,7 @@ func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) return err } if flag != nil { - return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } dd.Queries = queries @@ -218,14 +218,30 @@ func (dd *QueryDIDDocRequestService) Query(c services.ResolverContext) error { return err } if result == nil { - return types.NewRepresentationNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } return dd.SetResponse(result) } +func (dd *QueryDIDDocRequestService) IsResourceData(result types.ResolutionResultI) bool { + // If ContentStream is not DereferencedResourceData then it's not a resource data + _result, ok := result.(*types.ResourceDereferencing) + if !ok { + return false + } + _, ok = _result.ContentStream.(*types.DereferencedResourceData) + if !ok { + return false + } + return true +} + func (dd QueryDIDDocRequestService) Respond(c services.ResolverContext) error { if dd.Result.IsRedirect() { return c.Redirect(http.StatusSeeOther, string(dd.Result.GetBytes())) } + if dd.IsResourceData(dd.Result) { + return dd.RespondWithResourceData(c) + } return c.JSONPretty(http.StatusOK, dd.Result, " ") } diff --git a/services/diddoc/diddoc_version.go b/services/diddoc/diddoc_version.go index 10893f9a..f8ee186a 100644 --- a/services/diddoc/diddoc_version.go +++ b/services/diddoc/diddoc_version.go @@ -33,7 +33,7 @@ func (dd DIDDocVersionRequestService) Redirect(c services.ResolverContext) error func (dd *DIDDocVersionRequestService) SpecificValidation(c services.ResolverContext) error { if !utils.IsValidUUID(dd.Version) { - return types.NewInvalidDIDUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewInvalidDIDUrlError(dd.Version, dd.GetContentType(), nil, dd.IsDereferencing) } return nil } diff --git a/services/diddoc/diddoc_version_metadata.go b/services/diddoc/diddoc_version_metadata.go index a0bfdd19..714d891e 100644 --- a/services/diddoc/diddoc_version_metadata.go +++ b/services/diddoc/diddoc_version_metadata.go @@ -33,13 +33,13 @@ func (dd DIDDocVersionMetadataRequestService) Redirect(c services.ResolverContex func (dd *DIDDocVersionMetadataRequestService) SpecificValidation(c services.ResolverContext) error { if !utils.IsValidUUID(dd.Version) { - return types.NewInvalidDIDUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewInvalidDIDUrlError(dd.Version, dd.GetContentType(), nil, dd.IsDereferencing) } return nil } func (dd *DIDDocVersionMetadataRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.GetDIDDocVersionsMetadata(dd.Did, dd.Version, dd.RequestedContentType) + result, err := c.DidDocService.GetDIDDocVersionsMetadata(dd.Did, dd.Version, dd.GetContentType()) if err != nil { return err } diff --git a/services/queries/diddoc/did_query_handler.go b/services/queries/diddoc/did_query_base_handler.go similarity index 100% rename from services/queries/diddoc/did_query_handler.go rename to services/queries/diddoc/did_query_base_handler.go diff --git a/services/queries/diddoc/did_relative_ref_handler.go b/services/queries/diddoc/did_query_relative_ref_handler.go similarity index 100% rename from services/queries/diddoc/did_relative_ref_handler.go rename to services/queries/diddoc/did_query_relative_ref_handler.go diff --git a/services/queries/diddoc/did_service_handler.go b/services/queries/diddoc/did_query_service_handler.go similarity index 100% rename from services/queries/diddoc/did_service_handler.go rename to services/queries/diddoc/did_query_service_handler.go diff --git a/services/queries/diddoc/did_version_id_handler.go b/services/queries/diddoc/did_query_version_id_handler.go similarity index 100% rename from services/queries/diddoc/did_version_id_handler.go rename to services/queries/diddoc/did_query_version_id_handler.go diff --git a/services/queries/diddoc/did_version_time_handler.go b/services/queries/diddoc/did_query_version_time_handler.go similarity index 100% rename from services/queries/diddoc/did_version_time_handler.go rename to services/queries/diddoc/did_query_version_time_handler.go diff --git a/services/queries/resources/resource_metadata_handler.go b/services/queries/resources/resource_metadata_handler.go deleted file mode 100644 index 069da5dc..00000000 --- a/services/queries/resources/resource_metadata_handler.go +++ /dev/null @@ -1,38 +0,0 @@ -package resources - -import ( - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" - "github.com/cheqd/did-resolver/types" -) - -type ResourceMetadataHandler struct { - queries.BaseQueryHandler -} - -func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - resourceMetadata := service.GetQueryParam(types.ResourceMetadata) - if resourceMetadata == "" { - return d.Continue(c, service, response) - } - - // If response has type of ResourceDefereferencingResult, - // then we need to check if the resourceCollectionId is the same as the one in the response - // resDeref, ok := response.(*types.ResourceDereferencing) - // if !ok { - // return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) - // } - - // // Cast to DereferencedResourceListStruct for getting the list of metadatas - // resourceCollection, ok := resDeref.ContentStream.(*types.ResolutionDidDocMetadata) - // if !ok { - // return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: ContentStream is not of type ResolutionDidDocMetadata"), d.IsDereferencing) - // } - - // if resourceMetadata != "true" { - // dereferencingResult, err := c.ResourceService.DereferenceResourceMetadata(service.GetDid(), .ResourceId, dr.RequestedContentType) - // } - - // Call the next handler - return d.Continue(c, service, response) -} diff --git a/services/queries/resources/resource_collection_id_handler.go b/services/queries/resources/resource_query_collection_id_handler.go similarity index 100% rename from services/queries/resources/resource_collection_id_handler.go rename to services/queries/resources/resource_query_collection_id_handler.go diff --git a/services/queries/resources/resource_id_handler.go b/services/queries/resources/resource_query_id_handler.go similarity index 100% rename from services/queries/resources/resource_id_handler.go rename to services/queries/resources/resource_query_id_handler.go diff --git a/services/queries/resources/resource_query_metadata_handler.go b/services/queries/resources/resource_query_metadata_handler.go new file mode 100644 index 00000000..ae8a196d --- /dev/null +++ b/services/queries/resources/resource_query_metadata_handler.go @@ -0,0 +1,42 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/types" +) + +type ResourceMetadataHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceMetadata := service.GetQueryParam(types.ResourceMetadata) + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + + // After all filters and validation only one resource should be left + resource := resourceCollection.Resources[0] + + if resourceMetadata == "true" { + dereferencingResult, err := c.ResourceService.DereferenceResourceMetadata(service.GetDid(), resource.ResourceId, service.GetContentType()) + if err != nil { + return nil, err + } + return d.Continue(c, service, dereferencingResult) + } + // var dereferenceResult types.ResolutionResultI + dereferenceResult, _err := c.ResourceService.DereferenceResourceData(service.GetDid(), resource.ResourceId, service.GetContentType()) + // _err = _err.(*types.IdentityError) + if _err != nil { + return nil, _err + } + + // Call the next handler + return d.Continue(c, service, dereferenceResult) +} diff --git a/services/queries/resources/resource_name_handler.go b/services/queries/resources/resource_query_name_handler.go similarity index 100% rename from services/queries/resources/resource_name_handler.go rename to services/queries/resources/resource_query_name_handler.go diff --git a/services/queries/resources/resource_type_handler.go b/services/queries/resources/resource_query_type_handler.go similarity index 100% rename from services/queries/resources/resource_type_handler.go rename to services/queries/resources/resource_query_type_handler.go diff --git a/services/queries/resources/resource_version_handler.go b/services/queries/resources/resource_query_version_handler.go similarity index 93% rename from services/queries/resources/resource_version_handler.go rename to services/queries/resources/resource_query_version_handler.go index 19c696f2..1dfdb56e 100644 --- a/services/queries/resources/resource_version_handler.go +++ b/services/queries/resources/resource_query_version_handler.go @@ -13,6 +13,9 @@ type ResourceVersionHandler struct { func (d *ResourceVersionHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { resourceVersion := service.GetQueryParam(types.ResourceVersion) + if resourceVersion == "" { + return d.Continue(c, service, response) + } // Cast to just list of resources resourceCollection, err := d.CastToContent(service, response) diff --git a/services/queries/resources/resource_version_time_handler.go b/services/queries/resources/resource_query_version_time_handler.go similarity index 90% rename from services/queries/resources/resource_version_time_handler.go rename to services/queries/resources/resource_query_version_time_handler.go index 0022b6d4..df4fde1b 100644 --- a/services/queries/resources/resource_version_time_handler.go +++ b/services/queries/resources/resource_query_version_time_handler.go @@ -25,7 +25,7 @@ func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service // Get resourceId of the resource with the closest time to the requested time resourceId, err := resourceCollection.Resources.FindBeforeTime(resourceVersionTime) if err != nil { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + return nil, types.NewRepresentationNotSupportedError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } if resourceId == "" { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) diff --git a/services/queries/resources/resource_validation_handler.go b/services/queries/resources/resource_validation_handler.go index a68d3ac8..be1f9d22 100644 --- a/services/queries/resources/resource_validation_handler.go +++ b/services/queries/resources/resource_validation_handler.go @@ -18,7 +18,7 @@ func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service s return nil, err } - if len(resourceCollection.Resources) == 0 { + if len(resourceCollection.Resources) != 1 { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } diff --git a/services/request_service_base.go b/services/request_service_base.go index a63fef50..7bcbce02 100644 --- a/services/request_service_base.go +++ b/services/request_service_base.go @@ -46,7 +46,7 @@ func (dd *BaseRequestService) BasicPrepare(c ResolverContext) error { // Get Accept header dd.RequestedContentType = GetContentType(c.Request().Header.Get(echo.HeaderAccept)) - if !dd.RequestedContentType.IsSupported() { + if !dd.GetContentType().IsSupported() { return types.NewRepresentationNotSupportedError(dd.Did, types.JSON, nil, dd.IsDereferencing) } @@ -66,12 +66,12 @@ func (dd *BaseRequestService) BasicPrepare(c ResolverContext) error { func (dd BaseRequestService) BasicValidation(c ResolverContext) error { didMethod, _, _, _ := utils.TrySplitDID(dd.Did) if didMethod != types.DID_METHOD { - return types.NewMethodNotSupportedError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewMethodNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } err := utils.ValidateDID(dd.Did, "", c.LedgerService.GetNamespaces()) if err != nil { - return types.NewInvalidDIDError(dd.Did, dd.RequestedContentType, nil, dd.IsDereferencing) + return types.NewInvalidDIDError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } return nil @@ -97,7 +97,7 @@ func (dd BaseRequestService) Redirect(c ResolverContext) error { } func (dd *BaseRequestService) Query(c ResolverContext) error { - result, err := c.DidDocService.Resolve(dd.Did, dd.Version, dd.RequestedContentType) + result, err := c.DidDocService.Resolve(dd.Did, dd.Version, dd.GetContentType()) if err != nil { err.IsDereferencing = false return err @@ -123,3 +123,11 @@ func (dd *BaseRequestService) SetResponse(response types.ResolutionResultI) erro dd.Result = response return nil } + +// Helpers + +func (dd *BaseRequestService) RespondWithResourceData(c ResolverContext) error { + c.Response().Header().Set(echo.HeaderContentType, dd.Result.GetContentType()) + + return c.Blob(http.StatusOK, dd.Result.GetContentType(), dd.Result.GetBytes()) +} diff --git a/services/resource/resource_collection_dereferencing.go b/services/resource/resource_collection_dereferencing.go index 9cd2c953..8eca4f53 100644 --- a/services/resource/resource_collection_dereferencing.go +++ b/services/resource/resource_collection_dereferencing.go @@ -34,7 +34,7 @@ func (dr *ResourceCollectionDereferencingService) SpecificValidation(c services. } func (dr *ResourceCollectionDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceCollectionResources(dr.Did, dr.RequestedContentType) + result, err := c.ResourceService.DereferenceCollectionResources(dr.Did, dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err diff --git a/services/resource/resource_data_dereferencing.go b/services/resource/resource_data_dereferencing.go index 6a011288..97acd32f 100644 --- a/services/resource/resource_data_dereferencing.go +++ b/services/resource/resource_data_dereferencing.go @@ -7,7 +7,6 @@ import ( "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/utils" - "github.com/labstack/echo/v4" ) type ResourceDataDereferencingService struct { @@ -34,13 +33,13 @@ func (dr ResourceDataDereferencingService) Redirect(c services.ResolverContext) func (dr *ResourceDataDereferencingService) SpecificValidation(c services.ResolverContext) error { if !utils.IsValidUUID(dr.ResourceId) { - return types.NewInvalidDIDUrlError(dr.ResourceId, dr.RequestedContentType, nil, dr.IsDereferencing) + return types.NewInvalidDIDUrlError(dr.ResourceId, dr.GetContentType(), nil, dr.IsDereferencing) } return nil } func (dr *ResourceDataDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceResourceData(dr.Did, dr.ResourceId, dr.RequestedContentType) + result, err := c.ResourceService.DereferenceResourceData(dr.Did, dr.ResourceId, dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err @@ -49,7 +48,5 @@ func (dr *ResourceDataDereferencingService) Query(c services.ResolverContext) er } func (dr ResourceDataDereferencingService) Respond(c services.ResolverContext) error { - c.Response().Header().Set(echo.HeaderContentType, dr.Result.GetContentType()) - - return c.Blob(http.StatusOK, dr.Result.GetContentType(), dr.Result.GetBytes()) + return dr.RespondWithResourceData(c) } diff --git a/services/resource/resource_metadata_dereferencing.go b/services/resource/resource_metadata_dereferencing.go index 5232c544..b1812214 100644 --- a/services/resource/resource_metadata_dereferencing.go +++ b/services/resource/resource_metadata_dereferencing.go @@ -33,13 +33,13 @@ func (dr ResourceMetadataDereferencingService) Redirect(c services.ResolverConte func (dr *ResourceMetadataDereferencingService) SpecificValidation(c services.ResolverContext) error { if !utils.IsValidUUID(dr.ResourceId) { - return types.NewInvalidDIDUrlError(dr.ResourceId, dr.RequestedContentType, nil, dr.IsDereferencing) + return types.NewInvalidDIDUrlError(dr.ResourceId, dr.GetContentType(), nil, dr.IsDereferencing) } return nil } func (dr *ResourceMetadataDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceResourceMetadata(dr.Did, dr.ResourceId, dr.RequestedContentType) + result, err := c.ResourceService.DereferenceResourceMetadata(dr.Did, dr.ResourceId, dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err From 94385c641872f29b268ae30c060126da295155a5 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Wed, 12 Apr 2023 11:52:28 +0400 Subject: [PATCH 10/46] Fix unit tests for queries --- services/diddoc/diddoc_query.go | 36 ++- tests/constants/common.go | 9 +- tests/constants/constants.go | 17 +- .../diddoc/query/positive_resource_test.go | 212 ++++++++++++++++++ .../rest/diddoc/query/query_suite_test.go | 15 ++ .../dereferencing_content_stream_test.go | 19 +- .../common}/dereferencing_metadata_test.go | 19 +- .../common}/supported_queries_test.go | 4 +- ...ll_did_doc_versions_ledger_service_test.go | 1 + .../request}/query_handlers_test.go | 148 ++++++------ ...e_dereference_collection_resources_test.go | 2 +- ...vice_dereference_resource_metadata_test.go | 8 +- tests/unit/test_utils.go | 2 + 13 files changed, 378 insertions(+), 114 deletions(-) create mode 100644 tests/integration/rest/diddoc/query/positive_resource_test.go create mode 100644 tests/integration/rest/diddoc/query/query_suite_test.go rename tests/unit/{ => diddoc/common}/dereferencing_content_stream_test.go (57%) rename tests/unit/{ => diddoc/common}/dereferencing_metadata_test.go (62%) rename tests/unit/{ => diddoc/common}/supported_queries_test.go (96%) rename tests/unit/{ => diddoc/request}/query_handlers_test.go (56%) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 795da12f..7e7b07c0 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -38,6 +38,8 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte versionTime := dd.GetQueryParam(types.VersionTime) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) + resourceId := dd.GetQueryParam(types.ResourceId) + resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) // Validation of query parameters if versionId != "" && versionTime != "" { @@ -49,6 +51,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } + // Validate time format if versionTime != "" { _, err := utils.ParseFromStringTimeToGoTime(versionTime) if err != nil { @@ -56,9 +59,22 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte } } + // Validate time format + if resourceVersionTime != "" { + _, err := utils.ParseFromStringTimeToGoTime(resourceVersionTime) + if err != nil { + return types.NewRepresentationNotSupportedError(resourceVersionTime, dd.GetContentType(), err, dd.IsDereferencing) + } + } + // Validate that versionId is UUID - if !utils.IsValidUUID(dd.Version) { - return types.NewInvalidDidUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) + if versionId != "" && !utils.IsValidUUID(versionId) { + return types.NewInvalidDidUrlError(versionId, dd.RequestedContentType, nil, dd.IsDereferencing) + } + + // Validate that resourceId is UUID + if resourceId != "" && !utils.IsValidUUID(resourceId) { + return types.NewInvalidDidUrlError(resourceId, dd.RequestedContentType, nil, dd.IsDereferencing) } return nil @@ -171,35 +187,35 @@ func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler // Resource handlers // Chain would be: - // resourceIdHandler -> resourceVersionTimeHandler -> resourceCollectionIdHandler -> + // resourceIdHandler -> resourceCollectionIdHandler -> // -> resourceNameHandler -> resourceTypeHandler -> resourceVersionHandler -> - // -> resourceValidationHandler -> resourceMetadataHandler -> stopHandler - err = resourceIdHandler.SetNext(c, &resourceVersionTimeHandler) + // -> resourceVersionTimeHandler -> resourceValidationHandler -> resourceMetadataHandler -> stopHandler + err = resourceIdHandler.SetNext(c, &resourceCollectionIdHandler) if err != nil { return nil, err } - err = resourceVersionTimeHandler.SetNext(c, &resourceCollectionIdHandler) + err = resourceCollectionIdHandler.SetNext(c, &resourceNameHandler) if err != nil { return nil, err } - err = resourceCollectionIdHandler.SetNext(c, &resourceNameHandler) + err = resourceNameHandler.SetNext(c, &resourceTypeHandler) if err != nil { return nil, err } - err = resourceNameHandler.SetNext(c, &resourceTypeHandler) + err = resourceTypeHandler.SetNext(c, &resourceVersionHandler) if err != nil { return nil, err } - err = resourceTypeHandler.SetNext(c, &resourceVersionHandler) + err = resourceVersionHandler.SetNext(c, &resourceVersionTimeHandler) if err != nil { return nil, err } - err = resourceVersionHandler.SetNext(c, &resourceValidationHandler) + err = resourceVersionTimeHandler.SetNext(c, &resourceValidationHandler) if err != nil { return nil, err } diff --git a/tests/constants/common.go b/tests/constants/common.go index ea939cc7..86eb6f22 100644 --- a/tests/constants/common.go +++ b/tests/constants/common.go @@ -6,6 +6,7 @@ import ( didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" + "google.golang.org/protobuf/types/known/timestamppb" ) func generateVerificationMethod() didTypes.VerificationMethod { @@ -19,7 +20,7 @@ func generateVerificationMethod() didTypes.VerificationMethod { func generateService() didTypes.Service { return didTypes.Service{ - Id: ExistentDid + "#service-1", + Id: ExistentDid + "#" + ValidServiceId, ServiceType: "DIDCommMessaging", ServiceEndpoint: []string{"http://example.com"}, } @@ -55,7 +56,11 @@ func generateResource() resourceTypes.ResourceWithMetadata { } func generateMetadata() didTypes.Metadata { - return didTypes.Metadata{VersionId: "test_version_id", Deactivated: false} + return didTypes.Metadata{ + VersionId: ValidVersionId, + Deactivated: false, + Created: timestamppb.New(ValidCreated), + } } func generateChecksum(data []byte) string { diff --git a/tests/constants/constants.go b/tests/constants/constants.go index d36e9a75..bc3ba9f3 100644 --- a/tests/constants/constants.go +++ b/tests/constants/constants.go @@ -2,6 +2,7 @@ package testconstants import ( "fmt" + "time" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" "github.com/cheqd/did-resolver/types" @@ -58,7 +59,8 @@ var ( ValidMainnetNamespace = "mainnet" ValidTestnetNamespace = "testnet" ValidIdentifier = "fb53dd05-329b-4614-a3f2-c0a8c7554ee3" - ValidVersionId = "valid_version_id" + ValidVersionId = "32e0613e-bee4-4ea4-952c-bba3e857fa2a" + ValidServiceId = "service-1" ValidPubKeyJWK = "{" + "\"crv\":\"Ed25519\"," + "\"kid\":\"_Qq0UL2Fq651Q0Fjd6TvnYE-faHiOpRlPVQcY_-tA4A\"," + @@ -106,6 +108,8 @@ var ( InvalidMethod = "invalid_method" InvalidNamespace = "invalid_namespace" InvalidIdentifier = "invalid_identifier" + InvalidVersionId = "invalid_uuid_identifier" + InvalidServiceId = "not_found_service_id" ) var ( @@ -119,7 +123,13 @@ var ( Seconds: 123456789, Nanos: 0, } - NotEmptyTime = NotEmptyTimestamp.AsTime() + NotEmptyTime = NotEmptyTimestamp.AsTime() + ValidCreated, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:00Z") + CreatedAfter, _ = time.Parse(time.RFC3339, "2021-08-23T09:00:01Z") + CreatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T08:00:00Z") + ValidUpdated, _ = time.Parse(time.RFC3339, "2021-08-23T09:30:00Z") + UpdatedAfter, _ = time.Parse(time.RFC3339, "2021-08-23T09:30:01Z") + UpdatedBefore, _ = time.Parse(time.RFC3339, "2021-08-23T09:20:00Z") ) var ( @@ -131,7 +141,8 @@ var ( ValidDIDDocResolution = types.NewDidDoc(&ValidDIDDoc) ValidFragmentMetadata = types.NewResolutionDidDocMetadata(ExistentDid, &ValidMetadata, []*resourceTypes.Metadata{}) ValidResourceDereferencing = types.DereferencedResourceData(ValidResource.Resource.Data) - ValidDereferencedResourceList = types.NewDereferencedResourceList(ExistentDid, []*resourceTypes.Metadata{ValidResource.Metadata}) + ValidDereferencedResourceList = types.NewDereferencedResourceListStruct(ExistentDid, []*resourceTypes.Metadata{ValidResource.Metadata}) + ValidDid = ValidDIDDoc.Id ) var DIDStructure = "did:%s:%s:%s" diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go new file mode 100644 index 00000000..ce3d83ef --- /dev/null +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -0,0 +1,212 @@ +// go:build integration + +package query + +import ( + "encoding/json" + "fmt" + "net/http" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + "github.com/cheqd/did-resolver/types" + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = DescribeTable("Positive: Get Resource by resourceId", func(testCase utils.PositiveTestCase) { + client := resty.New() + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + SetHeader("Accept-Encoding", testCase.EncodingType). + Get(testCase.DidURL) + Expect(err).To(BeNil()) + + var receivedDidDereferencing utils.DereferencingResult + Expect(json.Unmarshal(resp.Body(), &receivedDidDereferencing)).To(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + var expectedDidDereferencing utils.DereferencingResult + Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidDereferencing)).To(BeNil()) + + Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) + utils.AssertDidDereferencing(expectedDidDereferencing, receivedDidDereferencing) +}, + + Entry( + "can get DIDDoc version metadata with an existent 22 bytes INDY style mainnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.IndyStyleMainnetDid, + testconstants.IndyStyleMainnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_mainnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent 22 bytes INDY style testnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.IndyStyleTestnetDid, + testconstants.IndyStyleTestnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent UUID style mainnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleMainnetDid, + testconstants.UUIDStyleMainnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent UUID style testnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent old 16 characters Indy style testnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.OldIndy16CharStyleTestnetDid, + "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6", + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_16_indy_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent old 32 characters Indy style testnet DID and versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.OldIndy32CharStyleTestnetDid, + "1dc202d4-26ee-54a9-b091-8d2e1f609722", + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSON resolution type", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: string(types.DIDJSON), + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_did_json.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSONLD resolution type", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: string(types.DIDJSONLD), + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent DID and versionId, and supported JSONLD resolution type", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: string(types.JSONLD), + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent DID and versionId, and supported gzip encoding type", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: "gzip", + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + + Entry( + "can get DIDDoc version metadata with an existent DID and versionId, and not supported encoding type", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + testconstants.UUIDStyleTestnetDid, + testconstants.UUIDStyleTestnetDidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.NotSupportedEncodingType, + ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedStatusCode: http.StatusOK, + }, + ), +) diff --git a/tests/integration/rest/diddoc/query/query_suite_test.go b/tests/integration/rest/diddoc/query/query_suite_test.go new file mode 100644 index 00000000..8f673f46 --- /dev/null +++ b/tests/integration/rest/diddoc/query/query_suite_test.go @@ -0,0 +1,15 @@ +//go:build integration + +package query_test + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestQuery(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Query Suite") +} diff --git a/tests/unit/dereferencing_content_stream_test.go b/tests/unit/diddoc/common/dereferencing_content_stream_test.go similarity index 57% rename from tests/unit/dereferencing_content_stream_test.go rename to tests/unit/diddoc/common/dereferencing_content_stream_test.go index bce56edf..d1c5adcf 100644 --- a/tests/unit/dereferencing_content_stream_test.go +++ b/tests/unit/diddoc/common/dereferencing_content_stream_test.go @@ -1,4 +1,6 @@ -package tests +//go:build unit + +package common import ( "time" @@ -6,15 +8,16 @@ import ( "github.com/cheqd/did-resolver/types" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + utils "github.com/cheqd/did-resolver/tests/unit" ) var _ = Describe("DereferencingContentStream Find before time", func() { var versionList types.DereferencedResourceList BeforeEach(func() { - _tcreated := MustParseDate("2021-08-23T09:00:00Z") - _t1 := MustParseDate("2021-08-23T09:30:00Z") - _t2 := MustParseDate("2021-08-23T09:40:00Z") + _tcreated :=utils.MustParseDate("2021-08-23T09:00:00Z") + _t1 := utils.MustParseDate("2021-08-23T09:30:00Z") + _t2 := utils.MustParseDate("2021-08-23T09:40:00Z") versionList = types.DereferencedResourceList{ { Created: &_tcreated, @@ -34,19 +37,19 @@ var _ = Describe("DereferencingContentStream Find before time", func() { Context("FindBeforeTime", func() { // Should return the first resource It("should return resourceId of the first resource", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) }) // Should return the second resource It("should return resourceId of the second resource", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) }) // Should return the latest resource It("should return resourceId of the latest resource", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) }) // Time before the creation It("should return empty string if no metadata found", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) }) }) }) diff --git a/tests/unit/dereferencing_metadata_test.go b/tests/unit/diddoc/common/dereferencing_metadata_test.go similarity index 62% rename from tests/unit/dereferencing_metadata_test.go rename to tests/unit/diddoc/common/dereferencing_metadata_test.go index 677eb963..c32f00a1 100644 --- a/tests/unit/dereferencing_metadata_test.go +++ b/tests/unit/diddoc/common/dereferencing_metadata_test.go @@ -1,9 +1,12 @@ -package tests +//go:build unit + +package common import ( "time" "github.com/cheqd/did-resolver/types" + utils "github.com/cheqd/did-resolver/tests/unit" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) @@ -12,9 +15,9 @@ var _ = Describe("DereferencingMetadata", func() { var versionList types.DereferencedDidVersionsList BeforeEach(func() { - _tcreated := MustParseDate("2021-08-23T09:00:00Z") - _t1 := MustParseDate("2021-08-23T09:30:00Z") - _t2 := MustParseDate("2021-08-23T09:40:00Z") + _tcreated := utils.MustParseDate("2021-08-23T09:00:00Z") + _t1 := utils.MustParseDate("2021-08-23T09:30:00Z") + _t2 := utils.MustParseDate("2021-08-23T09:40:00Z") versionList = types.DereferencedDidVersionsList{ Versions: []types.ResolutionDidDocMetadata{ { @@ -42,19 +45,19 @@ var _ = Describe("DereferencingMetadata", func() { Context("FindBeforeTime", func() { // Time right after creation but before first update It("should return versionId of metadata with created", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) }) // Time after first update but the the latest It("should return versionId of metadata with the first updated", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) }) It("should return versionId of metadata with the latest updated", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) }) // Time before the creation It("should return empty string if no metadata found", func() { - Expect(versionList.FindBeforeTime(MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) + Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) }) }) }) diff --git a/tests/unit/supported_queries_test.go b/tests/unit/diddoc/common/supported_queries_test.go similarity index 96% rename from tests/unit/supported_queries_test.go rename to tests/unit/diddoc/common/supported_queries_test.go index d4a9198d..fc4154a2 100644 --- a/tests/unit/supported_queries_test.go +++ b/tests/unit/diddoc/common/supported_queries_test.go @@ -1,4 +1,6 @@ -package tests +//go:build unit + +package common import ( "github.com/cheqd/did-resolver/types" diff --git a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go index fe8ae9b4..2d3cfe90 100644 --- a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go +++ b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go @@ -35,6 +35,7 @@ var _ = DescribeTable("Test QueryAllDidDocVersionsMetadata method", func(testCas expectedDidDocVersions: &types.DereferencedDidVersionsList{ Versions: []types.ResolutionDidDocMetadata{ { + Created: &testconstants.ValidCreated, VersionId: testconstants.ValidMetadata.VersionId, }, }, diff --git a/tests/unit/query_handlers_test.go b/tests/unit/diddoc/request/query_handlers_test.go similarity index 56% rename from tests/unit/query_handlers_test.go rename to tests/unit/diddoc/request/query_handlers_test.go index 81c05bc5..a7abe852 100644 --- a/tests/unit/query_handlers_test.go +++ b/tests/unit/diddoc/request/query_handlers_test.go @@ -1,4 +1,6 @@ -package tests +//go:build unit + +package request import ( "encoding/json" @@ -12,6 +14,8 @@ import ( resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" didDocService "github.com/cheqd/did-resolver/services/diddoc" + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/unit" "github.com/cheqd/did-resolver/types" ) @@ -24,7 +28,7 @@ type queriesDIDDocTestCase struct { var _ = DescribeTable("Test Query handlers with versionId and versionTime params", func(testCase queriesDIDDocTestCase) { request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) - context, rec := setupEmptyContext(request, testCase.resolutionType, mockLedgerService) + context, rec := utils.SetupEmptyContext(request, testCase.resolutionType, utils.MockLedger) expectedDIDResolution := testCase.expectedResolution.(*types.DidResolution) if (testCase.resolutionType == "" || testCase.resolutionType == types.DIDJSONLD) && testCase.expectedError == nil { @@ -33,7 +37,7 @@ var _ = DescribeTable("Test Query handlers with versionId and versionTime params expectedDIDResolution.Did.Context = nil } - expectedContentType := defineContentType(expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) + expectedContentType := utils.DefineContentType(expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) err := didDocService.DidDocEchoHandler(context) if testCase.expectedError != nil { @@ -55,20 +59,20 @@ var _ = DescribeTable("Test Query handlers with versionId and versionTime params Entry( "Positive. VersionId case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", ValidDid, ValidVersionId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", testconstants.ValidDid, testconstants.ValidVersionId), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ - DidString: ValidDid, - MethodSpecificId: ValidIdentifier, - Method: ValidMethod, + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, }, }, - Did: &validDIDDocResolution, + Did: &testconstants.ValidDIDDocResolution, Metadata: types.NewResolutionDidDocMetadata( - ValidDid, &validMetadata, - []*resourceTypes.Metadata{validResource.Metadata}, + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), }, expectedError: nil, @@ -77,20 +81,20 @@ var _ = DescribeTable("Test Query handlers with versionId and versionTime params Entry( "Positive. VersionTime case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", ValidDid, CreatedAfter.Format(time.RFC3339)), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", testconstants.ValidDid, testconstants.CreatedAfter.Format(time.RFC3339)), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ - DidString: ValidDid, - MethodSpecificId: ValidIdentifier, - Method: ValidMethod, + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, }, }, - Did: &validDIDDocResolution, + Did: &testconstants.ValidDIDDocResolution, Metadata: types.NewResolutionDidDocMetadata( - ValidDid, &validMetadata, - []*resourceTypes.Metadata{validResource.Metadata}, + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), }, expectedError: nil, @@ -100,71 +104,61 @@ var _ = DescribeTable("Test Query handlers with versionId and versionTime params Entry( "Negative VersionId case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", ValidDid, InvalidVersionId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s", testconstants.ValidDid, testconstants.InvalidVersionId), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ - DidString: ValidDid, - MethodSpecificId: ValidIdentifier, - Method: ValidMethod, + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, }, }, - Did: &validDIDDocResolution, + Did: &testconstants.ValidDIDDocResolution, Metadata: types.NewResolutionDidDocMetadata( - ValidDid, &validMetadata, - []*resourceTypes.Metadata{validResource.Metadata}, + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), }, - expectedError: types.NewInvalidDIDUrlError(InvalidVersionId, types.DIDJSONLD, nil, true), + expectedError: types.NewInvalidDidUrlError(testconstants.InvalidVersionId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. VersionTime before created", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", ValidDid, CreatedBefore.Format(time.RFC3339)), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s", testconstants.ValidDid, testconstants.CreatedBefore.Format(time.RFC3339)), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{ ResolutionMetadata: types.ResolutionMetadata{ DidProperties: types.DidProperties{ - DidString: ValidDid, - MethodSpecificId: ValidIdentifier, - Method: ValidMethod, + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, }, }, - Did: &validDIDDocResolution, + Did: &testconstants.ValidDIDDocResolution, Metadata: types.NewResolutionDidDocMetadata( - ValidDid, &validMetadata, - []*resourceTypes.Metadata{validResource.Metadata}, + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), }, - expectedError: types.NewNotFoundError(InvalidVersionId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidVersionId, types.DIDJSONLD, nil, true), + }, + ), + Entry( + "Negative. Query parameter is not supported", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf("/1.0/identifiers/%s?unsupportedQuery=%s", testconstants.ValidDid, "blabla"), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError(testconstants.ValidDid, types.DIDJSONLD, nil, true), }, ), - // Entry( - // "Negative. Query parameter is not supported", - // queriesDIDDocTestCase{ - // didURL: fmt.Sprintf("/1.0/identifiers/%s?unsupportedQuery=%s", ValidDid, "blabla"), - // resolutionType: types.DIDJSONLD, - // expectedResolution: &DereferencingResult{ - // DereferencingMetadata: &types.DereferencingMetadata{ - // DidProperties: types.DidProperties{ - // DidString: NotExistDID, - // MethodSpecificId: NotExistIdentifier, - // Method: ValidMethod, - // }, - // }, - // ContentStream: nil, - // Metadata: &types.ResolutionDidDocMetadata{}, - // }, - // expectedError: types.NewRepresentationNotSupportedError(ValidDid, types.DIDJSONLD, nil, true), - // }, - // ), ) var _ = DescribeTable("Test Query handlers with service and relativeRef params", func(testCase queriesDIDDocTestCase) { request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) - context, rec := setupEmptyContext(request, testCase.resolutionType, mockLedgerService) + context, rec := utils.SetupEmptyContext(request, testCase.resolutionType, utils.MockLedger) err := didDocService.DidDocEchoHandler(context) if testCase.expectedError != nil { @@ -180,54 +174,54 @@ var _ = DescribeTable("Test Query handlers with service and relativeRef params", Entry( "Positive. Service case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", ValidDid, ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", testconstants.ValidDid, testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0]), expectedError: nil, }, ), Entry( "Positive. relativeRef case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", ValidDid, ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", testconstants.ValidDid, testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0] + "foo"), expectedError: nil, }, ), Entry( "Positive. VersionId + Service case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", ValidDid, ValidVersionId, ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", testconstants.ValidDid, testconstants.ValidVersionId, testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0]), expectedError: nil, }, ), Entry( "Positive. VersionId + Service case + relativeRef", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s&relativeRef=foo", ValidDid, ValidVersionId, ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s&relativeRef=foo", testconstants.ValidDid, testconstants.ValidVersionId, testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0] + "foo"), expectedError: nil, }, ), Entry( "Positive. VersionTime + Service case", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", ValidDid, CreatedAfter.Format(time.RFC3339), ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", testconstants.ValidDid, testconstants.CreatedAfter.Format(time.RFC3339), testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0]), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0]), expectedError: nil, }, ), Entry( "Positive. VersionTime + Service case + relativeRef", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s&relativeRef=foo", ValidDid, CreatedAfter.Format(time.RFC3339), ValidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s&relativeRef=foo", testconstants.ValidDid, testconstants.CreatedAfter.Format(time.RFC3339), testconstants.ValidServiceId), resolutionType: types.DIDJSONLD, - expectedResolution: types.NewServiceResult(validService.ServiceEndpoint[0] + "foo"), + expectedResolution: types.NewServiceResult(testconstants.ValidService.ServiceEndpoint[0] + "foo"), expectedError: nil, }, ), @@ -236,55 +230,55 @@ var _ = DescribeTable("Test Query handlers with service and relativeRef params", Entry( "Negative. Service not found", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", ValidDid, InvalidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s", testconstants.ValidDid, testconstants.InvalidServiceId), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. Service not found + relativeRef", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", ValidDid, InvalidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo", testconstants.ValidDid, testconstants.InvalidServiceId), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. Service not found + versionId", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", ValidDid, ValidVersionId, InvalidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionId=%s&service=%s", testconstants.ValidDid, testconstants.ValidVersionId, testconstants.InvalidServiceId), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. Service not found + versionId + relativeRef", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s", ValidDid, InvalidServiceId, ValidVersionId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s", testconstants.ValidDid, testconstants.InvalidServiceId, testconstants.ValidVersionId), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. Service not found + versionTime", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", ValidDid, CreatedAfter.Format(time.RFC3339), InvalidServiceId), + didURL: fmt.Sprintf("/1.0/identifiers/%s?versionTime=%s&service=%s", testconstants.ValidDid, testconstants.CreatedAfter.Format(time.RFC3339), testconstants.InvalidServiceId), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), Entry( "Negative. Service not found + versionTime + relativeRef", queriesDIDDocTestCase{ - didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionTime=%s", ValidDid, InvalidServiceId, CreatedAfter.Format(time.RFC3339)), + didURL: fmt.Sprintf("/1.0/identifiers/%s?service=%s&relativeRef=foo&versionTime=%s", testconstants.ValidDid, testconstants.InvalidServiceId, testconstants.CreatedAfter.Format(time.RFC3339)), resolutionType: types.DIDJSONLD, expectedResolution: nil, - expectedError: types.NewNotFoundError(InvalidServiceId, types.DIDJSONLD, nil, true), + expectedError: types.NewNotFoundError(testconstants.InvalidServiceId, types.DIDJSONLD, nil, true), }, ), ) diff --git a/tests/unit/resource/request/request_service_dereference_collection_resources_test.go b/tests/unit/resource/request/request_service_dereference_collection_resources_test.go index 64a20223..2904bbcf 100644 --- a/tests/unit/resource/request/request_service_dereference_collection_resources_test.go +++ b/tests/unit/resource/request/request_service_dereference_collection_resources_test.go @@ -66,7 +66,7 @@ var _ = DescribeTable("Test ResourceCollectionEchoHandler function", func(testCa Method: testconstants.ValidMethod, }, }, - ContentStream: types.NewDereferencedResourceList( + ContentStream: types.NewDereferencedResourceListStruct( testconstants.ExistentDid, []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), diff --git a/tests/unit/resource/request/request_service_dereference_resource_metadata_test.go b/tests/unit/resource/request/request_service_dereference_resource_metadata_test.go index a2490010..76de74eb 100644 --- a/tests/unit/resource/request/request_service_dereference_resource_metadata_test.go +++ b/tests/unit/resource/request/request_service_dereference_resource_metadata_test.go @@ -20,9 +20,9 @@ import ( ) type DereferencingResult struct { - DereferencingMetadata *types.DereferencingMetadata `json:"dereferencingMetadata"` - ContentStream *types.DereferencedResourceList `json:"contentStream"` - Metadata *types.ResolutionDidDocMetadata `json:"contentMetadata"` + DereferencingMetadata *types.DereferencingMetadata `json:"dereferencingMetadata"` + ContentStream *types.DereferencedResourceListStruct `json:"contentStream"` + Metadata *types.ResolutionDidDocMetadata `json:"contentMetadata"` } type resourceMetadataTestCase struct { @@ -75,7 +75,7 @@ var _ = DescribeTable("Test ResourceMetadataEchoHandler function", func(testCase Method: testconstants.ValidMethod, }, }, - ContentStream: types.NewDereferencedResourceList( + ContentStream: types.NewDereferencedResourceListStruct( testconstants.ExistentDid, []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, ), diff --git a/tests/unit/test_utils.go b/tests/unit/test_utils.go index e2233881..adc7f74b 100644 --- a/tests/unit/test_utils.go +++ b/tests/unit/test_utils.go @@ -5,6 +5,8 @@ package unit import ( "net/http" "net/http/httptest" + "strings" + "time" didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" From c8ba3f9cf0dc7c90cd251fe76fd02aed0257d0bb Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Wed, 12 Apr 2023 13:32:24 +0400 Subject: [PATCH 11/46] MAkes linter happy and fix integration tests --- services/diddoc/diddoc_query.go | 5 +- tests/constants/common.go | 4 +- tests/constants/constants.go | 14 +- .../diddoc/query/positive_resource_test.go | 324 +++++++++--------- 4 files changed, 186 insertions(+), 161 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 7e7b07c0..24d7e7e1 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -246,10 +246,7 @@ func (dd *QueryDIDDocRequestService) IsResourceData(result types.ResolutionResul return false } _, ok = _result.ContentStream.(*types.DereferencedResourceData) - if !ok { - return false - } - return true + return ok } func (dd QueryDIDDocRequestService) Respond(c services.ResolverContext) error { diff --git a/tests/constants/common.go b/tests/constants/common.go index 86eb6f22..a9ff5ced 100644 --- a/tests/constants/common.go +++ b/tests/constants/common.go @@ -57,9 +57,9 @@ func generateResource() resourceTypes.ResourceWithMetadata { func generateMetadata() didTypes.Metadata { return didTypes.Metadata{ - VersionId: ValidVersionId, + VersionId: ValidVersionId, Deactivated: false, - Created: timestamppb.New(ValidCreated), + Created: timestamppb.New(ValidCreated), } } diff --git a/tests/constants/constants.go b/tests/constants/constants.go index bc3ba9f3..6acc35ad 100644 --- a/tests/constants/constants.go +++ b/tests/constants/constants.go @@ -19,8 +19,9 @@ var ( IndyStyleMainnetDid = "did:cheqd:mainnet:Ps1ysXP2Ae6GBfxNhNQNKN" IndyStyleTestnetDid = "did:cheqd:testnet:73wnEyHhkhXiH1Nq7w5Kgq" + UUIDStyleTestnetId = "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0" UUIDStyleMainnetDid = "did:cheqd:mainnet:c82f2b02-bdab-4dd7-b833-3e143745d612" - UUIDStyleTestnetDid = "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0" + UUIDStyleTestnetDid = "did:cheqd:testnet:" + UUIDStyleTestnetId OldIndy16CharStyleTestnetDid = "did:cheqd:testnet:zHqbcXb3irKRCMst" MigratedIndy16CharStyleTestnetDid = "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR" @@ -39,6 +40,17 @@ var ( var ( UUIDStyleTestnetDidResourceId = "9ba3922e-d5f5-4f53-b265-fc0d4e988c77" OldIndy32CharStyleTestnetDidIdentifierResourceId = "214b8b61-a861-416b-a7e4-45533af40ada" + ExistentResourceName = "Demo Resource" + ExistentResourceType = "String" + ExistentResourceVersion = "" + ExistentResourceMediaType = "application/json" + ExistentResourceChecksum = "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3" + ExistentResource = types.DereferencedResource{ + ResourceURI: UUIDStyleTestnetId + types.RESOURCE_PATH + UUIDStyleTestnetDidResourceId, + CollectionId: UUIDStyleTestnetId, + ResourceId: UUIDStyleTestnetDidResourceId, + Name: ExistentResourceName, + } ) var ( diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go index ce3d83ef..131fc10e 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -1,4 +1,4 @@ -// go:build integration +//go:build integration package query @@ -9,13 +9,13 @@ import ( testconstants "github.com/cheqd/did-resolver/tests/constants" utils "github.com/cheqd/did-resolver/tests/integration/rest" - "github.com/cheqd/did-resolver/types" + // "github.com/cheqd/did-resolver/types" "github.com/go-resty/resty/v2" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) -var _ = DescribeTable("Positive: Get Resource by resourceId", func(testCase utils.PositiveTestCase) { +var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { client := resty.New() resp, err := client.R(). @@ -36,177 +36,193 @@ var _ = DescribeTable("Positive: Get Resource by resourceId", func(testCase util }, Entry( - "can get DIDDoc version metadata with an existent 22 bytes INDY style mainnet DID and versionId", + "can get resource with only resourceId", utils.PositiveTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.IndyStyleMainnetDid, - testconstants.IndyStyleMainnetDidIdentifier, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_mainnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent 22 bytes INDY style testnet DID and versionId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.IndyStyleTestnetDid, - testconstants.IndyStyleTestnetDidIdentifier, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent UUID style mainnet DID and versionId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.UUIDStyleMainnetDid, - testconstants.UUIDStyleMainnetDidIdentifier, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent UUID style testnet DID and versionId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + "http://localhost:8080/1.0/identifiers/%s?resourceId=%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent old 16 characters Indy style testnet DID and versionId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.OldIndy16CharStyleTestnetDid, - "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6", - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_16_indy_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent old 32 characters Indy style testnet DID and versionId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.OldIndy32CharStyleTestnetDid, - "1dc202d4-26ee-54a9-b091-8d2e1f609722", + testconstants.UUIDStyleTestnetDidResourceId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSON resolution type", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, - ), - ResolutionType: string(types.DIDJSON), - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_did_json.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSONLD resolution type", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, - ), - ResolutionType: string(types.DIDJSONLD), - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get DIDDoc version metadata with an existent DID and versionId, and supported JSONLD resolution type", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, - ), - ResolutionType: string(types.JSONLD), - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", ExpectedStatusCode: http.StatusOK, }, ), Entry( - "can get DIDDoc version metadata with an existent DID and versionId, and supported gzip encoding type", + "can get resource with only resourceId", utils.PositiveTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetDidResourceId, ), ResolutionType: testconstants.DefaultResolutionType, - EncodingType: "gzip", + EncodingType: testconstants.DefaultEncodingType, ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", ExpectedStatusCode: http.StatusOK, }, ), - Entry( - "can get DIDDoc version metadata with an existent DID and versionId, and not supported encoding type", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.NotSupportedEncodingType, - ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - ExpectedStatusCode: http.StatusOK, - }, - ), + // Entry( + // "can get DIDDoc version metadata with an existent 22 bytes INDY style testnet DID and versionId", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.IndyStyleTestnetDid, + // testconstants.IndyStyleTestnetDidIdentifier, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent UUID style mainnet DID and versionId", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleMainnetDid, + // testconstants.UUIDStyleMainnetDidIdentifier, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent UUID style testnet DID and versionId", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent old 16 characters Indy style testnet DID and versionId", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.OldIndy16CharStyleTestnetDid, + // "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6", + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_16_indy_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent old 32 characters Indy style testnet DID and versionId", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.OldIndy32CharStyleTestnetDid, + // "1dc202d4-26ee-54a9-b091-8d2e1f609722", + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSON resolution type", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: string(types.DIDJSON), + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_did_json.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSONLD resolution type", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: string(types.DIDJSONLD), + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent DID and versionId, and supported JSONLD resolution type", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: string(types.JSONLD), + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent DID and versionId, and supported gzip encoding type", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: "gzip", + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), + + // Entry( + // "can get DIDDoc version metadata with an existent DID and versionId, and not supported encoding type", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // testconstants.UUIDStyleTestnetDid, + // testconstants.UUIDStyleTestnetDidIdentifier, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.NotSupportedEncodingType, + // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), ) From 795fa069032fe20817cadcb7b43c3216ef0b2767 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Wed, 12 Apr 2023 19:48:45 +0400 Subject: [PATCH 12/46] Add more integration tests for queries --- tests/constants/constants.go | 11 +- tests/integration/rest/did_redirect_test.go | 24 ++ .../rest/diddoc/metadata/positive_test.go | 18 +- .../query/positive_diddoc_service_test.go | 91 ++++++ .../rest/diddoc/query/positive_diddoc_test.go | 109 +++++++ .../diddoc/query/positive_resource_test.go | 283 +++++++++--------- .../query/positive_resource_text_test.go | 48 +++ .../rest/diddoc/version/positive_test.go | 18 +- tests/integration/rest/test_utils.go | 22 +- .../diddoc_uuid_testnet_several_versions.json | 60 ++++ ...uuid_testnet_several_versions_between.json | 46 +++ ...tnet_several_versions_empty_resources.json | 45 +++ .../resource_data/resource_hello_world.txt | 1 + 13 files changed, 602 insertions(+), 174 deletions(-) create mode 100644 tests/integration/rest/diddoc/query/positive_diddoc_service_test.go create mode 100644 tests/integration/rest/diddoc/query/positive_diddoc_test.go create mode 100644 tests/integration/rest/diddoc/query/positive_resource_text_test.go create mode 100644 tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json create mode 100644 tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json create mode 100644 tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json create mode 100644 tests/integration/rest/testdata/resource_data/resource_hello_world.txt diff --git a/tests/constants/constants.go b/tests/constants/constants.go index 6acc35ad..e15221a9 100644 --- a/tests/constants/constants.go +++ b/tests/constants/constants.go @@ -31,10 +31,10 @@ var ( ) var ( - IndyStyleMainnetDidIdentifier = "4fa8e367-c70e-533e-babf-3732d9761061" - IndyStyleTestnetDidIdentifier = "60bb3b62-e0f0-545b-a552-63aab5cd1aef" - UUIDStyleMainnetDidIdentifier = "76e546ee-78cd-5372-b34e-8b47461626e1" - UUIDStyleTestnetDidIdentifier = "e5615fc2-6f13-42b1-989c-49576a574cef" + IndyStyleMainnetVersionId = "4fa8e367-c70e-533e-babf-3732d9761061" + IndyStyleTestnetVersionId = "60bb3b62-e0f0-545b-a552-63aab5cd1aef" + UUIDStyleMainnetVersionId = "76e546ee-78cd-5372-b34e-8b47461626e1" + UUIDStyleTestnetVersionId = "e5615fc2-6f13-42b1-989c-49576a574cef" ) var ( @@ -45,6 +45,9 @@ var ( ExistentResourceVersion = "" ExistentResourceMediaType = "application/json" ExistentResourceChecksum = "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3" + ExistentResourceCreated = "2023-01-25T12:08:39.63Z" + ExistentResourceVersionTimeAfter = "2023-01-26T12:08:39.63Z" + ExistentResourceVersionTimeBefore = "2023-01-24T12:08:39.63Z" ExistentResource = types.DereferencedResource{ ResourceURI: UUIDStyleTestnetId + types.RESOURCE_PATH + UUIDStyleTestnetDidResourceId, CollectionId: UUIDStyleTestnetId, diff --git a/tests/integration/rest/did_redirect_test.go b/tests/integration/rest/did_redirect_test.go index 63de7cf8..59f0bf8c 100644 --- a/tests/integration/rest/did_redirect_test.go +++ b/tests/integration/rest/did_redirect_test.go @@ -198,4 +198,28 @@ var _ = DescribeTable("Test HTTP status code of redirect DID URL", func(testCase ExpectedStatusCode: http.StatusMovedPermanently, }, ), + Entry( + "can redirect when it try to get resource by query params. 16 symbols DID", + PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceId=%s", + testconstants.OldIndy16CharStyleTestnetDid, + testconstants.ValidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusMovedPermanently, + }, + ), + Entry( + "can redirect when it try to get resource by query params. 32 symbols DID", + PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceId=%s", + testconstants.OldIndy32CharStyleTestnetDid, + testconstants.ValidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusMovedPermanently, + }, + ), ) diff --git a/tests/integration/rest/diddoc/metadata/positive_test.go b/tests/integration/rest/diddoc/metadata/positive_test.go index 320c0f93..2b9fa2ae 100644 --- a/tests/integration/rest/diddoc/metadata/positive_test.go +++ b/tests/integration/rest/diddoc/metadata/positive_test.go @@ -41,7 +41,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.IndyStyleMainnetDid, - testconstants.IndyStyleMainnetDidIdentifier, + testconstants.IndyStyleMainnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -57,7 +57,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.IndyStyleTestnetDid, - testconstants.IndyStyleTestnetDidIdentifier, + testconstants.IndyStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -73,7 +73,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleMainnetDid, - testconstants.UUIDStyleMainnetDidIdentifier, + testconstants.UUIDStyleMainnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -89,7 +89,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -137,7 +137,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.DIDJSON), EncodingType: testconstants.DefaultEncodingType, @@ -153,7 +153,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.DIDJSONLD), EncodingType: testconstants.DefaultEncodingType, @@ -169,7 +169,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.JSONLD), EncodingType: testconstants.DefaultEncodingType, @@ -185,7 +185,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: "gzip", @@ -201,7 +201,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version metadata", func(testCase uti DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.NotSupportedEncodingType, diff --git a/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go new file mode 100644 index 00000000..f84756c1 --- /dev/null +++ b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go @@ -0,0 +1,91 @@ +//go:build integration + +package query + +import ( + "fmt" + "net/http" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var ( + ServiceId = "bar" + ExpectedLocationHeader = "https://bar.example.com" +) + +var _ = DescribeTable("Positive: Get Service param", func(testCase utils.PositiveTestCase) { + client := resty.New() + client.SetRedirectPolicy(resty.NoRedirectPolicy()) + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + Get(testCase.DidURL) + Expect(err).NotTo(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + Expect(testCase.ExpectedLocationHeader).To(Equal(resp.Header().Get("Location"))) +}, + + Entry( + "can redirect to service endpoint", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?service=%s", + SeveralVersionsDID, + ServiceId, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusSeeOther, + ExpectedLocationHeader: ExpectedLocationHeader, + }, + ), + Entry( + "can redirect to service endpoint with relativeRef", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?service=%s&relativeRef=foo", + SeveralVersionsDID, + ServiceId, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusSeeOther, + ExpectedLocationHeader: ExpectedLocationHeader + "foo", + }, + ), + Entry( + "can redirect to service endpoint with relativeRef and with versionId", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s", + SeveralVersionsDID, + ServiceId, + SeveralVersionVersionId, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusSeeOther, + ExpectedLocationHeader: ExpectedLocationHeader + "foo", + }, + ), + // ToDo uncomment this test when versionId ad versionTime will be permitted in one query + + // Entry( + // "can redirect to service endpoint with relativeRef and with versionId and versionTime", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s&versionTime=%s", + // SeveralVersionsDID, + // ServiceId, + // SeveralVersionVersionId, + // SeveralVersionTimeAfter, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // ExpectedStatusCode: http.StatusSeeOther, + // ExpectedLocationHeader: ExpectedLocationHeader + "foo", + // }, + // ), +) diff --git a/tests/integration/rest/diddoc/query/positive_diddoc_test.go b/tests/integration/rest/diddoc/query/positive_diddoc_test.go new file mode 100644 index 00000000..df2cc2ff --- /dev/null +++ b/tests/integration/rest/diddoc/query/positive_diddoc_test.go @@ -0,0 +1,109 @@ +//go:build integration + +package query + +import ( + "encoding/json" + "fmt" + "net/http" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + + "github.com/cheqd/did-resolver/types" + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var ( + SeveralVersionsDID = "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c" + SeveralVersionTimeAfter = "2023-03-06T10:59:22.04Z" + SeveralVersionTimeBetween = "2023-03-06T09:45:22.04Z" + SeveralVersionTimeBefore = "2023-03-06T08:59:22.04Z" + SeveralVersionVersionId = "f790c9b9-4817-4b31-be43-b198e6e18071" +) + +var _ = DescribeTable("Positive: Get DIDDoc", func(testCase utils.PositiveTestCase) { + client := resty.New() + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + SetHeader("Accept-Encoding", testCase.EncodingType). + Get(testCase.DidURL) + Expect(err).To(BeNil()) + + var receivedDidResolution types.DidResolution + Expect(json.Unmarshal(resp.Body(), &receivedDidResolution)).To(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + var expectedDidResolution types.DidResolution + Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidResolution)).To(BeNil()) + + Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) + utils.AssertDidResolution(expectedDidResolution, receivedDidResolution) +}, + + Entry( + "VersionId: can get DIDDoc with an existent UUID style testnet DID", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?versionId=%s", + SeveralVersionsDID, + SeveralVersionVersionId, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "VersionTime: can get DIDDoc with an existent UUID style testnet DID", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", + SeveralVersionsDID, + SeveralVersionTimeAfter, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "VersionTime Between: can get DIDDoc with an existent UUID style testnet DID", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", + SeveralVersionsDID, + SeveralVersionTimeBetween, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + // ToDo: uncomment after fix + + // Entry( + // "First VersionId (Should be with empty linkedResourceMetadata): can get DIDDoc with an existent UUID style testnet DID", + // utils.PositiveTestCase{ + // DidURL: fmt.Sprintf( + // "http://localhost:8080/1.0/identifiers/%s?versionId=%s", + // SeveralVersionsDID, + // SeveralVersionVersionId, + // ), + // ResolutionType: testconstants.DefaultResolutionType, + // EncodingType: testconstants.DefaultEncodingType, + // ExpectedEncodingType: "gzip", + // ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json", + // ExpectedStatusCode: http.StatusOK, + // }, + // ), +) diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go index 131fc10e..ae2b8fbd 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -6,10 +6,11 @@ import ( "encoding/json" "fmt" "net/http" + "strings" testconstants "github.com/cheqd/did-resolver/tests/constants" utils "github.com/cheqd/did-resolver/tests/integration/rest" - // "github.com/cheqd/did-resolver/types" + "github.com/go-resty/resty/v2" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -52,11 +53,59 @@ var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTest ), Entry( - "can get resource with only resourceId", + "can get resource with only resourceName (there is only one resource with such name)", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?resourceName=%s", testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "can get resource with resourceVersionTime", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceVersionTime=%s", + testconstants.UUIDStyleTestnetDid, + testconstants.ExistentResourceVersionTimeAfter, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "can get resource with combination resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "can get resource with combination resourceId, resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, testconstants.UUIDStyleTestnetDidResourceId, ), ResolutionType: testconstants.DefaultResolutionType, @@ -66,163 +115,105 @@ var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTest ExpectedStatusCode: http.StatusOK, }, ), + Entry( + "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, + testconstants.UUIDStyleTestnetDidResourceId, + testconstants.ExistentResourceVersionTimeAfter, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, + testconstants.UUIDStyleTestnetDidResourceId, + testconstants.ExistentResourceVersionTimeAfter, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + Entry( + "can get resource with combination versionId, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionId=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, + testconstants.UUIDStyleTestnetDidResourceId, + testconstants.ExistentResourceVersionTimeAfter, + testconstants.UUIDStyleTestnetVersionId, + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), - // Entry( - // "can get DIDDoc version metadata with an existent 22 bytes INDY style testnet DID and versionId", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.IndyStyleTestnetDid, - // testconstants.IndyStyleTestnetDidIdentifier, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_indy_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - - // Entry( - // "can get DIDDoc version metadata with an existent UUID style mainnet DID and versionId", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleMainnetDid, - // testconstants.UUIDStyleMainnetDidIdentifier, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), + Entry( + "can get resource with combination versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s", + testconstants.UUIDStyleTestnetDid, + strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + testconstants.ExistentResourceType, + testconstants.UUIDStyleTestnetDidResourceId, + testconstants.ExistentResourceVersionTimeAfter, + "2023-01-26T11:58:10.39Z", + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource.json", + ExpectedStatusCode: http.StatusOK, + }, + ), + // ToDo uncomment this test after allowing versionId and versionTime in the same request // Entry( - // "can get DIDDoc version metadata with an existent UUID style testnet DID and versionId", + // "can get resource with combination versionId, versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", // utils.PositiveTestCase{ // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", + // "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s&versionId=%s", // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - - // Entry( - // "can get DIDDoc version metadata with an existent old 16 characters Indy style testnet DID and versionId", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.OldIndy16CharStyleTestnetDid, - // "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6", + // strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), + // testconstants.ExistentResourceType, + // testconstants.UUIDStyleTestnetDidResourceId, + // testconstants.ExistentResourceVersionTimeAfter, + // "2023-01-26T11:58:10.39Z", + // testconstants.UUIDStyleTestnetVersionId, // ), // ResolutionType: testconstants.DefaultResolutionType, // EncodingType: testconstants.DefaultEncodingType, // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_16_indy_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - - // Entry( - // "can get DIDDoc version metadata with an existent old 32 characters Indy style testnet DID and versionId", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.OldIndy32CharStyleTestnetDid, - // "1dc202d4-26ee-54a9-b091-8d2e1f609722", - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - - // Entry( - // "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSON resolution type", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: string(types.DIDJSON), - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_did_json.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - - // Entry( - // "can get DIDDoc version metadata with an existent DID and versionId, and supported DIDJSONLD resolution type", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: string(types.DIDJSONLD), - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", + // ExpectedJSONPath: "../../testdata/resource_data/resource.json", // ExpectedStatusCode: http.StatusOK, // }, // ), +) - // Entry( - // "can get DIDDoc version metadata with an existent DID and versionId, and supported JSONLD resolution type", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: string(types.JSONLD), - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - // Entry( - // "can get DIDDoc version metadata with an existent DID and versionId, and supported gzip encoding type", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: "gzip", - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), - // Entry( - // "can get DIDDoc version metadata with an existent DID and versionId, and not supported encoding type", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s/version/%s/metadata", - // testconstants.UUIDStyleTestnetDid, - // testconstants.UUIDStyleTestnetDidIdentifier, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.NotSupportedEncodingType, - // ExpectedJSONPath: "../../testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), -) + \ No newline at end of file diff --git a/tests/integration/rest/diddoc/query/positive_resource_text_test.go b/tests/integration/rest/diddoc/query/positive_resource_text_test.go new file mode 100644 index 00000000..46cae3ff --- /dev/null +++ b/tests/integration/rest/diddoc/query/positive_resource_text_test.go @@ -0,0 +1,48 @@ +//go:build integration + +package query + +import ( + "fmt" + "net/http" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { + var expectedDidDereferencing string + client := resty.New() + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + SetHeader("Accept-Encoding", testCase.EncodingType). + Get(testCase.DidURL) + Expect(err).To(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + + expectedDidDereferencing, err = utils.GetTextResource(testCase.ExpectedJSONPath) + Expect(err).To(BeNil()) + Expect(expectedDidDereferencing).To(Equal(string(resp.Body()))) + + Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) +}, + Entry( + "can get resource with only resourceType (there is only one resource with such name)", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c?resourceType=TestType", + ), + ResolutionType: testconstants.DefaultResolutionType, + EncodingType: testconstants.DefaultEncodingType, + ExpectedEncodingType: "gzip", + ExpectedJSONPath: "../../testdata/resource_data/resource_hello_world.txt", + ExpectedStatusCode: http.StatusOK, + }, + ), +) diff --git a/tests/integration/rest/diddoc/version/positive_test.go b/tests/integration/rest/diddoc/version/positive_test.go index 7c28d94c..5d072479 100644 --- a/tests/integration/rest/diddoc/version/positive_test.go +++ b/tests/integration/rest/diddoc/version/positive_test.go @@ -41,7 +41,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.IndyStyleMainnetDid, - testconstants.IndyStyleMainnetDidIdentifier, + testconstants.IndyStyleMainnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -57,7 +57,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.IndyStyleTestnetDid, - testconstants.IndyStyleTestnetDidIdentifier, + testconstants.IndyStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -73,7 +73,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleMainnetDid, - testconstants.UUIDStyleMainnetDidIdentifier, + testconstants.UUIDStyleMainnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -89,7 +89,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.DefaultEncodingType, @@ -137,7 +137,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.DIDJSON), EncodingType: testconstants.DefaultEncodingType, @@ -153,7 +153,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.DIDJSONLD), EncodingType: testconstants.DefaultEncodingType, @@ -169,7 +169,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: string(types.JSONLD), EncodingType: testconstants.DefaultEncodingType, @@ -185,7 +185,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: "gzip", @@ -201,7 +201,7 @@ var _ = DescribeTable("Positive: Get DIDDoc version", func(testCase utils.Positi DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s/version/%s", testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidIdentifier, + testconstants.UUIDStyleTestnetVersionId, ), ResolutionType: testconstants.DefaultResolutionType, EncodingType: testconstants.NotSupportedEncodingType, diff --git a/tests/integration/rest/test_utils.go b/tests/integration/rest/test_utils.go index 2e108ff0..e738bb21 100644 --- a/tests/integration/rest/test_utils.go +++ b/tests/integration/rest/test_utils.go @@ -11,12 +11,13 @@ import ( ) type PositiveTestCase struct { - DidURL string - ResolutionType string - EncodingType string - ExpectedEncodingType string - ExpectedJSONPath string - ExpectedStatusCode int + DidURL string + ResolutionType string + EncodingType string + ExpectedEncodingType string + ExpectedJSONPath string + ExpectedStatusCode int + ExpectedLocationHeader string } type NegativeTestCase struct { @@ -65,3 +66,12 @@ func ConvertJsonFileToType(path string, v any) error { return nil } + +func GetTextResource(path string) (string, error) { + content, err := os.ReadFile(path) + if err != nil { + return "", err + } + + return string(content), nil +} diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json new file mode 100644 index 00000000..12739cb0 --- /dev/null +++ b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json @@ -0,0 +1,60 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-12T14:51:09Z", + "did": { + "didString": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "methodSpecificId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "verificationMethod": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "publicKeyBase58": "BpVGbTeT26LipAdk26DBZrmJx2939i9gZS5VxGt1zZQ6" + } + ], + "authentication": [ + "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1" + ], + "service": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#bar", + "type": "LinkedDomains", + "serviceEndpoint": [ + "https://bar.example.com" + ] + } + ] + }, + "didDocumentMetadata": { + "created": "2023-03-06T09:36:55.56204903Z", + "updated": "2023-03-06T09:59:22.04507182Z", + "deactivated": true, + "versionId": "f790c9b9-4817-4b31-be43-b198e6e18071", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c/resources/5e16a3f9-7c6e-4b6b-8e28-20f56780ee25", + "resourceCollectionId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "resourceId": "5e16a3f9-7c6e-4b6b-8e28-20f56780ee25", + "resourceName": "TestResource", + "resourceType": "TestType", + "mediaType": "text/plain; charset=utf-8", + "created": "2023-03-06T09:53:44.467029472Z", + "checksum": "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c", + "previousVersionId": null, + "nextVersionId": null, + "version": "1.0" + } + ] + } +} \ No newline at end of file diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json new file mode 100644 index 00000000..027b7146 --- /dev/null +++ b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json @@ -0,0 +1,46 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-12T15:00:53Z", + "did": { + "didString": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "methodSpecificId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "verificationMethod": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "publicKeyBase58": "BpVGbTeT26LipAdk26DBZrmJx2939i9gZS5VxGt1zZQ6" + } + ], + "authentication": [ + "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1" + ], + "service": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#bar", + "type": "LinkedDomains", + "serviceEndpoint": [ + "https://bar.example.com" + ] + } + ] + }, + "didDocumentMetadata": { + "created": "2023-03-06T09:36:55.56204903Z", + "updated": "2023-03-06T09:39:48.496306968Z", + "deactivated": true, + "versionId": "ce298b6f-594b-426e-b431-370d6bc5d3ad", + "linkedResourceMetadata": [] + } +} \ No newline at end of file diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json new file mode 100644 index 00000000..6d4e58bc --- /dev/null +++ b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json @@ -0,0 +1,45 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-12T15:00:53Z", + "did": { + "didString": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "methodSpecificId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "verificationMethod": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "publicKeyBase58": "BpVGbTeT26LipAdk26DBZrmJx2939i9gZS5VxGt1zZQ6" + } + ], + "authentication": [ + "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1" + ], + "service": [ + { + "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#bar", + "type": "LinkedDomains", + "serviceEndpoint": [ + "https://bar.example.com" + ] + } + ] + }, + "didDocumentMetadata": { + "created": "2023-03-06T09:36:55.56204903Z", + "deactivated": true, + "versionId": "0ce23d04-5b67-4ea6-a315-788588e53f4e", + "linkedResourceMetadata": [] + } +} \ No newline at end of file diff --git a/tests/integration/rest/testdata/resource_data/resource_hello_world.txt b/tests/integration/rest/testdata/resource_data/resource_hello_world.txt new file mode 100644 index 00000000..70c379b6 --- /dev/null +++ b/tests/integration/rest/testdata/resource_data/resource_hello_world.txt @@ -0,0 +1 @@ +Hello world \ No newline at end of file From 09d3d76e064bceb3e876888255debe830262de64 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Thu, 13 Apr 2023 15:21:47 +0400 Subject: [PATCH 13/46] Fixed: - added version support - changed logic for allowing versionId and versionTime in the same query - added more integration tests --- services/diddoc/diddoc_query.go | 22 +- services/{ => diddoc}/queries/base_handler.go | 0 .../diddoc/queries/diddoc/did_doc_helpers.go | 34 ++ .../queries/diddoc/did_doc_resolve_handler.go | 36 ++ .../queries/diddoc/did_query_base_handler.go | 16 +- .../diddoc/did_query_relative_ref_handler.go | 2 +- .../diddoc/did_query_service_handler.go | 2 +- .../diddoc/did_query_version_id_handler.go | 22 +- .../diddoc/did_query_version_time_handler.go | 20 +- .../resources/resource_helper_handler.go | 0 .../queries/resources/resource_helpers.go | 0 .../resource_query_collection_id_handler.go | 2 +- .../resources/resource_query_handler.go | 2 +- .../resources/resource_query_id_handler.go | 2 +- .../resource_query_metadata_handler.go | 2 +- .../resources/resource_query_name_handler.go | 2 +- .../resources/resource_query_type_handler.go | 2 +- .../resource_query_version_handler.go | 2 +- .../resource_query_version_time_handler.go | 2 +- .../resources/resource_validation_handler.go | 2 +- services/{ => diddoc}/queries/stop_handler.go | 0 .../query/positive_diddoc_service_test.go | 32 +- .../rest/diddoc/query/positive_diddoc_test.go | 161 +++---- .../diddoc/query/positive_resource_test.go | 425 +++++++++--------- .../query/positive_resource_text_test.go | 88 ++-- .../collection_of_resources/metadata.json | 2 + .../metadata_32_indy_did.json | 7 + .../metadata_did_json.json | 2 + .../diddoc_uuid_testnet_several_versions.json | 2 +- ...uuid_testnet_several_versions_between.json | 16 +- ...tnet_several_versions_empty_resources.json | 45 -- .../diddoc_version_did_json.json | 2 + .../diddoc_did_json.json | 2 + .../diddoc_old_32_indy_testnet_did.json | 7 + .../diddoc_uuid_mainnet_did.json | 5 + .../diddoc_uuid_testnet_did.json | 2 + .../testdata/resource_metadata/metadata.json | 1 + .../metadata_32_indy_did.json | 1 + .../resource_metadata/metadata_did_json.json | 1 + types/dereferecing_metadata.go | 9 + types/dereferencing_content_stream.go | 26 +- 41 files changed, 551 insertions(+), 457 deletions(-) rename services/{ => diddoc}/queries/base_handler.go (100%) create mode 100644 services/diddoc/queries/diddoc/did_doc_helpers.go create mode 100644 services/diddoc/queries/diddoc/did_doc_resolve_handler.go rename services/{ => diddoc}/queries/diddoc/did_query_base_handler.go (56%) rename services/{ => diddoc}/queries/diddoc/did_query_relative_ref_handler.go (93%) rename services/{ => diddoc}/queries/diddoc/did_query_service_handler.go (95%) rename services/{ => diddoc}/queries/diddoc/did_query_version_id_handler.go (66%) rename services/{ => diddoc}/queries/diddoc/did_query_version_time_handler.go (67%) rename services/{ => diddoc}/queries/resources/resource_helper_handler.go (100%) rename services/{ => diddoc}/queries/resources/resource_helpers.go (100%) rename services/{ => diddoc}/queries/resources/resource_query_collection_id_handler.go (95%) rename services/{ => diddoc}/queries/resources/resource_query_handler.go (95%) rename services/{ => diddoc}/queries/resources/resource_query_id_handler.go (94%) rename services/{ => diddoc}/queries/resources/resource_query_metadata_handler.go (95%) rename services/{ => diddoc}/queries/resources/resource_query_name_handler.go (94%) rename services/{ => diddoc}/queries/resources/resource_query_type_handler.go (94%) rename services/{ => diddoc}/queries/resources/resource_query_version_handler.go (94%) rename services/{ => diddoc}/queries/resources/resource_query_version_time_handler.go (95%) rename services/{ => diddoc}/queries/resources/resource_validation_handler.go (92%) rename services/{ => diddoc}/queries/stop_handler.go (100%) delete mode 100644 tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 24d7e7e1..bd05340e 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -6,9 +6,9 @@ import ( "strings" "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" - diddocQueries "github.com/cheqd/did-resolver/services/queries/diddoc" - resourceQueries "github.com/cheqd/did-resolver/services/queries/resources" + "github.com/cheqd/did-resolver/services/diddoc/queries" + diddocQueries "github.com/cheqd/did-resolver/services/diddoc/queries/diddoc" + resourceQueries "github.com/cheqd/did-resolver/services/diddoc/queries/resources" "github.com/cheqd/did-resolver/types" "github.com/cheqd/did-resolver/utils" ) @@ -41,10 +41,10 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte resourceId := dd.GetQueryParam(types.ResourceId) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) - // Validation of query parameters - if versionId != "" && versionTime != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } + // // Validation of query parameters + // if versionId != "" && versionTime != "" { + // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + // } // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { @@ -139,6 +139,7 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu serviceHandler := diddocQueries.ServiceHandler{} versionIdHandler := diddocQueries.VersionIdHandler{} versionTimeHandler := diddocQueries.VersionTimeHandler{} + didDocResolveHandler := diddocQueries.DidDocResolveHandler{} err := startHandler.SetNext(c, &versionIdHandler) if err != nil { @@ -150,7 +151,12 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu return nil, err } - err = versionTimeHandler.SetNext(c, &serviceHandler) + err = versionTimeHandler.SetNext(c, &didDocResolveHandler) + if err != nil { + return nil, err + } + + err = didDocResolveHandler.SetNext(c, &serviceHandler) if err != nil { return nil, err } diff --git a/services/queries/base_handler.go b/services/diddoc/queries/base_handler.go similarity index 100% rename from services/queries/base_handler.go rename to services/diddoc/queries/base_handler.go diff --git a/services/diddoc/queries/diddoc/did_doc_helpers.go b/services/diddoc/queries/diddoc/did_doc_helpers.go new file mode 100644 index 00000000..c6b91879 --- /dev/null +++ b/services/diddoc/queries/diddoc/did_doc_helpers.go @@ -0,0 +1,34 @@ +package diddoc + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/types" +) + +type DidDocHelperHandler struct { + rd *types.DidDereferencing + rc *types.DereferencedDidVersionsList +} + +func (d *DidDocHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (*types.DereferencedDidVersionsList, error) { + rd, ok := response.(*types.DidDereferencing) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) + } + d.rd = rd + + // Cast to DereferencedResourceListStruct for getting the list of metadatas + rc, ok := d.rd.ContentStream.(*types.DereferencedDidVersionsList) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) + } + d.rc = rc + return rc, nil +} + +func (d *DidDocHelperHandler) CastToResult(versionFiltered types.DidDocMetadataList) *types.DidDereferencing { + d.rd.ContentStream = &types.DereferencedDidVersionsList{ + Versions: versionFiltered, + } + return d.rd +} diff --git a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go new file mode 100644 index 00000000..26a3fbc9 --- /dev/null +++ b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go @@ -0,0 +1,36 @@ +package diddoc + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/diddoc/queries" + "github.com/cheqd/did-resolver/types" +) + +type DidDocResolveHandler struct { + queries.BaseQueryHandler + DidDocHelperHandler +} + +func (dd *DidDocResolveHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + allVersions, err := dd.CastToContent(service, response) + if err != nil { + return nil, err + } + + if len(allVersions.Versions) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, dd.IsDereferencing) + } + + // Get the latest version. If versionId and versionTime handlers were called here should only 1 element. + // If versionId or versionTime was not called, we will return the latest version + versionId := allVersions.Versions[len(allVersions.Versions)-1].VersionId + + result, _err := c.DidDocService.Resolve(service.GetDid(), versionId, service.GetContentType()) + if _err != nil { + _err.IsDereferencing = dd.IsDereferencing + return nil, _err + } + + // Call the next handler + return dd.Continue(c, service, result) +} diff --git a/services/queries/diddoc/did_query_base_handler.go b/services/diddoc/queries/diddoc/did_query_base_handler.go similarity index 56% rename from services/queries/diddoc/did_query_base_handler.go rename to services/diddoc/queries/diddoc/did_query_base_handler.go index e3d24f96..81d9d541 100644 --- a/services/queries/diddoc/did_query_base_handler.go +++ b/services/diddoc/queries/diddoc/did_query_base_handler.go @@ -2,7 +2,7 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) @@ -11,18 +11,18 @@ type DidQueryHandler struct { } func (d *DidQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - versionId := service.GetQueryParam(types.VersionId) - versionTime := service.GetQueryParam(types.VersionTime) + // versionId := service.GetQueryParam(types.VersionId) + // versionTime := service.GetQueryParam(types.VersionTime) - // Here we are handling only query DID without versionId and versionTime - if versionId != "" || versionTime != "" { - return d.Continue(c, service, response) - } + // // // Here we are handling only query DID without versionId and versionTime + // // if versionId != "" || versionTime != "" { + // // return d.Continue(c, service, response) + // // } // Get Params did := service.GetDid() contentType := service.GetContentType() - result, err := c.DidDocService.Resolve(did, "", contentType) + result, err := c.DidDocService.GetAllDidDocVersionsMetadata(did, contentType) if err != nil { err.IsDereferencing = d.IsDereferencing return nil, err diff --git a/services/queries/diddoc/did_query_relative_ref_handler.go b/services/diddoc/queries/diddoc/did_query_relative_ref_handler.go similarity index 93% rename from services/queries/diddoc/did_query_relative_ref_handler.go rename to services/diddoc/queries/diddoc/did_query_relative_ref_handler.go index c92347a6..fcb530d2 100644 --- a/services/queries/diddoc/did_query_relative_ref_handler.go +++ b/services/diddoc/queries/diddoc/did_query_relative_ref_handler.go @@ -2,7 +2,7 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/diddoc/did_query_service_handler.go b/services/diddoc/queries/diddoc/did_query_service_handler.go similarity index 95% rename from services/queries/diddoc/did_query_service_handler.go rename to services/diddoc/queries/diddoc/did_query_service_handler.go index 14840ca9..712da72d 100644 --- a/services/queries/diddoc/did_query_service_handler.go +++ b/services/diddoc/queries/diddoc/did_query_service_handler.go @@ -2,7 +2,7 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/diddoc/did_query_version_id_handler.go b/services/diddoc/queries/diddoc/did_query_version_id_handler.go similarity index 66% rename from services/queries/diddoc/did_query_version_id_handler.go rename to services/diddoc/queries/diddoc/did_query_version_id_handler.go index ffd51648..8fd2f2e6 100644 --- a/services/queries/diddoc/did_query_version_id_handler.go +++ b/services/diddoc/queries/diddoc/did_query_version_id_handler.go @@ -2,29 +2,37 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) type VersionIdHandler struct { queries.BaseQueryHandler + DidDocHelperHandler } func (v *VersionIdHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // Get Params - did := service.GetDid() - contentType := service.GetContentType() versionId := service.GetQueryParam(types.VersionId) - // If versionId is empty, call the next handler. We don't need to handle it here if versionId == "" { return v.Continue(c, service, response) } - result, err := c.DidDocService.Resolve(did, versionId, contentType) + + // Get Params + did := service.GetDid() + contentType := service.GetContentType() + content, err := v.CastToContent(service, response) if err != nil { - err.IsDereferencing = v.IsDereferencing return nil, err } + + versionFiltered := content.Versions.GetByVersionId(versionId) + if versionFiltered == nil { + return nil, types.NewNotFoundError(did, contentType, nil, service.GetDereferencing()) + } + + result := v.CastToResult(versionFiltered) + // Call the next handler return v.Continue(c, service, result) } diff --git a/services/queries/diddoc/did_query_version_time_handler.go b/services/diddoc/queries/diddoc/did_query_version_time_handler.go similarity index 67% rename from services/queries/diddoc/did_query_version_time_handler.go rename to services/diddoc/queries/diddoc/did_query_version_time_handler.go index 0352e148..9cf9aa94 100644 --- a/services/queries/diddoc/did_query_version_time_handler.go +++ b/services/diddoc/queries/diddoc/did_query_version_time_handler.go @@ -2,12 +2,13 @@ package diddoc import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) type VersionTimeHandler struct { queries.BaseQueryHandler + DidDocHelperHandler } func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { @@ -21,17 +22,11 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services did := service.GetDid() contentType := service.GetContentType() - allMetadatas, err := c.DidDocService.GetAllDidDocVersionsMetadata(did, contentType) + allVersions, err := v.CastToContent(service, response) if err != nil { - err.IsDereferencing = false return nil, err } - allVersions := allMetadatas.ContentStream.(*types.DereferencedDidVersionsList) - if len(allVersions.Versions) == 0 { - return nil, types.NewNotFoundError(did, contentType, nil, v.IsDereferencing) - } - versionId, _err := allVersions.FindBeforeTime(versionTime) if _err != nil { return nil, types.NewInternalError(did, contentType, _err, v.IsDereferencing) @@ -41,12 +36,13 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services return nil, types.NewNotFoundError(did, contentType, nil, v.IsDereferencing) } - result, err := c.DidDocService.Resolve(did, versionId, contentType) - if err != nil { - err.IsDereferencing = v.IsDereferencing - return nil, err + versionsFiltered := allVersions.Versions.GetByVersionId(versionId) + if len(versionsFiltered) == 0 { + return nil, types.NewInternalError(did, contentType, nil, v.IsDereferencing) } + result := v.CastToResult(versionsFiltered) + // Call the next handler return v.Continue(c, service, result) } diff --git a/services/queries/resources/resource_helper_handler.go b/services/diddoc/queries/resources/resource_helper_handler.go similarity index 100% rename from services/queries/resources/resource_helper_handler.go rename to services/diddoc/queries/resources/resource_helper_handler.go diff --git a/services/queries/resources/resource_helpers.go b/services/diddoc/queries/resources/resource_helpers.go similarity index 100% rename from services/queries/resources/resource_helpers.go rename to services/diddoc/queries/resources/resource_helpers.go diff --git a/services/queries/resources/resource_query_collection_id_handler.go b/services/diddoc/queries/resources/resource_query_collection_id_handler.go similarity index 95% rename from services/queries/resources/resource_query_collection_id_handler.go rename to services/diddoc/queries/resources/resource_query_collection_id_handler.go index 2771e015..1b3291f9 100644 --- a/services/queries/resources/resource_query_collection_id_handler.go +++ b/services/diddoc/queries/resources/resource_query_collection_id_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_handler.go b/services/diddoc/queries/resources/resource_query_handler.go similarity index 95% rename from services/queries/resources/resource_query_handler.go rename to services/diddoc/queries/resources/resource_query_handler.go index 6caf95ba..e648b98f 100644 --- a/services/queries/resources/resource_query_handler.go +++ b/services/diddoc/queries/resources/resource_query_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_id_handler.go b/services/diddoc/queries/resources/resource_query_id_handler.go similarity index 94% rename from services/queries/resources/resource_query_id_handler.go rename to services/diddoc/queries/resources/resource_query_id_handler.go index 56da15dd..0a125d67 100644 --- a/services/queries/resources/resource_query_id_handler.go +++ b/services/diddoc/queries/resources/resource_query_id_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_metadata_handler.go b/services/diddoc/queries/resources/resource_query_metadata_handler.go similarity index 95% rename from services/queries/resources/resource_query_metadata_handler.go rename to services/diddoc/queries/resources/resource_query_metadata_handler.go index ae8a196d..375d6ade 100644 --- a/services/queries/resources/resource_query_metadata_handler.go +++ b/services/diddoc/queries/resources/resource_query_metadata_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_name_handler.go b/services/diddoc/queries/resources/resource_query_name_handler.go similarity index 94% rename from services/queries/resources/resource_query_name_handler.go rename to services/diddoc/queries/resources/resource_query_name_handler.go index 3b4185c4..6b5be15c 100644 --- a/services/queries/resources/resource_query_name_handler.go +++ b/services/diddoc/queries/resources/resource_query_name_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_type_handler.go b/services/diddoc/queries/resources/resource_query_type_handler.go similarity index 94% rename from services/queries/resources/resource_query_type_handler.go rename to services/diddoc/queries/resources/resource_query_type_handler.go index cb5c8c60..097cc492 100644 --- a/services/queries/resources/resource_query_type_handler.go +++ b/services/diddoc/queries/resources/resource_query_type_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_version_handler.go b/services/diddoc/queries/resources/resource_query_version_handler.go similarity index 94% rename from services/queries/resources/resource_query_version_handler.go rename to services/diddoc/queries/resources/resource_query_version_handler.go index 1dfdb56e..2f86bcec 100644 --- a/services/queries/resources/resource_query_version_handler.go +++ b/services/diddoc/queries/resources/resource_query_version_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_query_version_time_handler.go b/services/diddoc/queries/resources/resource_query_version_time_handler.go similarity index 95% rename from services/queries/resources/resource_query_version_time_handler.go rename to services/diddoc/queries/resources/resource_query_version_time_handler.go index df4fde1b..89489de8 100644 --- a/services/queries/resources/resource_query_version_time_handler.go +++ b/services/diddoc/queries/resources/resource_query_version_time_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/resources/resource_validation_handler.go b/services/diddoc/queries/resources/resource_validation_handler.go similarity index 92% rename from services/queries/resources/resource_validation_handler.go rename to services/diddoc/queries/resources/resource_validation_handler.go index be1f9d22..9f3d5d5a 100644 --- a/services/queries/resources/resource_validation_handler.go +++ b/services/diddoc/queries/resources/resource_validation_handler.go @@ -2,7 +2,7 @@ package resources import ( "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/queries" + "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" ) diff --git a/services/queries/stop_handler.go b/services/diddoc/queries/stop_handler.go similarity index 100% rename from services/queries/stop_handler.go rename to services/diddoc/queries/stop_handler.go diff --git a/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go index f84756c1..0074a3dd 100644 --- a/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go +++ b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go @@ -23,6 +23,7 @@ var _ = DescribeTable("Positive: Get Service param", func(testCase utils.Positiv client := resty.New() client.SetRedirectPolicy(resty.NoRedirectPolicy()) + fmt.Println(testCase.DidURL) resp, err := client.R(). SetHeader("Accept", testCase.ResolutionType). Get(testCase.DidURL) @@ -71,21 +72,20 @@ var _ = DescribeTable("Positive: Get Service param", func(testCase utils.Positiv ExpectedLocationHeader: ExpectedLocationHeader + "foo", }, ), - // ToDo uncomment this test when versionId ad versionTime will be permitted in one query - // Entry( - // "can redirect to service endpoint with relativeRef and with versionId and versionTime", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s&versionTime=%s", - // SeveralVersionsDID, - // ServiceId, - // SeveralVersionVersionId, - // SeveralVersionTimeAfter, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // ExpectedStatusCode: http.StatusSeeOther, - // ExpectedLocationHeader: ExpectedLocationHeader + "foo", - // }, - // ), + Entry( + "can redirect to service endpoint with relativeRef and with versionId and versionTime", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?service=%s&relativeRef=foo&versionId=%s&versionTime=%s", + SeveralVersionsDID, + ServiceId, + SeveralVersionVersionId, + SeveralVersionTimeAfter, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusSeeOther, + ExpectedLocationHeader: ExpectedLocationHeader + "foo", + }, + ), ) diff --git a/tests/integration/rest/diddoc/query/positive_diddoc_test.go b/tests/integration/rest/diddoc/query/positive_diddoc_test.go index df2cc2ff..1f8e5545 100644 --- a/tests/integration/rest/diddoc/query/positive_diddoc_test.go +++ b/tests/integration/rest/diddoc/query/positive_diddoc_test.go @@ -2,19 +2,19 @@ package query -import ( - "encoding/json" - "fmt" - "net/http" +// import ( +// "encoding/json" +// "fmt" +// "net/http" - testconstants "github.com/cheqd/did-resolver/tests/constants" - utils "github.com/cheqd/did-resolver/tests/integration/rest" +// testconstants "github.com/cheqd/did-resolver/tests/constants" +// utils "github.com/cheqd/did-resolver/tests/integration/rest" - "github.com/cheqd/did-resolver/types" - "github.com/go-resty/resty/v2" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) +// "github.com/cheqd/did-resolver/types" +// "github.com/go-resty/resty/v2" +// . "github.com/onsi/ginkgo/v2" +// . "github.com/onsi/gomega" +// ) var ( SeveralVersionsDID = "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c" @@ -24,86 +24,69 @@ var ( SeveralVersionVersionId = "f790c9b9-4817-4b31-be43-b198e6e18071" ) -var _ = DescribeTable("Positive: Get DIDDoc", func(testCase utils.PositiveTestCase) { - client := resty.New() - - resp, err := client.R(). - SetHeader("Accept", testCase.ResolutionType). - SetHeader("Accept-Encoding", testCase.EncodingType). - Get(testCase.DidURL) - Expect(err).To(BeNil()) +// var _ = DescribeTable("Positive: Get DIDDoc", func(testCase utils.PositiveTestCase) { +// client := resty.New() - var receivedDidResolution types.DidResolution - Expect(json.Unmarshal(resp.Body(), &receivedDidResolution)).To(BeNil()) - Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) +// resp, err := client.R(). +// SetHeader("Accept", testCase.ResolutionType). +// SetHeader("Accept-Encoding", testCase.EncodingType). +// Get(testCase.DidURL) +// Expect(err).To(BeNil()) - var expectedDidResolution types.DidResolution - Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidResolution)).To(BeNil()) +// var receivedDidResolution types.DidResolution +// Expect(json.Unmarshal(resp.Body(), &receivedDidResolution)).To(BeNil()) +// Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) - Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) - utils.AssertDidResolution(expectedDidResolution, receivedDidResolution) -}, +// var expectedDidResolution types.DidResolution +// Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidResolution)).To(BeNil()) - Entry( - "VersionId: can get DIDDoc with an existent UUID style testnet DID", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?versionId=%s", - SeveralVersionsDID, - SeveralVersionVersionId, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "VersionTime: can get DIDDoc with an existent UUID style testnet DID", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", - SeveralVersionsDID, - SeveralVersionTimeAfter, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "VersionTime Between: can get DIDDoc with an existent UUID style testnet DID", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", - SeveralVersionsDID, - SeveralVersionTimeBetween, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - // ToDo: uncomment after fix +// Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) +// utils.AssertDidResolution(expectedDidResolution, receivedDidResolution) +// }, - // Entry( - // "First VersionId (Should be with empty linkedResourceMetadata): can get DIDDoc with an existent UUID style testnet DID", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s?versionId=%s", - // SeveralVersionsDID, - // SeveralVersionVersionId, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), -) +// Entry( +// "VersionId: can get DIDDoc with an existent UUID style testnet DID", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?versionId=%s", +// SeveralVersionsDID, +// SeveralVersionVersionId, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "VersionTime: can get DIDDoc with an existent UUID style testnet DID", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", +// SeveralVersionsDID, +// SeveralVersionTimeAfter, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "VersionTime Between: can get DIDDoc with an existent UUID style testnet DID", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?versionTime=%s", +// SeveralVersionsDID, +// SeveralVersionTimeBetween, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// ) diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go index ae2b8fbd..1b0ee6da 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -1,218 +1,219 @@ -//go:build integration +// go:build integration package query -import ( - "encoding/json" - "fmt" - "net/http" - "strings" - - testconstants "github.com/cheqd/did-resolver/tests/constants" - utils "github.com/cheqd/did-resolver/tests/integration/rest" - - "github.com/go-resty/resty/v2" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { - client := resty.New() - - resp, err := client.R(). - SetHeader("Accept", testCase.ResolutionType). - SetHeader("Accept-Encoding", testCase.EncodingType). - Get(testCase.DidURL) - Expect(err).To(BeNil()) - - var receivedDidDereferencing utils.DereferencingResult - Expect(json.Unmarshal(resp.Body(), &receivedDidDereferencing)).To(BeNil()) - Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) - - var expectedDidDereferencing utils.DereferencingResult - Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidDereferencing)).To(BeNil()) - - Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) - utils.AssertDidDereferencing(expectedDidDereferencing, receivedDidDereferencing) -}, - - Entry( - "can get resource with only resourceId", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceId=%s", - testconstants.UUIDStyleTestnetDid, - testconstants.UUIDStyleTestnetDidResourceId, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get resource with only resourceName (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with resourceVersionTime", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceVersionTime=%s", - testconstants.UUIDStyleTestnetDid, - testconstants.ExistentResourceVersionTimeAfter, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with combination resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with combination resourceId, resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - testconstants.UUIDStyleTestnetDidResourceId, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - testconstants.UUIDStyleTestnetDidResourceId, - testconstants.ExistentResourceVersionTimeAfter, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - testconstants.UUIDStyleTestnetDidResourceId, - testconstants.ExistentResourceVersionTimeAfter, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - Entry( - "can get resource with combination versionId, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionId=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - testconstants.UUIDStyleTestnetDidResourceId, - testconstants.ExistentResourceVersionTimeAfter, - testconstants.UUIDStyleTestnetVersionId, - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - - Entry( - "can get resource with combination versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s", - testconstants.UUIDStyleTestnetDid, - strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - testconstants.ExistentResourceType, - testconstants.UUIDStyleTestnetDidResourceId, - testconstants.ExistentResourceVersionTimeAfter, - "2023-01-26T11:58:10.39Z", - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource.json", - ExpectedStatusCode: http.StatusOK, - }, - ), - // ToDo uncomment this test after allowing versionId and versionTime in the same request - - // Entry( - // "can get resource with combination versionId, versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", - // utils.PositiveTestCase{ - // DidURL: fmt.Sprintf( - // "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s&versionId=%s", - // testconstants.UUIDStyleTestnetDid, - // strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), - // testconstants.ExistentResourceType, - // testconstants.UUIDStyleTestnetDidResourceId, - // testconstants.ExistentResourceVersionTimeAfter, - // "2023-01-26T11:58:10.39Z", - // testconstants.UUIDStyleTestnetVersionId, - // ), - // ResolutionType: testconstants.DefaultResolutionType, - // EncodingType: testconstants.DefaultEncodingType, - // ExpectedEncodingType: "gzip", - // ExpectedJSONPath: "../../testdata/resource_data/resource.json", - // ExpectedStatusCode: http.StatusOK, - // }, - // ), -) +// import ( +// "encoding/json" +// "fmt" +// "net/http" +// "strings" + +// testconstants "github.com/cheqd/did-resolver/tests/constants" +// utils "github.com/cheqd/did-resolver/tests/integration/rest" + +// "github.com/go-resty/resty/v2" +// . "github.com/onsi/ginkgo/v2" +// . "github.com/onsi/gomega" +// ) + +// var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { +// client := resty.New() +// fmt.Println(testCase.DidURL) + +// resp, err := client.R(). +// SetHeader("Accept", testCase.ResolutionType). +// SetHeader("Accept-Encoding", testCase.EncodingType). +// Get(testCase.DidURL) +// Expect(err).To(BeNil()) + +// var receivedDidDereferencing utils.DereferencingResult +// Expect(json.Unmarshal(resp.Body(), &receivedDidDereferencing)).To(BeNil()) +// Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + +// var expectedDidDereferencing utils.DereferencingResult +// Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidDereferencing)).To(BeNil()) + +// Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) +// utils.AssertDidDereferencing(expectedDidDereferencing, receivedDidDereferencing) +// }, + +// Entry( +// "can get resource with only resourceId", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceId=%s", +// testconstants.UUIDStyleTestnetDid, +// testconstants.UUIDStyleTestnetDidResourceId, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), + +// Entry( +// "can get resource with only resourceName (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with resourceVersionTime", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceVersionTime=%s", +// testconstants.UUIDStyleTestnetDid, +// testconstants.ExistentResourceVersionTimeAfter, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with combination resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with combination resourceId, resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// testconstants.UUIDStyleTestnetDidResourceId, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// testconstants.UUIDStyleTestnetDidResourceId, +// testconstants.ExistentResourceVersionTimeAfter, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with combination resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// testconstants.UUIDStyleTestnetDidResourceId, +// testconstants.ExistentResourceVersionTimeAfter, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// Entry( +// "can get resource with combination versionId, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionId=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// testconstants.UUIDStyleTestnetDidResourceId, +// testconstants.ExistentResourceVersionTimeAfter, +// testconstants.UUIDStyleTestnetVersionId, +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), + +// Entry( +// "can get resource with combination versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s", +// testconstants.UUIDStyleTestnetDid, +// strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// testconstants.ExistentResourceType, +// testconstants.UUIDStyleTestnetDidResourceId, +// testconstants.ExistentResourceVersionTimeAfter, +// "2023-01-26T11:58:10.39Z", +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// // ToDo uncomment this test after allowing versionId and versionTime in the same request + +// // Entry( +// // "can get resource with combination versionId, versionTime, resourceId, resourceVersionTime, resourceName and resourceType (there is only one resource with such name)", +// // utils.PositiveTestCase{ +// // DidURL: fmt.Sprintf( +// // "http://localhost:8080/1.0/identifiers/%s?resourceName=%s&resourceType=%s&resourceId=%s&resourceVersionTime=%s&versionTime=%s&versionId=%s", +// // testconstants.UUIDStyleTestnetDid, +// // strings.ReplaceAll(testconstants.ExistentResourceName, " ", "%20"), +// // testconstants.ExistentResourceType, +// // testconstants.UUIDStyleTestnetDidResourceId, +// // testconstants.ExistentResourceVersionTimeAfter, +// // "2023-01-26T11:58:10.39Z", +// // testconstants.UUIDStyleTestnetVersionId, +// // ), +// // ResolutionType: testconstants.DefaultResolutionType, +// // EncodingType: testconstants.DefaultEncodingType, +// // ExpectedEncodingType: "gzip", +// // ExpectedJSONPath: "../../testdata/resource_data/resource.json", +// // ExpectedStatusCode: http.StatusOK, +// // }, +// // ), +// ) diff --git a/tests/integration/rest/diddoc/query/positive_resource_text_test.go b/tests/integration/rest/diddoc/query/positive_resource_text_test.go index 46cae3ff..6b01013e 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_text_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_text_test.go @@ -2,47 +2,47 @@ package query -import ( - "fmt" - "net/http" - - testconstants "github.com/cheqd/did-resolver/tests/constants" - utils "github.com/cheqd/did-resolver/tests/integration/rest" - - "github.com/go-resty/resty/v2" - . "github.com/onsi/ginkgo/v2" - . "github.com/onsi/gomega" -) - -var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { - var expectedDidDereferencing string - client := resty.New() - - resp, err := client.R(). - SetHeader("Accept", testCase.ResolutionType). - SetHeader("Accept-Encoding", testCase.EncodingType). - Get(testCase.DidURL) - Expect(err).To(BeNil()) - Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) - - - expectedDidDereferencing, err = utils.GetTextResource(testCase.ExpectedJSONPath) - Expect(err).To(BeNil()) - Expect(expectedDidDereferencing).To(Equal(string(resp.Body()))) - - Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) -}, - Entry( - "can get resource with only resourceType (there is only one resource with such name)", - utils.PositiveTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c?resourceType=TestType", - ), - ResolutionType: testconstants.DefaultResolutionType, - EncodingType: testconstants.DefaultEncodingType, - ExpectedEncodingType: "gzip", - ExpectedJSONPath: "../../testdata/resource_data/resource_hello_world.txt", - ExpectedStatusCode: http.StatusOK, - }, - ), -) +// import ( +// "fmt" +// "net/http" + +// testconstants "github.com/cheqd/did-resolver/tests/constants" +// utils "github.com/cheqd/did-resolver/tests/integration/rest" + +// "github.com/go-resty/resty/v2" +// . "github.com/onsi/ginkgo/v2" +// . "github.com/onsi/gomega" +// ) + +// var _ = DescribeTable("Positive: Get resource", func(testCase utils.PositiveTestCase) { +// var expectedDidDereferencing string +// client := resty.New() + +// resp, err := client.R(). +// SetHeader("Accept", testCase.ResolutionType). +// SetHeader("Accept-Encoding", testCase.EncodingType). +// Get(testCase.DidURL) +// Expect(err).To(BeNil()) +// Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + +// expectedDidDereferencing, err = utils.GetTextResource(testCase.ExpectedJSONPath) +// Expect(err).To(BeNil()) +// Expect(expectedDidDereferencing).To(Equal(string(resp.Body()))) + +// Expect(testCase.ExpectedEncodingType).To(Equal(resp.Header().Get("Content-Encoding"))) +// }, +// Entry( +// "can get resource with only resourceType (there is only one resource with such name)", +// utils.PositiveTestCase{ +// DidURL: fmt.Sprintf( +// "http://localhost:8080/1.0/identifiers/did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c?resourceType=TestType", +// ), +// ResolutionType: testconstants.DefaultResolutionType, +// EncodingType: testconstants.DefaultEncodingType, +// ExpectedEncodingType: "gzip", +// ExpectedJSONPath: "../../testdata/resource_data/resource_hello_world.txt", +// ExpectedStatusCode: http.StatusOK, +// }, +// ), +// ) diff --git a/tests/integration/rest/testdata/collection_of_resources/metadata.json b/tests/integration/rest/testdata/collection_of_resources/metadata.json index b16a1097..441af8d9 100644 --- a/tests/integration/rest/testdata/collection_of_resources/metadata.json +++ b/tests/integration/rest/testdata/collection_of_resources/metadata.json @@ -19,6 +19,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion" : "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", @@ -31,6 +32,7 @@ "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", "resourceName": "ResourceName", "resourceType": "String", + "resourceVersion" : "", "mediaType": "text/plain; charset=utf-8", "created": "2023-01-25T12:04:52.261619721Z", "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", diff --git a/tests/integration/rest/testdata/collection_of_resources/metadata_32_indy_did.json b/tests/integration/rest/testdata/collection_of_resources/metadata_32_indy_did.json index bd386e0b..dd55db37 100644 --- a/tests/integration/rest/testdata/collection_of_resources/metadata_32_indy_did.json +++ b/tests/integration/rest/testdata/collection_of_resources/metadata_32_indy_did.json @@ -19,6 +19,7 @@ "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T09:00:02Z", "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", @@ -31,6 +32,7 @@ "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T08:58:16Z", "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", @@ -43,6 +45,7 @@ "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T09:01:23Z", "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", @@ -55,6 +58,7 @@ "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegDef", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T08:58:03Z", "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", @@ -67,6 +71,7 @@ "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T09:00:14Z", "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", @@ -79,6 +84,7 @@ "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-CredDef", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T08:58:22Z", "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", @@ -91,6 +97,7 @@ "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-Schema", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T08:57:31Z", "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", diff --git a/tests/integration/rest/testdata/collection_of_resources/metadata_did_json.json b/tests/integration/rest/testdata/collection_of_resources/metadata_did_json.json index 066e54fb..8834520b 100644 --- a/tests/integration/rest/testdata/collection_of_resources/metadata_did_json.json +++ b/tests/integration/rest/testdata/collection_of_resources/metadata_did_json.json @@ -18,6 +18,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion" : "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", @@ -30,6 +31,7 @@ "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", "resourceName": "ResourceName", "resourceType": "String", + "resourceVersion" : "", "mediaType": "text/plain; charset=utf-8", "created": "2023-01-25T12:04:52.261619721Z", "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json index 12739cb0..fa3fed87 100644 --- a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json +++ b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions.json @@ -53,7 +53,7 @@ "checksum": "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c", "previousVersionId": null, "nextVersionId": null, - "version": "1.0" + "resourceVersion": "1.0" } ] } diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json index 027b7146..f7a4a61f 100644 --- a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json +++ b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_between.json @@ -41,6 +41,20 @@ "updated": "2023-03-06T09:39:48.496306968Z", "deactivated": true, "versionId": "ce298b6f-594b-426e-b431-370d6bc5d3ad", - "linkedResourceMetadata": [] + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c/resources/5e16a3f9-7c6e-4b6b-8e28-20f56780ee25", + "resourceCollectionId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", + "resourceId": "5e16a3f9-7c6e-4b6b-8e28-20f56780ee25", + "resourceName": "TestResource", + "resourceType": "TestType", + "mediaType": "text/plain; charset=utf-8", + "created": "2023-03-06T09:53:44.467029472Z", + "checksum": "64ec88ca00b268e5ba1a35678a1b5316d212f4f366b2477232534a8aeca37f3c", + "previousVersionId": null, + "nextVersionId": null, + "resourceVersion": "1.0" + } + ] } } \ No newline at end of file diff --git a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json b/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json deleted file mode 100644 index 6d4e58bc..00000000 --- a/tests/integration/rest/testdata/diddoc/diddoc_uuid_testnet_several_versions_empty_resources.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "@context": "https://w3id.org/did-resolution/v1", - "didResolutionMetadata": { - "contentType": "application/did+ld+json", - "retrieved": "2023-04-12T15:00:53Z", - "did": { - "didString": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", - "methodSpecificId": "b5d70adf-31ca-4662-aa10-d3a54cd8f06c", - "method": "cheqd" - } - }, - "didDocument": { - "@context": [ - "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/suites/ed25519-2018/v1" - ], - "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", - "verificationMethod": [ - { - "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1", - "type": "Ed25519VerificationKey2018", - "controller": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c", - "publicKeyBase58": "BpVGbTeT26LipAdk26DBZrmJx2939i9gZS5VxGt1zZQ6" - } - ], - "authentication": [ - "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#key-1" - ], - "service": [ - { - "id": "did:cheqd:testnet:b5d70adf-31ca-4662-aa10-d3a54cd8f06c#bar", - "type": "LinkedDomains", - "serviceEndpoint": [ - "https://bar.example.com" - ] - } - ] - }, - "didDocumentMetadata": { - "created": "2023-03-06T09:36:55.56204903Z", - "deactivated": true, - "versionId": "0ce23d04-5b67-4ea6-a315-788588e53f4e", - "linkedResourceMetadata": [] - } -} \ No newline at end of file diff --git a/tests/integration/rest/testdata/diddoc_version/diddoc_version_did_json.json b/tests/integration/rest/testdata/diddoc_version/diddoc_version_did_json.json index 5ab7e3be..7f452cd6 100644 --- a/tests/integration/rest/testdata/diddoc_version/diddoc_version_did_json.json +++ b/tests/integration/rest/testdata/diddoc_version/diddoc_version_did_json.json @@ -35,6 +35,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion" : "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", @@ -47,6 +48,7 @@ "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", "resourceName": "ResourceName", "resourceType": "String", + "resourceVersion" : "", "mediaType": "text/plain; charset=utf-8", "created": "2023-01-25T12:04:52.261619721Z", "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", diff --git a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_did_json.json b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_did_json.json index 4e4b1826..d8d471af 100644 --- a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_did_json.json +++ b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_did_json.json @@ -18,6 +18,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion": "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", @@ -30,6 +31,7 @@ "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", "resourceName": "ResourceName", "resourceType": "String", + "resourceVersion": "", "mediaType": "text/plain; charset=utf-8", "created": "2023-01-25T12:04:52.261619721Z", "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", diff --git a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json index 5da15004..8f764f7c 100644 --- a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json +++ b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_old_32_indy_testnet_did.json @@ -19,6 +19,7 @@ "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T09:00:02Z", "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", @@ -31,6 +32,7 @@ "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T08:58:16Z", "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", @@ -43,6 +45,7 @@ "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T09:01:23Z", "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", @@ -55,6 +58,7 @@ "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegDef", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T08:58:03Z", "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", @@ -67,6 +71,7 @@ "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T09:00:14Z", "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", @@ -79,6 +84,7 @@ "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-CredDef", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T08:58:22Z", "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", @@ -91,6 +97,7 @@ "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-Schema", + "resourceVersion": "", "mediaType": "application/json", "created": "2022-10-12T08:57:31Z", "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", diff --git a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json index 0369fe6f..28f29d03 100644 --- a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json +++ b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_mainnet_did.json @@ -19,6 +19,7 @@ "resourceId": "3e6bd814-6851-4c8a-b114-c64f035ef590", "resourceName": "EventBrite Logo", "resourceType": "image/png", + "resourceVersion": "", "mediaType": "image/svg+xml", "created": "2022-11-17T10:35:23Z", "checksum": "a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559", @@ -31,6 +32,7 @@ "resourceId": "9447c669-0ba1-4989-bd10-a85cc298aace", "resourceName": "Discord Logo", "resourceType": "image/png", + "resourceVersion": "", "mediaType": "image/png", "created": "2022-11-17T10:35:51Z", "checksum": "b2939df5a48f422fc9d62f270c182f07b5fd5a7a334478ea73af4fdb5eb12d3b", @@ -43,6 +45,7 @@ "resourceId": "ba4d1a8b-6395-4b96-8492-aaf2800d5727", "resourceName": "Twitter Logo", "resourceType": "image/png", + "resourceVersion": "", "mediaType": "image/png", "created": "2022-11-17T10:36:26Z", "checksum": "aeb8f203a6a21cca668c5c8983dfe86b3cf95add102305da8208100595d69800", @@ -55,6 +58,7 @@ "resourceId": "cb3f5f64-c138-4309-b9ea-8d658b0ae28e", "resourceName": "IIW Event Logo", "resourceType": "image/png", + "resourceVersion": "", "mediaType": "image/png", "created": "2022-11-17T10:36:37Z", "checksum": "d48e158b915eae31ba2db640bd4aac7f82179ee5ca0263a8fe99012d4b02cf48", @@ -67,6 +71,7 @@ "resourceId": "e2651dd2-7ca7-44f1-9ba5-57a77747d9b4", "resourceName": "GitHub Logo", "resourceType": "image/png", + "resourceVersion": "", "mediaType": "image/png", "created": "2022-11-17T10:36:09Z", "checksum": "22ed95ff774cee8427c86b60288af4077b3b26424c758bec95a34aa8b7a88937", diff --git a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json index 5b9b50bb..fa65c787 100644 --- a/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json +++ b/tests/integration/rest/testdata/diddoc_version_metadata/diddoc_uuid_testnet_did.json @@ -19,6 +19,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion": "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", @@ -31,6 +32,7 @@ "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", "resourceName": "ResourceName", "resourceType": "String", + "resourceVersion": "", "mediaType": "text/plain; charset=utf-8", "created": "2023-01-25T12:04:52.261619721Z", "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", diff --git a/tests/integration/rest/testdata/resource_metadata/metadata.json b/tests/integration/rest/testdata/resource_metadata/metadata.json index b6e62566..9672df22 100644 --- a/tests/integration/rest/testdata/resource_metadata/metadata.json +++ b/tests/integration/rest/testdata/resource_metadata/metadata.json @@ -17,6 +17,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion" : "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", diff --git a/tests/integration/rest/testdata/resource_metadata/metadata_32_indy_did.json b/tests/integration/rest/testdata/resource_metadata/metadata_32_indy_did.json index ce7d04f0..cce5308a 100644 --- a/tests/integration/rest/testdata/resource_metadata/metadata_32_indy_did.json +++ b/tests/integration/rest/testdata/resource_metadata/metadata_32_indy_did.json @@ -17,6 +17,7 @@ "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", "resourceType": "CL-RevRegEntry", + "resourceVersion" : "", "mediaType": "application/json", "created": "2022-10-12T09:00:02Z", "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", diff --git a/tests/integration/rest/testdata/resource_metadata/metadata_did_json.json b/tests/integration/rest/testdata/resource_metadata/metadata_did_json.json index d4aa1db6..7282e3dc 100644 --- a/tests/integration/rest/testdata/resource_metadata/metadata_did_json.json +++ b/tests/integration/rest/testdata/resource_metadata/metadata_did_json.json @@ -16,6 +16,7 @@ "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", "resourceName": "Demo Resource", "resourceType": "String", + "resourceVersion" : "", "mediaType": "application/json", "created": "2023-01-25T12:08:39.633307395Z", "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index 28df7642..64d6d290 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -66,6 +66,15 @@ func (r ResourceDereferencing) IsRedirect() bool { type DidDocMetadataList []ResolutionDidDocMetadata +func (dd DidDocMetadataList) GetByVersionId(versionId string) DidDocMetadataList { + for _, r := range dd { + if r.VersionId == versionId { + return DidDocMetadataList{r} + } + } + return DidDocMetadataList{} +} + func (dd DidDocMetadataList) Len() int { return len(dd) } diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index 1a22b725..b0a1b0ac 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -15,11 +15,11 @@ type DereferencedResource struct { Name string `json:"resourceName" example:"Image Resource"` ResourceType string `json:"resourceType" example:"Image"` MediaType string `json:"mediaType" example:"image/png"` + Version string `json:"resourceVersion" example:"1"` Created *time.Time `json:"created" example:"2021-09-01T12:00:00Z"` Checksum string `json:"checksum" example:"a95380f460e63ad939541a57aecbfd795fcd37c6d78ee86c885340e33a91b559"` PreviousVersionId *string `json:"previousVersionId" example:"ad7a8442-3531-46eb-a024-53953ec6e4ff"` NextVersionId *string `json:"nextVersionId" example:"d4829ac7-4566-478c-a408-b44767eddadc"` - Version string `json:"version" example:"1"` } func NewDereferencedResource(did string, resource *resourceTypes.Metadata) *DereferencedResource { @@ -38,9 +38,9 @@ func NewDereferencedResource(did string, resource *resourceTypes.Metadata) *Dere Name: resource.Name, ResourceType: resource.ResourceType, MediaType: resource.MediaType, + Version: resource.Version, Created: &created, Checksum: resource.Checksum, - Version: resource.Version, PreviousVersionId: previousVersionId, NextVersionId: nextVersionId, } @@ -134,13 +134,33 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { return "", nil } for _, v := range versions { - if v.Created.Before(search_time) { + if v.Created.Before(search_time) || v.Created.Equal(search_time){ return v.ResourceId, nil } } return "", nil } +func (e DereferencedResourceList) FindAllBeforeTime(stime string) (DereferencedResourceList, error) { + var l = DereferencedResourceList{} + search_time, err := utils.ParseFromStringTimeToGoTime(stime) + if err != nil { + return l, err + } + // Firstly - sort versions by Updated time + versions := e + sort.Sort(versions) + if len(versions) == 0 { + return l, nil + } + for _, v := range versions { + if v.Created.Before(search_time) || v.Created.Equal(search_time.Add(time.Second)) { + l = append(l, v) + } + } + return l, nil +} + func (dr DereferencedResourceList) Len() int { return len(dr) } From 2fb0a75ba634b0120a33857eb99f0d42679d08db Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Fri, 14 Apr 2023 19:18:51 +0500 Subject: [PATCH 14/46] Add common functions and constants for transforming key. --- types/constants.go | 18 +++++++ types/supported_queries.go | 1 + utils/verification_key_generator.go | 24 +++++++++ utils/verification_key_parser.go | 83 +++++++++++++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 utils/verification_key_generator.go create mode 100644 utils/verification_key_parser.go diff --git a/types/constants.go b/types/constants.go index 399bd8f2..349658c8 100644 --- a/types/constants.go +++ b/types/constants.go @@ -18,6 +18,23 @@ func (cType ContentType) IsSupported() bool { return supportedTypes[cType] } +type TransformKeyType string + +const ( + Ed25519VerificationKey2018 TransformKeyType = "Ed25519VerificationKey2018" + Ed25519VerificationKey2020 TransformKeyType = "Ed25519VerificationKey2020" + JsonWebKey2020 TransformKeyType = "JsonWebKey2020" +) + +func (tKType TransformKeyType) IsSupported() bool { + supportedTypes := map[TransformKeyType]bool{ + Ed25519VerificationKey2018: true, + Ed25519VerificationKey2020: true, + JsonWebKey2020: true, + } + return supportedTypes[tKType] +} + const ( DIDSchemaJSONLD = "https://www.w3.org/ns/did/v1" ResolutionSchemaJSONLD = "https://w3id.org/did-resolution/v1" @@ -39,6 +56,7 @@ const ( const ( VersionId string = "versionId" VersionTime string = "versionTime" + TransformKey string = "transformKey" ServiceQ string = "service" RelativeRef string = "relativeRef" ResourceId string = "resourceId" diff --git a/types/supported_queries.go b/types/supported_queries.go index 9a3da67a..956887d4 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -39,6 +39,7 @@ func (s *SupportedQueriesT) Plus(s2 SupportedQueriesT) SupportedQueriesT { var DidSupportedQueries = SupportedQueriesT{ VersionId, VersionTime, + TransformKey, ServiceQ, RelativeRef, } diff --git a/utils/verification_key_generator.go b/utils/verification_key_generator.go new file mode 100644 index 00000000..529454b5 --- /dev/null +++ b/utils/verification_key_generator.go @@ -0,0 +1,24 @@ +package utils + +import ( + "crypto/ed25519" + + "github.com/lestrrat-go/jwx/jwk" + "github.com/mr-tron/base58" + "github.com/multiformats/go-multibase" +) + +func GenerateEd25519VerificationKey2018(publicKey ed25519.PublicKey) string { + return base58.Encode(publicKey) +} + +func GenerateEd25519VerificationKey2020(publicKey ed25519.PublicKey) (string, error) { + publicKeyMultibaseBytes := []byte{0xed, 0x01} + publicKeyMultibaseBytes = append(publicKeyMultibaseBytes, publicKey...) + + return multibase.Encode(multibase.Base58BTC, publicKeyMultibaseBytes) +} + +func GenerateJSONWebKey2020(publicKey ed25519.PublicKey) (jwk.Key, error) { + return jwk.New(publicKey) +} diff --git a/utils/verification_key_parser.go b/utils/verification_key_parser.go new file mode 100644 index 00000000..8445ecd8 --- /dev/null +++ b/utils/verification_key_parser.go @@ -0,0 +1,83 @@ +package utils + +import ( + "encoding/base64" + "fmt" + + "github.com/mr-tron/base58" + "github.com/multiformats/go-multibase" +) + +func Ed25519VerificationKey2018ToEd25519VerificationKey2020(publicKeyBase58 string) (string, error) { + // get public key from Ed25519VerificationKey2018 key + pubKey, err := base58.Decode(publicKeyBase58) + if err != nil { + return "", err + } + + // generate Ed25519VerificationKey2020 key + return GenerateEd25519VerificationKey2020(pubKey) +} + +func Ed25519VerificationKey2018ToJSONWebKey2020(publicKeyBase58 string) (interface{}, error) { + // get public key from Ed25519VerificationKey2018 key + pubKey, err := base58.Decode(publicKeyBase58) + if err != nil { + return "", err + } + + // generate GenerateJSONWebKey2020 key + return GenerateJSONWebKey2020(pubKey) +} + +func Ed25519VerificationKey2020ToEd25519VerificationKey2018(publicKeyMultibase string) (string, error) { + // get public key from Ed25519VerificationKey2020 key + encoding, pubKey, err := multibase.Decode(publicKeyMultibase) + if encoding != multibase.Base58BTC { + return "", fmt.Errorf("Only Base58BTC encoding is supported") + } + if err != nil { + return "", err + } + + // generate Ed25519VerificationKey2018 key + return GenerateEd25519VerificationKey2018(pubKey), nil +} + +func Ed25519VerificationKey2020ToJSONWebKey2020(publicKeyMultibase string) (interface{}, error) { + // get public key from Ed25519VerificationKey2020 key + encoding, pubKey, err := multibase.Decode(publicKeyMultibase) + if encoding != multibase.Base58BTC { + return "", fmt.Errorf("Only Base58BTC encoding is supported") + } + if err != nil { + return "", err + } + + // generate JSONWebKey2020 key + return GenerateJSONWebKey2020(pubKey) +} + +func JSONWebKey2020ToEd25519VerificationKey2018(publicKeyJwk interface{}) (string, error) { + // get the public key from JSONWebKey2020 + jwk := publicKeyJwk.(map[string]interface{}) + pubKey, err := base64.RawURLEncoding.DecodeString(jwk["x"].(string)) + if err != nil { + return "", err + } + + // generate Ed25519VerificationKey2018 key + return GenerateEd25519VerificationKey2018(pubKey), nil +} + +func JSONWebKey2020ToEd25519VerificationKey2020(publicKeyJwk interface{}) (string, error) { + // get the public key from JSONWebKey2020 + jwk := publicKeyJwk.(map[string]interface{}) + pubKey, err := base64.RawURLEncoding.DecodeString(jwk["x"].(string)) + if err != nil { + return "", err + } + + // generate Ed25519VerificationKey2020 key + return GenerateEd25519VerificationKey2020(pubKey) +} From 6f1cc5cbbe91f68551f07b4d0de8c6c8cc7459b6 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Fri, 14 Apr 2023 19:19:36 +0500 Subject: [PATCH 15/46] Add implementation for supporting transformKey query. --- go.mod | 9 ++ go.sum | 20 +++ services/diddoc/diddoc_query.go | 14 +- .../diddoc/did_query_transform_key_handler.go | 38 +++++ services/diddoc/queries/diddoc/utils.go | 138 ++++++++++++++++++ 5 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 services/diddoc/queries/diddoc/did_query_transform_key_handler.go create mode 100644 services/diddoc/queries/diddoc/utils.go diff --git a/go.mod b/go.mod index af53b051..0b4f6405 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/go-resty/resty/v2 v2.7.0 github.com/google/uuid v1.3.0 github.com/labstack/echo/v4 v4.10.2 + github.com/lestrrat-go/jwx v1.2.25 github.com/mr-tron/base58 v1.2.0 github.com/multiformats/go-multibase v0.2.0 github.com/onsi/ginkgo/v2 v2.9.2 @@ -24,6 +25,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.3 // indirect github.com/cosmos/cosmos-sdk/api v0.1.0 // indirect github.com/cosmos/gogoproto v1.4.6 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect github.com/go-logr/logr v1.2.3 // indirect github.com/go-openapi/jsonpointer v0.19.6 // indirect @@ -31,6 +33,7 @@ require ( github.com/go-openapi/spec v0.20.8 // indirect github.com/go-openapi/swag v0.22.3 // indirect github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 // indirect + github.com/goccy/go-json v0.9.7 // indirect github.com/gogo/protobuf v1.3.3 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect github.com/golang/protobuf v1.5.3 // indirect @@ -39,6 +42,11 @@ require ( github.com/hashicorp/hcl v1.0.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/labstack/gommon v0.4.0 // indirect + github.com/lestrrat-go/backoff/v2 v2.0.8 // indirect + github.com/lestrrat-go/blackmagic v1.0.0 // indirect + github.com/lestrrat-go/httpcc v1.0.1 // indirect + github.com/lestrrat-go/iter v1.0.1 // indirect + github.com/lestrrat-go/option v1.0.0 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -47,6 +55,7 @@ require ( github.com/multiformats/go-base32 v0.0.3 // indirect github.com/multiformats/go-base36 v0.1.0 // indirect github.com/pelletier/go-toml/v2 v2.0.6 // indirect + github.com/pkg/errors v0.9.1 // indirect github.com/spf13/afero v1.9.3 // indirect github.com/spf13/cast v1.5.0 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/go.sum b/go.sum index 0ffaf22d..ab0d3619 100644 --- a/go.sum +++ b/go.sum @@ -61,6 +61,9 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d h1:1iy2qD6JEhHKKhUOA9IWs7mjco7lnw2qx8FsRI2wirE= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.0-20210816181553-5444fa50b93d/go.mod h1:tmAIfUFEirG/Y8jhZ9M+h36obRZAk/1fcSpXwAVlfqE= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -92,6 +95,8 @@ github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPr github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= +github.com/goccy/go-json v0.9.7 h1:IcB+Aqpx/iMHu5Yooh7jEzJk1JZ7Pjtmys2ukPr7EeM= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= @@ -183,6 +188,18 @@ github.com/labstack/echo/v4 v4.10.2 h1:n1jAhnq/elIFTHr1EYpiYtyKgx4RW9ccVgkqByZaN github.com/labstack/echo/v4 v4.10.2/go.mod h1:OEyqf2//K1DFdE57vw2DRgWY0M7s65IVQO2FzvI4J5k= github.com/labstack/gommon v0.4.0 h1:y7cvthEAEbU0yHOf4axH8ZG2NH8knB9iNSoTO8dyIk8= github.com/labstack/gommon v0.4.0/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= +github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A= +github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y= +github.com/lestrrat-go/blackmagic v1.0.0 h1:XzdxDbuQTz0RZZEmdU7cnQxUtFUzgCSPq8RCz4BxIi4= +github.com/lestrrat-go/blackmagic v1.0.0/go.mod h1:TNgH//0vYSs8VXDCfkZLgIrVTTXQELZffUV0tz3MtdQ= +github.com/lestrrat-go/httpcc v1.0.1 h1:ydWCStUeJLkpYyjLDHihupbn2tYmZ7m22BGkcvZZrIE= +github.com/lestrrat-go/httpcc v1.0.1/go.mod h1:qiltp3Mt56+55GPVCbTdM9MlqhvzyuL6W/NMDA8vA5E= +github.com/lestrrat-go/iter v1.0.1 h1:q8faalr2dY6o8bV45uwrxq12bRa1ezKrB6oM9FUgN4A= +github.com/lestrrat-go/iter v1.0.1/go.mod h1:zIdgO1mRKhn8l9vrZJZz9TUMMFbQbLeTsbqPDrJ/OJc= +github.com/lestrrat-go/jwx v1.2.25 h1:tAx93jN2SdPvFn08fHNAhqFJazn5mBBOB8Zli0g0otA= +github.com/lestrrat-go/jwx v1.2.25/go.mod h1:zoNuZymNl5lgdcu6P7K6ie2QRll5HVfF4xwxBBK1NxY= +github.com/lestrrat-go/option v1.0.0 h1:WqAWL8kh8VcSoD6xjSH34/1m8yxluXQbDeKNfvFeEO4= +github.com/lestrrat-go/option v1.0.0/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= @@ -215,6 +232,7 @@ github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= @@ -280,6 +298,7 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220427172511-eb4f295cb31f/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -350,6 +369,7 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index bd05340e..f167c602 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -36,6 +36,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte versionId := dd.GetQueryParam(types.VersionId) versionTime := dd.GetQueryParam(types.VersionTime) + transformKey := types.TransformKeyType(dd.GetQueryParam(types.TransformKey)) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) resourceId := dd.GetQueryParam(types.ResourceId) @@ -46,6 +47,11 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) // } + // Validation transformKey is supported + if !transformKey.IsSupported() { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) @@ -140,6 +146,7 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu versionIdHandler := diddocQueries.VersionIdHandler{} versionTimeHandler := diddocQueries.VersionTimeHandler{} didDocResolveHandler := diddocQueries.DidDocResolveHandler{} + transformKey := diddocQueries.TransformKeyHandler{} err := startHandler.SetNext(c, &versionIdHandler) if err != nil { @@ -156,7 +163,12 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu return nil, err } - err = didDocResolveHandler.SetNext(c, &serviceHandler) + err = didDocResolveHandler.SetNext(c, &transformKey) + if err != nil { + return nil, err + } + + err = transformKey.SetNext(c, &serviceHandler) if err != nil { return nil, err } diff --git a/services/diddoc/queries/diddoc/did_query_transform_key_handler.go b/services/diddoc/queries/diddoc/did_query_transform_key_handler.go new file mode 100644 index 00000000..4c1db9dd --- /dev/null +++ b/services/diddoc/queries/diddoc/did_query_transform_key_handler.go @@ -0,0 +1,38 @@ +package diddoc + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/diddoc/queries" + "github.com/cheqd/did-resolver/types" +) + +type TransformKeyHandler struct { + queries.BaseQueryHandler +} + +func (t *TransformKeyHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // Get Params + transformKey := types.TransformKeyType(service.GetQueryParam(types.TransformKey)) + + // If transformKey is empty, call the next handler. We don't need to handle it here + if transformKey == "" { + return t.Continue(c, service, response) + } + + // We expect here only DidResolution + didResolution, ok := response.(*types.DidResolution) + if !ok { + return nil, types.NewInternalError("response is not DidResolution", types.DIDJSONLD, nil, t.IsDereferencing) + } + + for i, vMethod := range didResolution.Did.VerificationMethod { + result, err := transformVerificationMethodKey(vMethod, transformKey) + if err != nil { + return nil, err + } + didResolution.Did.VerificationMethod[i] = result + } + + // Call the next handler + return t.Continue(c, service, didResolution) +} diff --git a/services/diddoc/queries/diddoc/utils.go b/services/diddoc/queries/diddoc/utils.go new file mode 100644 index 00000000..fe9beda5 --- /dev/null +++ b/services/diddoc/queries/diddoc/utils.go @@ -0,0 +1,138 @@ +package diddoc + +import ( + "fmt" + + "github.com/cheqd/did-resolver/types" + "github.com/cheqd/did-resolver/utils" +) + +func transformKeyEd25519VerificationKey2018ToEd25519VerificationKey2020( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyMultibase, err := utils.Ed25519VerificationKey2018ToEd25519VerificationKey2020( + verificationMethod.PublicKeyBase58, + ) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyBase58 = "" + verificationMethod.Type = string(types.Ed25519VerificationKey2020) + verificationMethod.PublicKeyMultibase = publicKeyMultibase + + return verificationMethod, nil +} + +func transformKeyEd25519VerificationKey2018ToJSONWebKey2020( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyJwk, err := utils.Ed25519VerificationKey2018ToJSONWebKey2020(verificationMethod.PublicKeyBase58) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyBase58 = "" + verificationMethod.Type = string(types.JsonWebKey2020) + verificationMethod.PublicKeyJwk = publicKeyJwk + + return verificationMethod, nil +} + +func transformKeyEd25519VerificationKey2020ToEd25519VerificationKey2018( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyBase58, err := utils.Ed25519VerificationKey2020ToEd25519VerificationKey2018(verificationMethod.PublicKeyMultibase) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyMultibase = "" + verificationMethod.Type = string(types.Ed25519VerificationKey2018) + verificationMethod.PublicKeyBase58 = publicKeyBase58 + + return verificationMethod, nil +} + +func transformKeyEd25519VerificationKey2020ToJSONWebKey2020( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyJwk, err := utils.Ed25519VerificationKey2020ToJSONWebKey2020(verificationMethod.PublicKeyMultibase) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyMultibase = "" + verificationMethod.Type = string(types.JsonWebKey2020) + verificationMethod.PublicKeyJwk = publicKeyJwk + + return verificationMethod, nil +} + +func transformKeyJSONWebKey2020ToEd25519VerificationKey2018( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyBase58, err := utils.JSONWebKey2020ToEd25519VerificationKey2018(verificationMethod.PublicKeyJwk) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyJwk = nil + verificationMethod.Type = string(types.Ed25519VerificationKey2018) + verificationMethod.PublicKeyBase58 = publicKeyBase58 + + return verificationMethod, nil +} + +func transformKeyJSONWebKey2020ToEd25519VerificationKey2020( + verificationMethod types.VerificationMethod, +) (types.VerificationMethod, error) { + publicKeyMultibase, err := utils.JSONWebKey2020ToEd25519VerificationKey2020(verificationMethod.PublicKeyJwk) + if err != nil { + return verificationMethod, err + } + + verificationMethod.PublicKeyJwk = nil + verificationMethod.Type = string(types.Ed25519VerificationKey2020) + verificationMethod.PublicKeyMultibase = publicKeyMultibase + + return verificationMethod, nil +} + +func transformVerificationMethodKey( + verificationMethod types.VerificationMethod, transformKeyType types.TransformKeyType, +) (types.VerificationMethod, error) { + verificationMethodType := types.TransformKeyType(verificationMethod.Type) + if verificationMethodType == transformKeyType { + return verificationMethod, nil + } + + switch verificationMethodType { + case types.Ed25519VerificationKey2018: + switch transformKeyType { + case types.Ed25519VerificationKey2020: + return transformKeyEd25519VerificationKey2018ToEd25519VerificationKey2020(verificationMethod) + case types.JsonWebKey2020: + return transformKeyEd25519VerificationKey2018ToJSONWebKey2020(verificationMethod) + } + + case types.Ed25519VerificationKey2020: + switch transformKeyType { + case types.Ed25519VerificationKey2018: + return transformKeyEd25519VerificationKey2020ToEd25519VerificationKey2018(verificationMethod) + case types.JsonWebKey2020: + return transformKeyEd25519VerificationKey2020ToJSONWebKey2020(verificationMethod) + } + + case types.JsonWebKey2020: + switch transformKeyType { + case types.Ed25519VerificationKey2018: + return transformKeyJSONWebKey2020ToEd25519VerificationKey2018(verificationMethod) + + case types.Ed25519VerificationKey2020: + return transformKeyJSONWebKey2020ToEd25519VerificationKey2020(verificationMethod) + } + } + + return verificationMethod, fmt.Errorf("not supported transform key type") +} From aea43725e4322a1923522077308f2c344a48eccf Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Fri, 14 Apr 2023 19:21:12 +0500 Subject: [PATCH 16/46] Fix golangci-lint mistakes. --- tests/integration/rest/diddoc/query/positive_resource_test.go | 4 ---- types/dereferencing_content_stream.go | 4 ++-- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go index 1b0ee6da..d77c1c8f 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -214,7 +214,3 @@ package query // // }, // // ), // ) - - - - \ No newline at end of file diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index b0a1b0ac..cfb6b463 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -134,7 +134,7 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { return "", nil } for _, v := range versions { - if v.Created.Before(search_time) || v.Created.Equal(search_time){ + if v.Created.Before(search_time) || v.Created.Equal(search_time) { return v.ResourceId, nil } } @@ -142,7 +142,7 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { } func (e DereferencedResourceList) FindAllBeforeTime(stime string) (DereferencedResourceList, error) { - var l = DereferencedResourceList{} + l := DereferencedResourceList{} search_time, err := utils.ParseFromStringTimeToGoTime(stime) if err != nil { return l, err From 2e6b486455e8a750db02072261b6571ae28098d9 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Fri, 14 Apr 2023 19:26:53 +0500 Subject: [PATCH 17/46] Add correct commands for running unit and integration tests. --- Makefile | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index eee1330c..e907b0f9 100644 --- a/Makefile +++ b/Makefile @@ -130,7 +130,10 @@ tidy: ############################################################################### unit-tests: - go test -v ./... + cd tests/unit && ginkgo -r --tags unit --race + +integration-tests: + cd tests/integration/rest && ginkgo -r --tags integration --race lint: golangci-lint run --config .github/linters/.golangci.yaml From 1c47c91d5ed4ab21d6e65475d081e4da1cc1bfa3 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Mon, 17 Apr 2023 10:49:20 +0500 Subject: [PATCH 18/46] Refactor code and fix typo mistakes. --- services/diddoc/diddoc_query.go | 18 ++++++------------ .../diddoc/did_query_transform_key_handler.go | 6 +++++- services/diddoc/queries/diddoc/utils.go | 4 +--- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index f167c602..943443be 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -36,7 +36,6 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte versionId := dd.GetQueryParam(types.VersionId) versionTime := dd.GetQueryParam(types.VersionTime) - transformKey := types.TransformKeyType(dd.GetQueryParam(types.TransformKey)) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) resourceId := dd.GetQueryParam(types.ResourceId) @@ -47,11 +46,6 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) // } - // Validation transformKey is supported - if !transformKey.IsSupported() { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) @@ -109,7 +103,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // DidDoc handlers startHandler := diddocQueries.DidQueryHandler{} - lastHandler, err := dd.RegisterDidDocQueryHanlders(&startHandler, c) + lastHandler, err := dd.RegisterDidDocQueryHandlers(&startHandler, c) if err != nil { return err } @@ -135,18 +129,18 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo return nil } -func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler queries.BaseQueryHandlerI, c services.ResolverContext) (queries.BaseQueryHandlerI, error) { +func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHandlers(startHandler queries.BaseQueryHandlerI, c services.ResolverContext) (queries.BaseQueryHandlerI, error) { // - didQueryHandler // or // - versionIdHandler // After that we can find for service field if it's set. - // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler -> stopHandler + // didQueryHandler -> versionIdHandler -> versionTimeHandler -> transformKeyHandler -> serviceHandler -> stopHandler relativeRefHandler := diddocQueries.RelativeRefHandler{} serviceHandler := diddocQueries.ServiceHandler{} versionIdHandler := diddocQueries.VersionIdHandler{} versionTimeHandler := diddocQueries.VersionTimeHandler{} didDocResolveHandler := diddocQueries.DidDocResolveHandler{} - transformKey := diddocQueries.TransformKeyHandler{} + transformKeyHandler := diddocQueries.TransformKeyHandler{} err := startHandler.SetNext(c, &versionIdHandler) if err != nil { @@ -163,12 +157,12 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu return nil, err } - err = didDocResolveHandler.SetNext(c, &transformKey) + err = didDocResolveHandler.SetNext(c, &transformKeyHandler) if err != nil { return nil, err } - err = transformKey.SetNext(c, &serviceHandler) + err = transformKeyHandler.SetNext(c, &serviceHandler) if err != nil { return nil, err } diff --git a/services/diddoc/queries/diddoc/did_query_transform_key_handler.go b/services/diddoc/queries/diddoc/did_query_transform_key_handler.go index 4c1db9dd..0de65d5c 100644 --- a/services/diddoc/queries/diddoc/did_query_transform_key_handler.go +++ b/services/diddoc/queries/diddoc/did_query_transform_key_handler.go @@ -19,10 +19,14 @@ func (t *TransformKeyHandler) Handle(c services.ResolverContext, service service return t.Continue(c, service, response) } + if !transformKey.IsSupported() { + return nil, types.NewRepresentationNotSupportedError(service.GetDid(), types.DIDJSONLD, nil, t.IsDereferencing) + } + // We expect here only DidResolution didResolution, ok := response.(*types.DidResolution) if !ok { - return nil, types.NewInternalError("response is not DidResolution", types.DIDJSONLD, nil, t.IsDereferencing) + return nil, types.NewInternalError(service.GetDid(), types.DIDJSONLD, nil, t.IsDereferencing) } for i, vMethod := range didResolution.Did.VerificationMethod { diff --git a/services/diddoc/queries/diddoc/utils.go b/services/diddoc/queries/diddoc/utils.go index fe9beda5..3fa9df67 100644 --- a/services/diddoc/queries/diddoc/utils.go +++ b/services/diddoc/queries/diddoc/utils.go @@ -10,9 +10,7 @@ import ( func transformKeyEd25519VerificationKey2018ToEd25519VerificationKey2020( verificationMethod types.VerificationMethod, ) (types.VerificationMethod, error) { - publicKeyMultibase, err := utils.Ed25519VerificationKey2018ToEd25519VerificationKey2020( - verificationMethod.PublicKeyBase58, - ) + publicKeyMultibase, err := utils.Ed25519VerificationKey2018ToEd25519VerificationKey2020(verificationMethod.PublicKeyBase58) if err != nil { return verificationMethod, err } From 745021036a5fa5e045b95d479e6fcac2e7230623 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Mon, 17 Apr 2023 10:12:49 +0400 Subject: [PATCH 19/46] Changed did doc implementation due to the latest changes in doc --- services/diddoc/diddoc_query.go | 13 +- .../diddoc/queries/diddoc/did_doc_helpers.go | 21 +-- .../diddoc/did_doc_metadata_handler.go | 41 ++++++ .../queries/diddoc/did_doc_resolve_handler.go | 16 ++- .../diddoc/did_query_all_versions_handler.go | 29 ++++ .../queries/diddoc/did_query_base_handler.go | 32 ----- .../diddoc/did_query_version_id_handler.go | 10 +- .../diddoc/did_query_version_time_handler.go | 8 +- .../resources/resource_helper_handler.go | 32 ++--- .../queries/resources/resource_helpers.go | 24 ---- .../resource_query_collection_id_handler.go | 4 +- .../resources/resource_query_handler.go | 18 +-- .../resources/resource_query_id_handler.go | 4 +- .../resources/resource_query_name_handler.go | 4 +- .../resources/resource_query_type_handler.go | 4 +- .../resource_query_version_handler.go | 3 +- .../resource_query_version_time_handler.go | 7 +- services/diddoc_service.go | 13 +- .../common/dereferencing_metadata_test.go | 53 ++++---- ...ll_did_doc_versions_ledger_service_test.go | 2 +- types/constants.go | 1 + types/dereferecing_metadata.go | 126 ------------------ types/dereferenced_did_versions_list.go | 31 +++++ types/did_dereferencing.go | 27 ++++ types/did_doc_metadata_list.go | 97 ++++++++++++++ ...adata.go => resolution_diddoc_metadata.go} | 2 + types/resource_dereferencing.go | 25 ++++ types/supported_queries.go | 1 + 28 files changed, 367 insertions(+), 281 deletions(-) create mode 100644 services/diddoc/queries/diddoc/did_doc_metadata_handler.go create mode 100644 services/diddoc/queries/diddoc/did_query_all_versions_handler.go delete mode 100644 services/diddoc/queries/diddoc/did_query_base_handler.go delete mode 100644 services/diddoc/queries/resources/resource_helpers.go create mode 100644 types/dereferenced_did_versions_list.go create mode 100644 types/did_dereferencing.go create mode 100644 types/did_doc_metadata_list.go rename types/{did_doc_metadata.go => resolution_diddoc_metadata.go} (91%) create mode 100644 types/resource_dereferencing.go diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index bd05340e..efd9305f 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -102,7 +102,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // First we need to just ask for Did: // DidDoc handlers - startHandler := diddocQueries.DidQueryHandler{} + startHandler := diddocQueries.DidQueryAllVersionsHandler{} lastHandler, err := dd.RegisterDidDocQueryHanlders(&startHandler, c) if err != nil { return err @@ -134,12 +134,13 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu // or // - versionIdHandler // After that we can find for service field if it's set. - // didQueryHandler -> versionIdHandler -> versionTimeHandler -> serviceHandler -> stopHandler + // VersionIdHandler -> VersionTimeHandler -> DidDocResolveHandler -> DidDocMetadataHandler -> ServiceHandler -> RelativeRefHandler relativeRefHandler := diddocQueries.RelativeRefHandler{} serviceHandler := diddocQueries.ServiceHandler{} versionIdHandler := diddocQueries.VersionIdHandler{} versionTimeHandler := diddocQueries.VersionTimeHandler{} didDocResolveHandler := diddocQueries.DidDocResolveHandler{} + didDocMetadataHandler := diddocQueries.DidDocMetadataHandler{} err := startHandler.SetNext(c, &versionIdHandler) if err != nil { @@ -156,7 +157,12 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu return nil, err } - err = didDocResolveHandler.SetNext(c, &serviceHandler) + err = didDocResolveHandler.SetNext(c, &didDocMetadataHandler) + if err != nil { + return nil, err + } + + err = didDocMetadataHandler.SetNext(c, &serviceHandler) if err != nil { return nil, err } @@ -165,6 +171,7 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu if err != nil { return nil, err } + return &relativeRefHandler, nil } diff --git a/services/diddoc/queries/diddoc/did_doc_helpers.go b/services/diddoc/queries/diddoc/did_doc_helpers.go index c6b91879..95925da4 100644 --- a/services/diddoc/queries/diddoc/did_doc_helpers.go +++ b/services/diddoc/queries/diddoc/did_doc_helpers.go @@ -6,29 +6,14 @@ import ( ) type DidDocHelperHandler struct { - rd *types.DidDereferencing - rc *types.DereferencedDidVersionsList } -func (d *DidDocHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (*types.DereferencedDidVersionsList, error) { - rd, ok := response.(*types.DidDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) - } - d.rd = rd +func (d *DidDocHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (types.DidDocMetadataList, error) { - // Cast to DereferencedResourceListStruct for getting the list of metadatas - rc, ok := d.rd.ContentStream.(*types.DereferencedDidVersionsList) + // Cast to DidDocMetadataList for getting the list of metadatas + rc, ok := response.(types.DidDocMetadataList) if !ok { return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) } - d.rc = rc return rc, nil } - -func (d *DidDocHelperHandler) CastToResult(versionFiltered types.DidDocMetadataList) *types.DidDereferencing { - d.rd.ContentStream = &types.DereferencedDidVersionsList{ - Versions: versionFiltered, - } - return d.rd -} diff --git a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go new file mode 100644 index 00000000..24557044 --- /dev/null +++ b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go @@ -0,0 +1,41 @@ +package diddoc + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/diddoc/queries" + "github.com/cheqd/did-resolver/types" +) + +type DidDocMetadataHandler struct { + queries.BaseQueryHandler + DidDocHelperHandler +} + +func (dd *DidDocMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + metadata := c.QueryParams().Get(types.Metadata) + // If metadata is set we don't need to resolve the DidDoc + if metadata == "" { + return dd.Continue(c, service, response) + } + + allVersions, err := dd.CastToContent(service, response) + if err != nil { + return nil, err + } + if len(allVersions) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, dd.IsDereferencing) + } + + // Get the latest version. If versionId and versionTime handlers were called, should be only 1 element. + // If versionId or versionTime was not called, we will return the latest version + // Cause allVersions are sorted in reverse order the latest version is the first element + versionId := allVersions[0].VersionId + filteredResources := allVersions[0].Resources + result, err := c.DidDocService.GetDIDDocVersionsMetadata(service.GetDid(), versionId, service.GetContentType()) + // Fill the resources + content := result.ContentStream.(*types.ResolutionDidDocMetadata) + content.Resources = filteredResources + result.ContentStream = content + + return dd.Continue(c, service, result) +} \ No newline at end of file diff --git a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go index 26a3fbc9..0f23f245 100644 --- a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go @@ -12,18 +12,24 @@ type DidDocResolveHandler struct { } func (dd *DidDocResolveHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + metadata := c.QueryParams().Get(types.Metadata) + // If metadata is set we don't need to resolve the DidDoc + if metadata != "" { + return dd.Continue(c, service, response) + } + allVersions, err := dd.CastToContent(service, response) if err != nil { return nil, err } - - if len(allVersions.Versions) == 0 { + if len(allVersions) == 0 { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, dd.IsDereferencing) } - // Get the latest version. If versionId and versionTime handlers were called here should only 1 element. + // Get the latest version. If versionId and versionTime handlers were called here, should be only 1 element. // If versionId or versionTime was not called, we will return the latest version - versionId := allVersions.Versions[len(allVersions.Versions)-1].VersionId + versionId := allVersions[0].VersionId + filteredResources := allVersions[0].Resources result, _err := c.DidDocService.Resolve(service.GetDid(), versionId, service.GetContentType()) if _err != nil { @@ -31,6 +37,8 @@ func (dd *DidDocResolveHandler) Handle(c services.ResolverContext, service servi return nil, _err } + result.Metadata.Resources = filteredResources + // Call the next handler return dd.Continue(c, service, result) } diff --git a/services/diddoc/queries/diddoc/did_query_all_versions_handler.go b/services/diddoc/queries/diddoc/did_query_all_versions_handler.go new file mode 100644 index 00000000..6e4f1471 --- /dev/null +++ b/services/diddoc/queries/diddoc/did_query_all_versions_handler.go @@ -0,0 +1,29 @@ +package diddoc + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/diddoc/queries" + "github.com/cheqd/did-resolver/types" +) + +type DidQueryAllVersionsHandler struct { + queries.BaseQueryHandler +} + +func (d *DidQueryAllVersionsHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + // Get Params + did := service.GetDid() + contentType := service.GetContentType() + + result, err := c.DidDocService.GetAllDidDocVersionsMetadata(did, contentType) + if err != nil { + err.IsDereferencing = d.IsDereferencing + return nil, err + } + content, ok := result.ContentStream.(*types.DereferencedDidVersionsList) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) + } + // Call the next handler + return d.Continue(c, service, content.Versions) +} diff --git a/services/diddoc/queries/diddoc/did_query_base_handler.go b/services/diddoc/queries/diddoc/did_query_base_handler.go deleted file mode 100644 index 81d9d541..00000000 --- a/services/diddoc/queries/diddoc/did_query_base_handler.go +++ /dev/null @@ -1,32 +0,0 @@ -package diddoc - -import ( - "github.com/cheqd/did-resolver/services" - "github.com/cheqd/did-resolver/services/diddoc/queries" - "github.com/cheqd/did-resolver/types" -) - -type DidQueryHandler struct { - queries.BaseQueryHandler -} - -func (d *DidQueryHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { - // versionId := service.GetQueryParam(types.VersionId) - // versionTime := service.GetQueryParam(types.VersionTime) - - // // // Here we are handling only query DID without versionId and versionTime - // // if versionId != "" || versionTime != "" { - // // return d.Continue(c, service, response) - // // } - // Get Params - did := service.GetDid() - contentType := service.GetContentType() - - result, err := c.DidDocService.GetAllDidDocVersionsMetadata(did, contentType) - if err != nil { - err.IsDereferencing = d.IsDereferencing - return nil, err - } - // Call the next handler - return d.Continue(c, service, result) -} diff --git a/services/diddoc/queries/diddoc/did_query_version_id_handler.go b/services/diddoc/queries/diddoc/did_query_version_id_handler.go index 8fd2f2e6..68c37e48 100644 --- a/services/diddoc/queries/diddoc/did_query_version_id_handler.go +++ b/services/diddoc/queries/diddoc/did_query_version_id_handler.go @@ -21,18 +21,18 @@ func (v *VersionIdHandler) Handle(c services.ResolverContext, service services.R // Get Params did := service.GetDid() contentType := service.GetContentType() - content, err := v.CastToContent(service, response) + allVersions, err := v.CastToContent(service, response) if err != nil { return nil, err } - versionFiltered := content.Versions.GetByVersionId(versionId) - if versionFiltered == nil { + versionFiltered := allVersions.GetByVersionId(versionId) + if versionFiltered == nil || len(versionFiltered) == 0 { return nil, types.NewNotFoundError(did, contentType, nil, service.GetDereferencing()) } - result := v.CastToResult(versionFiltered) + versionFiltered[0].Resources = allVersions.GetResourcesBeforeNextVersion(versionId) // Call the next handler - return v.Continue(c, service, result) + return v.Continue(c, service, versionFiltered) } diff --git a/services/diddoc/queries/diddoc/did_query_version_time_handler.go b/services/diddoc/queries/diddoc/did_query_version_time_handler.go index 9cf9aa94..f64b56c9 100644 --- a/services/diddoc/queries/diddoc/did_query_version_time_handler.go +++ b/services/diddoc/queries/diddoc/did_query_version_time_handler.go @@ -27,7 +27,7 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services return nil, err } - versionId, _err := allVersions.FindBeforeTime(versionTime) + versionId, _err := allVersions.FindActiveForTime(versionTime) if _err != nil { return nil, types.NewInternalError(did, contentType, _err, v.IsDereferencing) } @@ -36,13 +36,11 @@ func (v *VersionTimeHandler) Handle(c services.ResolverContext, service services return nil, types.NewNotFoundError(did, contentType, nil, v.IsDereferencing) } - versionsFiltered := allVersions.Versions.GetByVersionId(versionId) + versionsFiltered := allVersions.GetByVersionId(versionId) if len(versionsFiltered) == 0 { return nil, types.NewInternalError(did, contentType, nil, v.IsDereferencing) } - result := v.CastToResult(versionsFiltered) - // Call the next handler - return v.Continue(c, service, result) + return v.Continue(c, service, versionsFiltered) } diff --git a/services/diddoc/queries/resources/resource_helper_handler.go b/services/diddoc/queries/resources/resource_helper_handler.go index 15323e9a..241ef803 100644 --- a/services/diddoc/queries/resources/resource_helper_handler.go +++ b/services/diddoc/queries/resources/resource_helper_handler.go @@ -6,33 +6,25 @@ import ( ) type ResourceHelperHandler struct { - rd *types.ResourceDereferencing - rc *types.ResolutionDidDocMetadata } func (d *ResourceHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (*types.ResolutionDidDocMetadata, error) { - rd, ok := response.(*types.ResourceDereferencing) - if !ok { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) - } - d.rd = rd - // Cast to DereferencedResourceListStruct for getting the list of metadatas - rc, ok := d.rd.ContentStream.(*types.ResolutionDidDocMetadata) + // Cast to DidDocMetadataList for getting the list of metadatas + rc, ok := response.(*types.ResolutionDidDocMetadata) if !ok { return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, service.GetDereferencing()) } - d.rc = rc return rc, nil } -func (d *ResourceHelperHandler) CastToResult(resourceCollectionFiltered types.DereferencedResourceList) *types.ResourceDereferencing { - d.rd.ContentStream = &types.ResolutionDidDocMetadata{ - Created: d.rc.Created, - Updated: d.rc.Updated, - Deactivated: d.rc.Deactivated, - VersionId: d.rc.VersionId, - Resources: resourceCollectionFiltered, - } - return d.rd -} +// func (d *ResourceHelperHandler) CastToResult(resourceCollectionFiltered types.DereferencedResourceList) *types.ResourceDereferencing { +// d.rd.ContentStream = &types.ResolutionDidDocMetadata{ +// Created: d.rc.Created, +// Updated: d.rc.Updated, +// Deactivated: d.rc.Deactivated, +// VersionId: d.rc.VersionId, +// Resources: resourceCollectionFiltered, +// } +// return d.rd +// } diff --git a/services/diddoc/queries/resources/resource_helpers.go b/services/diddoc/queries/resources/resource_helpers.go deleted file mode 100644 index 478469ae..00000000 --- a/services/diddoc/queries/resources/resource_helpers.go +++ /dev/null @@ -1,24 +0,0 @@ -package resources - -// import "github.com/cheqd/did-resolver/types" - -// func FilterResourceDereferencingByQueryValue(response types.ResolutionResultI, valuestring) (types.ResourceDereferencing, error) { -// // If response has type of ResourceDefereferencingResult, -// // then we need to check if the resourceCollectionId is the same as the one in the response -// resDeref, ok := response.(*types.ResourceDereferencing) -// if !ok { -// return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), errors.New("ResourceCollectionIdHandler: response is not of type ResourceDereferencing"), d.IsDereferencing) -// } - -// resourceCollection := resDeref.ContentStream.(*types.DereferencedResourceListStruct) -// resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceCollectionId) -// if len(resourceCollectionFiltered) == 0 { -// return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) -// } - -// resDeref.ContentStream = &types.DereferencedResourceListStruct{ -// Resources: resourceCollectionFiltered, -// } - -// return types.ResourceDereferencing{}, nil -// } diff --git a/services/diddoc/queries/resources/resource_query_collection_id_handler.go b/services/diddoc/queries/resources/resource_query_collection_id_handler.go index 1b3291f9..1f24f781 100644 --- a/services/diddoc/queries/resources/resource_query_collection_id_handler.go +++ b/services/diddoc/queries/resources/resource_query_collection_id_handler.go @@ -29,6 +29,8 @@ func (d *ResourceCollectionIdHandler) Handle(c services.ResolverContext, service return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } + resourceCollection.Resources = resourceCollectionFiltered + // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc/queries/resources/resource_query_handler.go b/services/diddoc/queries/resources/resource_query_handler.go index e648b98f..94d422b8 100644 --- a/services/diddoc/queries/resources/resource_query_handler.go +++ b/services/diddoc/queries/resources/resource_query_handler.go @@ -17,18 +17,18 @@ func (d *ResourceQueryHandler) Handle(c services.ResolverContext, service servic if err != nil { return nil, err } + content, ok := resolutionResult.ContentStream.(*types.ResolutionDidDocMetadata) + if !ok { + return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } // Call the next handler - return d.Continue(c, service, resolutionResult) + return d.Continue(c, service, types.DidDocMetadataList{*content}) } - // Otherwise, we need to dereference the resource using information from previous handlers - rp, ok := response.(*types.DidResolution) + // Otherwise just use the result from previous handlers + // Call the next handler + casted, ok := response.(*types.DidResolution) if !ok { return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - resolutionResult, err := c.DidDocService.GetDIDDocVersionsMetadata(rp.Did.Id, rp.Metadata.VersionId, service.GetContentType()) - if err != nil { - return nil, types.NewInternalError(service.GetDid(), service.GetContentType(), err, d.IsDereferencing) - } - // Call the next handler - return d.Continue(c, service, resolutionResult) + return d.Continue(c, service, &casted.Metadata) } diff --git a/services/diddoc/queries/resources/resource_query_id_handler.go b/services/diddoc/queries/resources/resource_query_id_handler.go index 0a125d67..ef327d49 100644 --- a/services/diddoc/queries/resources/resource_query_id_handler.go +++ b/services/diddoc/queries/resources/resource_query_id_handler.go @@ -27,6 +27,8 @@ func (d *ResourceIdHandler) Handle(c services.ResolverContext, service services. return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } + resourceCollection.Resources = resourceCollectionFiltered + // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc/queries/resources/resource_query_name_handler.go b/services/diddoc/queries/resources/resource_query_name_handler.go index 6b5be15c..346d8403 100644 --- a/services/diddoc/queries/resources/resource_query_name_handler.go +++ b/services/diddoc/queries/resources/resource_query_name_handler.go @@ -30,6 +30,8 @@ func (d *ResourceNameHandler) Handle(c services.ResolverContext, service service return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } + resourceCollection.Resources = resourceCollectionFiltered + // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc/queries/resources/resource_query_type_handler.go b/services/diddoc/queries/resources/resource_query_type_handler.go index 097cc492..1bd0320b 100644 --- a/services/diddoc/queries/resources/resource_query_type_handler.go +++ b/services/diddoc/queries/resources/resource_query_type_handler.go @@ -27,6 +27,8 @@ func (d *ResourceTypeHandler) Handle(c services.ResolverContext, service service return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } + resourceCollection.Resources = resourceCollectionFiltered + // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc/queries/resources/resource_query_version_handler.go b/services/diddoc/queries/resources/resource_query_version_handler.go index 2f86bcec..c8b88389 100644 --- a/services/diddoc/queries/resources/resource_query_version_handler.go +++ b/services/diddoc/queries/resources/resource_query_version_handler.go @@ -29,6 +29,7 @@ func (d *ResourceVersionHandler) Handle(c services.ResolverContext, service serv return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } + resourceCollection.Resources = resourceCollectionFiltered // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc/queries/resources/resource_query_version_time_handler.go b/services/diddoc/queries/resources/resource_query_version_time_handler.go index 89489de8..98a01fa4 100644 --- a/services/diddoc/queries/resources/resource_query_version_time_handler.go +++ b/services/diddoc/queries/resources/resource_query_version_time_handler.go @@ -32,7 +32,12 @@ func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service } resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resourceCollection.Resources = resourceCollectionFiltered // Call the next handler - return d.Continue(c, service, d.CastToResult(resourceCollectionFiltered)) + return d.Continue(c, service, resourceCollection) } diff --git a/services/diddoc_service.go b/services/diddoc_service.go index b79812d7..3d71dd94 100644 --- a/services/diddoc_service.go +++ b/services/diddoc_service.go @@ -104,16 +104,27 @@ func (dds DIDDocService) GetAllDidDocVersionsMetadata(did string, contentType ty return nil, err } + resources, err := dds.ledgerService.QueryCollectionResources(did) + if err != nil { + err.ContentType = contentType + return nil, err + } + if len(versions) == 0 { return nil, types.NewNotFoundError(did, contentType, err, false) } + var context string if contentType == types.DIDJSONLD || contentType == types.JSONLD { context = types.ResolutionSchemaJSONLD } - contentStream := types.NewDereferencedDidVersionsList(versions) + contentStream := types.NewDereferencedDidVersionsList(versions, resources) + for i, version := range contentStream.Versions { + filtered := contentStream.Versions.GetResourcesBeforeNextVersion(version.VersionId) + contentStream.Versions[i].Resources = filtered + } return &types.DidDereferencing{Context: context, ContentStream: contentStream, DereferencingMetadata: dereferenceMetadata}, nil } diff --git a/tests/unit/diddoc/common/dereferencing_metadata_test.go b/tests/unit/diddoc/common/dereferencing_metadata_test.go index c32f00a1..5256d549 100644 --- a/tests/unit/diddoc/common/dereferencing_metadata_test.go +++ b/tests/unit/diddoc/common/dereferencing_metadata_test.go @@ -5,59 +5,58 @@ package common import ( "time" - "github.com/cheqd/did-resolver/types" utils "github.com/cheqd/did-resolver/tests/unit" + "github.com/cheqd/did-resolver/types" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" ) var _ = Describe("DereferencingMetadata", func() { - var versionList types.DereferencedDidVersionsList + var versionList types.DidDocMetadataList BeforeEach(func() { _tcreated := utils.MustParseDate("2021-08-23T09:00:00Z") _t1 := utils.MustParseDate("2021-08-23T09:30:00Z") _t2 := utils.MustParseDate("2021-08-23T09:40:00Z") - versionList = types.DereferencedDidVersionsList{ - Versions: []types.ResolutionDidDocMetadata{ - { - VersionId: "1", - Deactivated: false, - Created: &_tcreated, - Updated: nil, - }, - { - VersionId: "2", - Deactivated: false, - Created: &_tcreated, - Updated: &_t1, - }, - { - VersionId: "3", - Deactivated: false, - Created: &_tcreated, - Updated: &_t2, - }, + versionList = types.DidDocMetadataList{ + { + VersionId: "1", + Deactivated: false, + Created: &_tcreated, + Updated: nil, + }, + { + VersionId: "2", + Deactivated: false, + Created: &_tcreated, + Updated: &_t1, + }, + { + VersionId: "3", + Deactivated: false, + Created: &_tcreated, + Updated: &_t2, }, } - }) + }, + ) Context("FindBeforeTime", func() { // Time right after creation but before first update It("should return versionId of metadata with created", func() { - Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) + Expect(versionList.FindActiveForTime(utils.MustParseDate("2021-08-23T09:00:01Z").Format(time.RFC3339))).To(Equal("1")) }) // Time after first update but the the latest It("should return versionId of metadata with the first updated", func() { - Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) + Expect(versionList.FindActiveForTime(utils.MustParseDate("2021-08-23T09:30:01Z").Format(time.RFC3339))).To(Equal("2")) }) It("should return versionId of metadata with the latest updated", func() { - Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) + Expect(versionList.FindActiveForTime(utils.MustParseDate("2021-08-23T09:40:01Z").Format(time.RFC3339))).To(Equal("3")) }) // Time before the creation It("should return empty string if no metadata found", func() { - Expect(versionList.FindBeforeTime(utils.MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) + Expect(versionList.FindActiveForTime(utils.MustParseDate("2021-08-23T08:59:59Z").Format(time.RFC3339))).To(Equal("")) }) }) }) diff --git a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go index 2d3cfe90..307676ba 100644 --- a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go +++ b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go @@ -18,7 +18,7 @@ type queryDIDDocVersionsTestCase struct { var _ = DescribeTable("Test QueryAllDidDocVersionsMetadata method", func(testCase queryDIDDocVersionsTestCase) { didDocMetadata, err := utils.MockLedger.QueryAllDidDocVersionsMetadata(testCase.did) - didDocVersions := types.NewDereferencedDidVersionsList(didDocMetadata) + didDocVersions := types.NewDereferencedDidVersionsList(didDocMetadata, nil) if err != nil { Expect(testCase.expectedError.Code).To(Equal(err.Code)) Expect(testCase.expectedError.Message).To(Equal(err.Message)) diff --git a/types/constants.go b/types/constants.go index 399bd8f2..958c483e 100644 --- a/types/constants.go +++ b/types/constants.go @@ -39,6 +39,7 @@ const ( const ( VersionId string = "versionId" VersionTime string = "versionTime" + Metadata string = "metadata" ServiceQ string = "service" RelativeRef string = "relativeRef" ResourceId string = "resourceId" diff --git a/types/dereferecing_metadata.go b/types/dereferecing_metadata.go index 64d6d290..ec56bcfb 100644 --- a/types/dereferecing_metadata.go +++ b/types/dereferecing_metadata.go @@ -1,135 +1,9 @@ package types -import ( - "sort" - - didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" - "github.com/cheqd/did-resolver/utils" -) - type ( DereferencingMetadata ResolutionMetadata - DidDereferencing struct { - Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` - DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` - ContentStream ContentStreamI `json:"contentStream"` - Metadata ResolutionDidDocMetadata `json:"contentMetadata"` - } ) func NewDereferencingMetadata(did string, contentType ContentType, resolutionError string) DereferencingMetadata { return DereferencingMetadata(NewResolutionMetadata(did, contentType, resolutionError)) } - -// Interface implementation - -func (d DidDereferencing) GetContentType() string { - return string(d.DereferencingMetadata.ContentType) -} - -func (d DidDereferencing) GetBytes() []byte { - if d.ContentStream == nil { - return []byte{} - } - return d.ContentStream.GetBytes() -} - -func (r DidDereferencing) IsRedirect() bool { - return false -} - -// end of Interface implementation - -type ResourceDereferencing struct { - Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` - DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` - ContentStream ContentStreamI `json:"contentStream"` - Metadata ResolutionResourceMetadata `json:"contentMetadata"` -} - -// Interface implementation - -func (d ResourceDereferencing) GetContentType() string { - return string(d.DereferencingMetadata.ContentType) -} - -func (d ResourceDereferencing) GetBytes() []byte { - if d.ContentStream == nil { - return []byte{} - } - return d.ContentStream.GetBytes() -} - -func (r ResourceDereferencing) IsRedirect() bool { - return false -} - -type DidDocMetadataList []ResolutionDidDocMetadata - -func (dd DidDocMetadataList) GetByVersionId(versionId string) DidDocMetadataList { - for _, r := range dd { - if r.VersionId == versionId { - return DidDocMetadataList{r} - } - } - return DidDocMetadataList{} -} - -func (dd DidDocMetadataList) Len() int { - return len(dd) -} - -// Sort in reverse order -func (dd DidDocMetadataList) Less(i, j int) bool { - if dd[i].Updated == nil { - return false - } - if dd[j].Updated == nil { - return true - } - return dd[i].Updated.After(*dd[j].Updated) -} - -func (dd DidDocMetadataList) Swap(i, j int) { - dd[i], dd[j] = dd[j], dd[i] -} - -type DereferencedDidVersionsList struct { - Versions DidDocMetadataList `json:"versions,omitempty"` -} - -func NewDereferencedDidVersionsList(versions []*didTypes.Metadata) *DereferencedDidVersionsList { - didVersionList := DidDocMetadataList{} - for _, version := range versions { - didVersionList = append(didVersionList, NewResolutionDidDocMetadata("", version, nil)) - } - - return &DereferencedDidVersionsList{ - Versions: didVersionList, - } -} - -func (e *DereferencedDidVersionsList) AddContext(newProtocol string) {} -func (e *DereferencedDidVersionsList) RemoveContext() {} -func (e *DereferencedDidVersionsList) GetBytes() []byte { return []byte{} } - -// Returns VersionId if there is a version before the given time -// Otherwise NotFound error -func (e DereferencedDidVersionsList) FindBeforeTime(stime string) (string, error) { - search_time, err := utils.ParseFromStringTimeToGoTime(stime) - if err != nil { - return "", err - } - // Firstly - sort versions by Updated time - versions := e.Versions - sort.Sort(versions) - for _, version := range versions { - if version.Updated != nil && version.Updated.Before(search_time) { - return version.VersionId, nil - } - if version.Updated == nil && version.Created.Before(search_time) { - return version.VersionId, nil - } - } - return "", nil -} diff --git a/types/dereferenced_did_versions_list.go b/types/dereferenced_did_versions_list.go new file mode 100644 index 00000000..4a06ddb9 --- /dev/null +++ b/types/dereferenced_did_versions_list.go @@ -0,0 +1,31 @@ +package types + +import ( + "sort" + + didTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/did/v2" + resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" +) + +type DereferencedDidVersionsList struct { + Versions DidDocMetadataList `json:"versions,omitempty"` +} + +func NewDereferencedDidVersionsList(versions []*didTypes.Metadata, resources []*resourceTypes.Metadata) *DereferencedDidVersionsList { + didVersionList := DidDocMetadataList{} + for _, version := range versions { + didVersionList = append(didVersionList, NewResolutionDidDocMetadata("", version, resources)) + } + + // Sort by updated date or created in reverse order + sort.Sort(didVersionList) + + return &DereferencedDidVersionsList{ + Versions: didVersionList, + } +} + +func (e *DereferencedDidVersionsList) AddContext(newProtocol string) {} +func (e *DereferencedDidVersionsList) RemoveContext() {} +func (e *DereferencedDidVersionsList) GetBytes() []byte { return []byte{} } + diff --git a/types/did_dereferencing.go b/types/did_dereferencing.go new file mode 100644 index 00000000..c81b30ad --- /dev/null +++ b/types/did_dereferencing.go @@ -0,0 +1,27 @@ +package types + +type ( + DidDereferencing struct { + Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` + DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` + ContentStream ContentStreamI `json:"contentStream"` + Metadata ResolutionDidDocMetadata `json:"contentMetadata"` + } +) + +// Interface implementation + +func (d DidDereferencing) GetContentType() string { + return string(d.DereferencingMetadata.ContentType) +} + +func (d DidDereferencing) GetBytes() []byte { + if d.ContentStream == nil { + return []byte{} + } + return d.ContentStream.GetBytes() +} + +func (r DidDereferencing) IsRedirect() bool { + return false +} \ No newline at end of file diff --git a/types/did_doc_metadata_list.go b/types/did_doc_metadata_list.go new file mode 100644 index 00000000..2d05760c --- /dev/null +++ b/types/did_doc_metadata_list.go @@ -0,0 +1,97 @@ +package types + +import ( + "sort" + "time" + + "github.com/cheqd/did-resolver/utils" +) + +type DidDocMetadataList []ResolutionDidDocMetadata + +func (dd DidDocMetadataList) GetByVersionId(versionId string) DidDocMetadataList { + for _, r := range dd { + if r.VersionId == versionId { + return DidDocMetadataList{r} + } + } + return DidDocMetadataList{} +} + +// Returns VersionId if there is a version before the given time +// Otherwise NotFound error +func (e DidDocMetadataList) FindActiveForTime(stime string) (string, error) { + search_time, err := utils.ParseFromStringTimeToGoTime(stime) + if err != nil { + return "", err + } + // Firstly - sort versions by Updated time + versions := e + sort.Sort(versions) + for _, version := range versions { + if version.Updated != nil && version.Updated.Before(search_time) { + return version.VersionId, nil + } + if version.Updated == nil && version.Created.Before(search_time) { + return version.VersionId, nil + } + } + return "", nil +} + +func (dd DidDocMetadataList) GetResourcesBeforeNextVersion(versionId string) DereferencedResourceList { + + if len(dd) == 1 { + return dd[0].Resources + } + // If versionId == the latest versionId then return all the resources + if len(dd) > 1 && dd[0].VersionId == versionId { + return dd[0].Resources + } + + var previous ResolutionDidDocMetadata = dd[0] + for _, r := range dd[1:] { + if r.VersionId == versionId { + var timeBefore string + if previous.Updated != nil { + timeBefore = previous.Updated.Format(time.RFC3339Nano) + } else { + timeBefore = previous.Created.Format(time.RFC3339Nano) + } + filteredResources, err := previous.Resources.FindAllBeforeTime(timeBefore) + if err != nil { + return DereferencedResourceList{} + } + return filteredResources + } + previous = r + } + return DereferencedResourceList{} +} + +func (dd DidDocMetadataList) Len() int { + return len(dd) +} + +// Sort in reverse order +func (dd DidDocMetadataList) Less(i, j int) bool { + if dd[i].Updated == nil { + return false + } + if dd[j].Updated == nil { + return true + } + return dd[i].Updated.After(*dd[j].Updated) +} + +func (dd DidDocMetadataList) Swap(i, j int) { + dd[i], dd[j] = dd[j], dd[i] +} + +// Interface implementation + +func (d DidDocMetadataList) GetContentType() string { return "" } + +func (d DidDocMetadataList) GetBytes() []byte { return []byte{} } + +func (d DidDocMetadataList) IsRedirect() bool { return false } diff --git a/types/did_doc_metadata.go b/types/resolution_diddoc_metadata.go similarity index 91% rename from types/did_doc_metadata.go rename to types/resolution_diddoc_metadata.go index a185be2e..2db6e400 100644 --- a/types/did_doc_metadata.go +++ b/types/resolution_diddoc_metadata.go @@ -43,6 +43,8 @@ func TransformToFragmentMetadata(metadata ResolutionDidDocMetadata) ResolutionDi func (e *ResolutionDidDocMetadata) AddContext(newProtocol string) {} func (e *ResolutionDidDocMetadata) RemoveContext() {} func (e *ResolutionDidDocMetadata) GetBytes() []byte { return []byte{} } +func (e *ResolutionDidDocMetadata) GetContentType() string { return "" } +func (e *ResolutionDidDocMetadata) IsRedirect() bool { return false } func toTime(value *timestamppb.Timestamp) (result *time.Time) { if value == nil || value.AsTime().IsZero() { diff --git a/types/resource_dereferencing.go b/types/resource_dereferencing.go new file mode 100644 index 00000000..815030a5 --- /dev/null +++ b/types/resource_dereferencing.go @@ -0,0 +1,25 @@ +package types + +type ResourceDereferencing struct { + Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` + DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` + ContentStream ContentStreamI `json:"contentStream"` + Metadata ResolutionResourceMetadata `json:"contentMetadata"` +} + +// Interface implementation + +func (d ResourceDereferencing) GetContentType() string { + return string(d.DereferencingMetadata.ContentType) +} + +func (d ResourceDereferencing) GetBytes() []byte { + if d.ContentStream == nil { + return []byte{} + } + return d.ContentStream.GetBytes() +} + +func (r ResourceDereferencing) IsRedirect() bool { + return false +} \ No newline at end of file diff --git a/types/supported_queries.go b/types/supported_queries.go index 9a3da67a..5c567cef 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -41,6 +41,7 @@ var DidSupportedQueries = SupportedQueriesT{ VersionTime, ServiceQ, RelativeRef, + Metadata, } var ResourceSupportedQueries = SupportedQueriesT{ From bf52be5cb405f195d3cd7f527caf3632e8a12b6b Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Mon, 17 Apr 2023 12:17:49 +0400 Subject: [PATCH 20/46] Makes linter happy --- services/diddoc/diddoc_query.go | 2 +- services/diddoc/queries/diddoc/did_doc_helpers.go | 4 +--- .../diddoc/queries/diddoc/did_doc_metadata_handler.go | 8 ++++++-- .../diddoc/queries/diddoc/did_query_version_id_handler.go | 2 +- .../diddoc/queries/resources/resource_helper_handler.go | 4 +--- services/diddoc_service.go | 1 - .../rest/diddoc/query/positive_resource_test.go | 4 ---- types/dereferenced_did_versions_list.go | 1 - types/dereferencing_content_stream.go | 4 ++-- types/did_dereferencing.go | 4 ++-- types/did_doc_metadata_list.go | 1 - types/resource_dereferencing.go | 2 +- 12 files changed, 15 insertions(+), 22 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index efd9305f..ddb948d7 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -171,7 +171,7 @@ func (dd *QueryDIDDocRequestService) RegisterDidDocQueryHanlders(startHandler qu if err != nil { return nil, err } - + return &relativeRefHandler, nil } diff --git a/services/diddoc/queries/diddoc/did_doc_helpers.go b/services/diddoc/queries/diddoc/did_doc_helpers.go index 95925da4..8a84039a 100644 --- a/services/diddoc/queries/diddoc/did_doc_helpers.go +++ b/services/diddoc/queries/diddoc/did_doc_helpers.go @@ -5,11 +5,9 @@ import ( "github.com/cheqd/did-resolver/types" ) -type DidDocHelperHandler struct { -} +type DidDocHelperHandler struct{} func (d *DidDocHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (types.DidDocMetadataList, error) { - // Cast to DidDocMetadataList for getting the list of metadatas rc, ok := response.(types.DidDocMetadataList) if !ok { diff --git a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go index 24557044..eb58efcd 100644 --- a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go @@ -31,11 +31,15 @@ func (dd *DidDocMetadataHandler) Handle(c services.ResolverContext, service serv // Cause allVersions are sorted in reverse order the latest version is the first element versionId := allVersions[0].VersionId filteredResources := allVersions[0].Resources - result, err := c.DidDocService.GetDIDDocVersionsMetadata(service.GetDid(), versionId, service.GetContentType()) + result, _err := c.DidDocService.GetDIDDocVersionsMetadata(service.GetDid(), versionId, service.GetContentType()) + if _err != nil { + _err.IsDereferencing = dd.IsDereferencing + return nil, _err + } // Fill the resources content := result.ContentStream.(*types.ResolutionDidDocMetadata) content.Resources = filteredResources result.ContentStream = content return dd.Continue(c, service, result) -} \ No newline at end of file +} diff --git a/services/diddoc/queries/diddoc/did_query_version_id_handler.go b/services/diddoc/queries/diddoc/did_query_version_id_handler.go index 68c37e48..f519168f 100644 --- a/services/diddoc/queries/diddoc/did_query_version_id_handler.go +++ b/services/diddoc/queries/diddoc/did_query_version_id_handler.go @@ -27,7 +27,7 @@ func (v *VersionIdHandler) Handle(c services.ResolverContext, service services.R } versionFiltered := allVersions.GetByVersionId(versionId) - if versionFiltered == nil || len(versionFiltered) == 0 { + if len(versionFiltered) == 0 { return nil, types.NewNotFoundError(did, contentType, nil, service.GetDereferencing()) } diff --git a/services/diddoc/queries/resources/resource_helper_handler.go b/services/diddoc/queries/resources/resource_helper_handler.go index 241ef803..12e258e7 100644 --- a/services/diddoc/queries/resources/resource_helper_handler.go +++ b/services/diddoc/queries/resources/resource_helper_handler.go @@ -5,11 +5,9 @@ import ( "github.com/cheqd/did-resolver/types" ) -type ResourceHelperHandler struct { -} +type ResourceHelperHandler struct{} func (d *ResourceHelperHandler) CastToContent(service services.RequestServiceI, response types.ResolutionResultI) (*types.ResolutionDidDocMetadata, error) { - // Cast to DidDocMetadataList for getting the list of metadatas rc, ok := response.(*types.ResolutionDidDocMetadata) if !ok { diff --git a/services/diddoc_service.go b/services/diddoc_service.go index 3d71dd94..681e3e08 100644 --- a/services/diddoc_service.go +++ b/services/diddoc_service.go @@ -114,7 +114,6 @@ func (dds DIDDocService) GetAllDidDocVersionsMetadata(did string, contentType ty return nil, types.NewNotFoundError(did, contentType, err, false) } - var context string if contentType == types.DIDJSONLD || contentType == types.JSONLD { context = types.ResolutionSchemaJSONLD diff --git a/tests/integration/rest/diddoc/query/positive_resource_test.go b/tests/integration/rest/diddoc/query/positive_resource_test.go index 1b0ee6da..d77c1c8f 100644 --- a/tests/integration/rest/diddoc/query/positive_resource_test.go +++ b/tests/integration/rest/diddoc/query/positive_resource_test.go @@ -214,7 +214,3 @@ package query // // }, // // ), // ) - - - - \ No newline at end of file diff --git a/types/dereferenced_did_versions_list.go b/types/dereferenced_did_versions_list.go index 4a06ddb9..898b9be4 100644 --- a/types/dereferenced_did_versions_list.go +++ b/types/dereferenced_did_versions_list.go @@ -28,4 +28,3 @@ func NewDereferencedDidVersionsList(versions []*didTypes.Metadata, resources []* func (e *DereferencedDidVersionsList) AddContext(newProtocol string) {} func (e *DereferencedDidVersionsList) RemoveContext() {} func (e *DereferencedDidVersionsList) GetBytes() []byte { return []byte{} } - diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index b0a1b0ac..cfb6b463 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -134,7 +134,7 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { return "", nil } for _, v := range versions { - if v.Created.Before(search_time) || v.Created.Equal(search_time){ + if v.Created.Before(search_time) || v.Created.Equal(search_time) { return v.ResourceId, nil } } @@ -142,7 +142,7 @@ func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { } func (e DereferencedResourceList) FindAllBeforeTime(stime string) (DereferencedResourceList, error) { - var l = DereferencedResourceList{} + l := DereferencedResourceList{} search_time, err := utils.ParseFromStringTimeToGoTime(stime) if err != nil { return l, err diff --git a/types/did_dereferencing.go b/types/did_dereferencing.go index c81b30ad..c273155e 100644 --- a/types/did_dereferencing.go +++ b/types/did_dereferencing.go @@ -1,7 +1,7 @@ package types type ( - DidDereferencing struct { + DidDereferencing struct { Context string `json:"@context,omitempty" example:"https://w3id.org/did-resolution/v1"` DereferencingMetadata DereferencingMetadata `json:"dereferencingMetadata"` ContentStream ContentStreamI `json:"contentStream"` @@ -24,4 +24,4 @@ func (d DidDereferencing) GetBytes() []byte { func (r DidDereferencing) IsRedirect() bool { return false -} \ No newline at end of file +} diff --git a/types/did_doc_metadata_list.go b/types/did_doc_metadata_list.go index 2d05760c..deab587a 100644 --- a/types/did_doc_metadata_list.go +++ b/types/did_doc_metadata_list.go @@ -40,7 +40,6 @@ func (e DidDocMetadataList) FindActiveForTime(stime string) (string, error) { } func (dd DidDocMetadataList) GetResourcesBeforeNextVersion(versionId string) DereferencedResourceList { - if len(dd) == 1 { return dd[0].Resources } diff --git a/types/resource_dereferencing.go b/types/resource_dereferencing.go index 815030a5..188c2b94 100644 --- a/types/resource_dereferencing.go +++ b/types/resource_dereferencing.go @@ -22,4 +22,4 @@ func (d ResourceDereferencing) GetBytes() []byte { func (r ResourceDereferencing) IsRedirect() bool { return false -} \ No newline at end of file +} From b7509d8c1846e65bddb773cacec694ce4f03252d Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Mon, 17 Apr 2023 16:28:34 +0500 Subject: [PATCH 21/46] Add payload files for transformKey query results. --- .../diddoc_ed25519_2018_to_ed25519_2018.json | 416 +++++++++++++++++ .../diddoc_ed25519_2018_to_ed25519_2020.json | 416 +++++++++++++++++ .../diddoc_ed25519_2018_to_jwk_2020.json | 420 ++++++++++++++++++ .../diddoc_ed25519_2020_to_ed25519_2018.json | 65 +++ .../diddoc_ed25519_2020_to_ed25519_2020.json | 65 +++ .../diddoc_ed25519_2020_to_jwk_2020.json | 69 +++ .../diddoc_jwk_2020_to_ed25519_2018.json | 37 ++ .../diddoc_jwk_2020_to_ed25519_2020.json | 37 ++ .../diddoc_jwk_2020_to_jwk_2020.json | 41 ++ 9 files changed, 1566 insertions(+) create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2018.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_jwk_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2018.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json new file mode 100644 index 00000000..b68108d0 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json @@ -0,0 +1,416 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T06:37:48Z", + "did": { + "didString": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "methodSpecificId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "controller": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "publicKeyBase58": "FR3Yu1vcRXxWmRDCw6Hd8PcPeM71reANbgZKdLv9qo27" + } + ], + "authentication": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-02-21T14:28:47.406713879Z", + "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "b9029cf7-c40b-4850-b9a1-9bfad46a68d7", + "created": "2023-02-22T08:55:19.36229052Z", + "checksum": "8c9fd6ea0aecec6a865a87c48b6c24fdf994411054a9fb23820bd749c05bd65a", + "previousVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.53.53714418716473", + "created": "2023-02-22T06:52:23.286538106Z", + "checksum": "1bfc0482df474af911ca1deb0212c7e51b327bb6da5761237e00359534a64e60", + "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", + "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c8547360-f298-44c0-a785-7b4dc50b26cd", + "created": "2023-02-22T06:47:45.801527254Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.80326856085772", + "created": "2023-02-22T06:45:29.298572213Z", + "checksum": "7e03f7f4efc8ff82b19957e81d377e52f4c4f23e860bd90f1a51a51fd6b65e2b", + "previousVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.189123052353757", + "created": "2023-02-22T06:27:44.050370138Z", + "checksum": "7b4f4a81fc39a920bc1a4e0bff0e9ff1c91057702dd920dd1936090db099f76d", + "previousVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.40.23710152624007", + "created": "2023-02-21T14:29:04.895533682Z", + "checksum": "2f95be447ce790c337767af65cc65e7312244bfd7f2a3ee0886e4c7956be3cee", + "previousVersionId": null, + "nextVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491" + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json new file mode 100644 index 00000000..d42c0c06 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json @@ -0,0 +1,416 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T07:47:02Z", + "did": { + "didString": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "methodSpecificId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "controller": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "publicKeyMultibase": "z6MktsJbVGB3m5Sysv3ucfFTyVAPTvNsGXQjHhUFTctAm1oV" + } + ], + "authentication": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-02-21T14:28:47.406713879Z", + "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "b9029cf7-c40b-4850-b9a1-9bfad46a68d7", + "created": "2023-02-22T08:55:19.36229052Z", + "checksum": "8c9fd6ea0aecec6a865a87c48b6c24fdf994411054a9fb23820bd749c05bd65a", + "previousVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.53.53714418716473", + "created": "2023-02-22T06:52:23.286538106Z", + "checksum": "1bfc0482df474af911ca1deb0212c7e51b327bb6da5761237e00359534a64e60", + "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", + "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c8547360-f298-44c0-a785-7b4dc50b26cd", + "created": "2023-02-22T06:47:45.801527254Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.80326856085772", + "created": "2023-02-22T06:45:29.298572213Z", + "checksum": "7e03f7f4efc8ff82b19957e81d377e52f4c4f23e860bd90f1a51a51fd6b65e2b", + "previousVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.189123052353757", + "created": "2023-02-22T06:27:44.050370138Z", + "checksum": "7b4f4a81fc39a920bc1a4e0bff0e9ff1c91057702dd920dd1936090db099f76d", + "previousVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.40.23710152624007", + "created": "2023-02-21T14:29:04.895533682Z", + "checksum": "2f95be447ce790c337767af65cc65e7312244bfd7f2a3ee0886e4c7956be3cee", + "previousVersionId": null, + "nextVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491" + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json new file mode 100644 index 00000000..376225cb --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json @@ -0,0 +1,420 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T07:55:10Z", + "did": { + "didString": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "methodSpecificId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "controller": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1", + "type": "JsonWebKey2020", + "controller": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "publicKeyJwk": { + "crv": "Ed25519", + "kty": "OKP", + "x": "1ixwit_p2SLFNOlEXFbeFjLs18CwyKLQFwc18-3GJZg" + } + } + ], + "authentication": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-02-21T14:28:47.406713879Z", + "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "b9029cf7-c40b-4850-b9a1-9bfad46a68d7", + "created": "2023-02-22T08:55:19.36229052Z", + "checksum": "8c9fd6ea0aecec6a865a87c48b6c24fdf994411054a9fb23820bd749c05bd65a", + "previousVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.53.53714418716473", + "created": "2023-02-22T06:52:23.286538106Z", + "checksum": "1bfc0482df474af911ca1deb0212c7e51b327bb6da5761237e00359534a64e60", + "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", + "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c8547360-f298-44c0-a785-7b4dc50b26cd", + "created": "2023-02-22T06:47:45.801527254Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.80326856085772", + "created": "2023-02-22T06:45:29.298572213Z", + "checksum": "7e03f7f4efc8ff82b19957e81d377e52f4c4f23e860bd90f1a51a51fd6b65e2b", + "previousVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.189123052353757", + "created": "2023-02-22T06:27:44.050370138Z", + "checksum": "7b4f4a81fc39a920bc1a4e0bff0e9ff1c91057702dd920dd1936090db099f76d", + "previousVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.40.23710152624007", + "created": "2023-02-21T14:29:04.895533682Z", + "checksum": "2f95be447ce790c337767af65cc65e7312244bfd7f2a3ee0886e4c7956be3cee", + "previousVersionId": null, + "nextVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491" + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2018.json new file mode 100644 index 00000000..6e63ed23 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2018.json @@ -0,0 +1,65 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T11:25:32Z", + "did": { + "didString": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "methodSpecificId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "controller": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "publicKeyBase58": "6Mkjhidm3FJxUo4FekqyhXGMqrDLnrw9NtuzfmGQ61UXW1e" + } + ], + "authentication": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-01-25T11:58:10.390039347Z", + "versionId": "e5615fc2-6f13-42b1-989c-49576a574cef", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceName": "Demo Resource", + "resourceType": "String", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2023-01-25T12:08:39.633307395Z", + "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceName": "ResourceName", + "resourceType": "String", + "mediaType": "text/plain; charset=utf-8", + "resourceVersion": "", + "created": "2023-01-25T12:04:52.261619721Z", + "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2020.json new file mode 100644 index 00000000..2d81b4b1 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2020.json @@ -0,0 +1,65 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T06:40:51Z", + "did": { + "didString": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "methodSpecificId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "controller": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "publicKeyMultibase": "z6Mkjhidm3FJxUo4FekqyhXGMqrDLnrw9NtuzfmGQ61UXW1e" + } + ], + "authentication": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-01-25T11:58:10.390039347Z", + "versionId": "e5615fc2-6f13-42b1-989c-49576a574cef", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceName": "Demo Resource", + "resourceType": "String", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2023-01-25T12:08:39.633307395Z", + "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceName": "ResourceName", + "resourceType": "String", + "mediaType": "text/plain; charset=utf-8", + "resourceVersion": "", + "created": "2023-01-25T12:04:52.261619721Z", + "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_jwk_2020.json new file mode 100644 index 00000000..e99ea049 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2020_to_jwk_2020.json @@ -0,0 +1,69 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T10:51:25Z", + "did": { + "didString": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "methodSpecificId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "controller": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1", + "type": "JsonWebKey2020", + "controller": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "publicKeyJwk": { + "crv": "Ed25519", + "kty": "OKP", + "x": "7QFN_qFf9LLv2ijsCkW-PeyER6I6URROCw11K95LPjMmWQ" + } + } + ], + "authentication": [ + "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-01-25T11:58:10.390039347Z", + "versionId": "e5615fc2-6f13-42b1-989c-49576a574cef", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceName": "Demo Resource", + "resourceType": "String", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2023-01-25T12:08:39.633307395Z", + "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceName": "ResourceName", + "resourceType": "String", + "mediaType": "text/plain; charset=utf-8", + "resourceVersion": "", + "created": "2023-01-25T12:04:52.261619721Z", + "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2018.json new file mode 100644 index 00000000..451863ea --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2018.json @@ -0,0 +1,37 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T11:12:27Z", + "did": { + "didString": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "methodSpecificId": "54c96733-32ad-4878-b7ce-f62f4fdf3291", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "controller": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "publicKeyBase58": "GagrZ3tmrK6uHkqiP5UxCcdXVAVRHRwcEedcJTwNrgmz" + } + ], + "authentication": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-26T10:13:46Z", + "versionId": "6e52097d-8257-51af-9862-8a31140b6c2c" + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2020.json new file mode 100644 index 00000000..50e2a569 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2020.json @@ -0,0 +1,37 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T11:18:18Z", + "did": { + "didString": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "methodSpecificId": "54c96733-32ad-4878-b7ce-f62f4fdf3291", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "controller": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "publicKeyMultibase": "z6Mkv2wu9J9DBrbNQFgR4eSo3iBXJjmGhKBxvfYY8juPmuZN" + } + ], + "authentication": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-26T10:13:46Z", + "versionId": "6e52097d-8257-51af-9862-8a31140b6c2c" + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json new file mode 100644 index 00000000..6b865575 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json @@ -0,0 +1,41 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T06:42:38Z", + "did": { + "didString": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "methodSpecificId": "54c96733-32ad-4878-b7ce-f62f4fdf3291", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "controller": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1", + "type": "JsonWebKey2020", + "controller": "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291", + "publicKeyJwk": { + "crv": "Ed25519", + "kty": "OKP", + "x": "54CIt_4th9Hux9RAT618MWzmCpohV8zps-w3sdEcemU" + } + } + ], + "authentication": [ + "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-26T10:13:46Z", + "versionId": "6e52097d-8257-51af-9862-8a31140b6c2c" + } +} From 79e6526302138b7de94c7c89bd8610588f8cddb7 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Mon, 17 Apr 2023 16:31:40 +0500 Subject: [PATCH 22/46] Add positive integration tests for getting DIDDoc with transformKey query parameter. --- .../query/transform_key/positive_test.go | 165 ++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 tests/integration/rest/diddoc/query/transform_key/positive_test.go diff --git a/tests/integration/rest/diddoc/query/transform_key/positive_test.go b/tests/integration/rest/diddoc/query/transform_key/positive_test.go new file mode 100644 index 00000000..f2e89eb6 --- /dev/null +++ b/tests/integration/rest/diddoc/query/transform_key/positive_test.go @@ -0,0 +1,165 @@ +//go:build integration + +package transformKey + +import ( + "encoding/json" + "fmt" + "net/http" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + "github.com/cheqd/did-resolver/types" + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var ( + DidWithEd25519VerificationKey2018Key = "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + DidWithJsonWebKey2020Key = "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" +) + +var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", func(testCase utils.PositiveTestCase) { + client := resty.New() + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + Get(testCase.DidURL) + Expect(err).To(BeNil()) + + var receivedDidResolution types.DidResolution + Expect(json.Unmarshal(resp.Body(), &receivedDidResolution)).To(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + var expectedDidResolution types.DidResolution + Expect(utils.ConvertJsonFileToType(testCase.ExpectedJSONPath, &expectedDidResolution)).To(BeNil()) + + utils.AssertDidResolution(expectedDidResolution, receivedDidResolution) +}, + Entry( + "can get DIDDoc (Ed25519VerificationKey2018) with supported Ed25519VerificationKey2018 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithEd25519VerificationKey2018Key, + string(types.Ed25519VerificationKey2018), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2018) with supported Ed25519VerificationKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithEd25519VerificationKey2018Key, + string(types.Ed25519VerificationKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2018) with supported JSONWebKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithEd25519VerificationKey2018Key, + string(types.JsonWebKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with supported Ed25519VerificationKey2018 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.UUIDStyleTestnetDid, + string(types.Ed25519VerificationKey2018), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2018.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with supported Ed25519VerificationKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.UUIDStyleTestnetDid, + string(types.Ed25519VerificationKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2020_to_ed25519_2020.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with supported JSONWebKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.UUIDStyleTestnetDid, + string(types.JsonWebKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_ed25519_2020_to_jwk_2020.json", + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with supported Ed25519VerificationKey2018 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithJsonWebKey2020Key, + string(types.Ed25519VerificationKey2018), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2018.json", + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with supported Ed25519VerificationKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithJsonWebKey2020Key, + string(types.Ed25519VerificationKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_jwk_2020_to_ed25519_2020.json", + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with supported JSONWebKey2020 transformKey query parameter", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + DidWithJsonWebKey2020Key, + string(types.JsonWebKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json", + }, + ), +) From e6be49a99f1760c8097134caff69baada66bfd4f Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Mon, 17 Apr 2023 16:32:53 +0500 Subject: [PATCH 23/46] Add integration tests runner for running transformKey query. --- .../transform_key/transform_key_suite_test.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go diff --git a/tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go b/tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go new file mode 100644 index 00000000..6c9ac2b4 --- /dev/null +++ b/tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go @@ -0,0 +1,15 @@ +//go:build integration + +package transformKey + +import ( + "testing" + + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +func TestTransformKey(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "[Integration Test]: Transform Key Query") +} From 3b095b9937471a07511e8b6511b0281b99bf2688 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Mon, 17 Apr 2023 16:45:20 +0500 Subject: [PATCH 24/46] Update incorrect last merge. --- services/diddoc/diddoc_query.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index f1b2dbc1..99fa2e1d 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -102,7 +102,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo // First we need to just ask for Did: // DidDoc handlers - startHandler := diddocQueries.DidQueryHandler{} + startHandler := diddocQueries.DidQueryAllVersionsHandler{} lastHandler, err := dd.RegisterDidDocQueryHandlers(&startHandler, c) if err != nil { return err From ef5cdc18a57ca67675fbf168820341a46231ebf2 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Tue, 18 Apr 2023 12:21:03 +0500 Subject: [PATCH 25/46] Fix problem with an incorrect concatenation logic ResourceURI field. --- services/diddoc_service.go | 2 +- .../ledger/query_all_did_doc_versions_ledger_service_test.go | 2 +- types/dereferenced_did_versions_list.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/diddoc_service.go b/services/diddoc_service.go index 681e3e08..c7c61cc6 100644 --- a/services/diddoc_service.go +++ b/services/diddoc_service.go @@ -119,7 +119,7 @@ func (dds DIDDocService) GetAllDidDocVersionsMetadata(did string, contentType ty context = types.ResolutionSchemaJSONLD } - contentStream := types.NewDereferencedDidVersionsList(versions, resources) + contentStream := types.NewDereferencedDidVersionsList(did, versions, resources) for i, version := range contentStream.Versions { filtered := contentStream.Versions.GetResourcesBeforeNextVersion(version.VersionId) contentStream.Versions[i].Resources = filtered diff --git a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go index 307676ba..198d3e71 100644 --- a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go +++ b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go @@ -18,7 +18,7 @@ type queryDIDDocVersionsTestCase struct { var _ = DescribeTable("Test QueryAllDidDocVersionsMetadata method", func(testCase queryDIDDocVersionsTestCase) { didDocMetadata, err := utils.MockLedger.QueryAllDidDocVersionsMetadata(testCase.did) - didDocVersions := types.NewDereferencedDidVersionsList(didDocMetadata, nil) + didDocVersions := types.NewDereferencedDidVersionsList(testCase.did, didDocMetadata, nil) if err != nil { Expect(testCase.expectedError.Code).To(Equal(err.Code)) Expect(testCase.expectedError.Message).To(Equal(err.Message)) diff --git a/types/dereferenced_did_versions_list.go b/types/dereferenced_did_versions_list.go index 898b9be4..ce6f02e2 100644 --- a/types/dereferenced_did_versions_list.go +++ b/types/dereferenced_did_versions_list.go @@ -11,10 +11,10 @@ type DereferencedDidVersionsList struct { Versions DidDocMetadataList `json:"versions,omitempty"` } -func NewDereferencedDidVersionsList(versions []*didTypes.Metadata, resources []*resourceTypes.Metadata) *DereferencedDidVersionsList { +func NewDereferencedDidVersionsList(did string, versions []*didTypes.Metadata, resources []*resourceTypes.Metadata) *DereferencedDidVersionsList { didVersionList := DidDocMetadataList{} for _, version := range versions { - didVersionList = append(didVersionList, NewResolutionDidDocMetadata("", version, resources)) + didVersionList = append(didVersionList, NewResolutionDidDocMetadata(did, version, resources)) } // Sort by updated date or created in reverse order From 894ab7399dc4b099b0ac4eaff78c8edcc57a9ab3 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Tue, 18 Apr 2023 13:42:08 +0400 Subject: [PATCH 26/46] Small validation and refactorings --- services/diddoc/diddoc_query.go | 13 ++++----- .../diddoc/did_doc_metadata_handler.go | 7 ++++- .../queries/diddoc/did_doc_resolve_handler.go | 5 ++++ .../resource_query_metadata_handler.go | 12 +++------ .../resource_query_version_time_handler.go | 11 +++----- .../resources/resource_validation_handler.go | 27 ++++++++++++++++--- types/dereferencing_content_stream.go | 26 ++++++++++++++++++ types/did_doc_metadata_list.go | 4 +-- types/resource_dereferencing.go | 12 +++++++++ 9 files changed, 89 insertions(+), 28 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index ddb948d7..ef4acf18 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -41,14 +41,9 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte resourceId := dd.GetQueryParam(types.ResourceId) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) - // // Validation of query parameters - // if versionId != "" && versionTime != "" { - // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - // } - // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + return types.NewRepresentationNotSupportedError(dd.GetDid(), dd.GetContentType(), nil, dd.IsDereferencing) } // Validate time format @@ -77,6 +72,12 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewInvalidDidUrlError(resourceId, dd.RequestedContentType, nil, dd.IsDereferencing) } + // If there is only 1 query parameter and it's resourceVersionTime, + // then we need to return RepresentationNotSupported error + if len(dd.Queries) == 1 && resourceVersionTime != "" { + return types.NewRepresentationNotSupportedError(dd.GetDid(), dd.GetContentType(), nil, dd.IsDereferencing) + } + return nil } diff --git a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go index eb58efcd..a1d91cf4 100644 --- a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go @@ -1,6 +1,8 @@ package diddoc import ( + "sort" + "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" @@ -14,7 +16,7 @@ type DidDocMetadataHandler struct { func (dd *DidDocMetadataHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { metadata := c.QueryParams().Get(types.Metadata) // If metadata is set we don't need to resolve the DidDoc - if metadata == "" { + if metadata == "" && metadata != "true" { return dd.Continue(c, service, response) } @@ -31,6 +33,9 @@ func (dd *DidDocMetadataHandler) Handle(c services.ResolverContext, service serv // Cause allVersions are sorted in reverse order the latest version is the first element versionId := allVersions[0].VersionId filteredResources := allVersions[0].Resources + + // Filter in descending order + sort.Sort(filteredResources) result, _err := c.DidDocService.GetDIDDocVersionsMetadata(service.GetDid(), versionId, service.GetContentType()) if _err != nil { _err.IsDereferencing = dd.IsDereferencing diff --git a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go index 0f23f245..729b9d16 100644 --- a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go @@ -1,6 +1,8 @@ package diddoc import ( + "sort" + "github.com/cheqd/did-resolver/services" "github.com/cheqd/did-resolver/services/diddoc/queries" "github.com/cheqd/did-resolver/types" @@ -30,6 +32,9 @@ func (dd *DidDocResolveHandler) Handle(c services.ResolverContext, service servi // If versionId or versionTime was not called, we will return the latest version versionId := allVersions[0].VersionId filteredResources := allVersions[0].Resources + + // Filter in descending order + sort.Sort(filteredResources) result, _err := c.DidDocService.Resolve(service.GetDid(), versionId, service.GetContentType()) if _err != nil { diff --git a/services/diddoc/queries/resources/resource_query_metadata_handler.go b/services/diddoc/queries/resources/resource_query_metadata_handler.go index 375d6ade..59991b20 100644 --- a/services/diddoc/queries/resources/resource_query_metadata_handler.go +++ b/services/diddoc/queries/resources/resource_query_metadata_handler.go @@ -20,17 +20,13 @@ func (d *ResourceMetadataHandler) Handle(c services.ResolverContext, service ser return nil, err } - // After all filters and validation only one resource should be left - resource := resourceCollection.Resources[0] - if resourceMetadata == "true" { - dereferencingResult, err := c.ResourceService.DereferenceResourceMetadata(service.GetDid(), resource.ResourceId, service.GetContentType()) - if err != nil { - return nil, err - } + dereferencingResult := types.NewResourceDereferencingFromContent(service.GetDid(), service.GetContentType(), resourceCollection) return d.Continue(c, service, dereferencingResult) } - // var dereferenceResult types.ResolutionResultI + // If it's not a metadata query let's just get the latest Resource. + // They are sorted in descending order by default + resource := resourceCollection.Resources[0] dereferenceResult, _err := c.ResourceService.DereferenceResourceData(service.GetDid(), resource.ResourceId, service.GetContentType()) // _err = _err.(*types.IdentityError) if _err != nil { diff --git a/services/diddoc/queries/resources/resource_query_version_time_handler.go b/services/diddoc/queries/resources/resource_query_version_time_handler.go index 98a01fa4..0451747a 100644 --- a/services/diddoc/queries/resources/resource_query_version_time_handler.go +++ b/services/diddoc/queries/resources/resource_query_version_time_handler.go @@ -23,20 +23,15 @@ func (d *ResourceVersionTimeHandler) Handle(c services.ResolverContext, service return nil, err } // Get resourceId of the resource with the closest time to the requested time - resourceId, err := resourceCollection.Resources.FindBeforeTime(resourceVersionTime) + resourceList, err := resourceCollection.Resources.FindAllBeforeTime(resourceVersionTime) if err != nil { return nil, types.NewRepresentationNotSupportedError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - if resourceId == "" { + if len(resourceList) == 0 { return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) } - resourceCollectionFiltered := resourceCollection.Resources.GetByResourceId(resourceId) - if len(resourceCollectionFiltered) == 0 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) - } - - resourceCollection.Resources = resourceCollectionFiltered + resourceCollection.Resources = resourceList // Call the next handler return d.Continue(c, service, resourceCollection) diff --git a/services/diddoc/queries/resources/resource_validation_handler.go b/services/diddoc/queries/resources/resource_validation_handler.go index 9f3d5d5a..e7123ba1 100644 --- a/services/diddoc/queries/resources/resource_validation_handler.go +++ b/services/diddoc/queries/resources/resource_validation_handler.go @@ -12,16 +12,37 @@ type ResourceValidationHandler struct { } func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceName := service.GetQueryParam(types.ResourceName) + resourceType := service.GetQueryParam(types.ResourceType) + // Cast to just list of resources resourceCollection, err := d.CastToContent(service, response) if err != nil { return nil, err } - if len(resourceCollection.Resources) != 1 { - return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + if resourceType != "" { + // If we have 2 or more resources we need to check resource names. + // If resource names are the same we need to return the latest. + // If resource names are different we need to return an error. + if !resourceCollection.Resources.AreResourceNamesTheSame() { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + // They are sorted in descending order by default + resourceCollection.Resources = types.DereferencedResourceList{resourceCollection.Resources[0]} + } + + if resourceName != "" { + // If we have 2 or more resources we need to check resource types. + // If resource types are the same we need to return the latest. + // If resource types are different we need to return an error. + if !resourceCollection.Resources.AreResourceTypesTheSame() { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + // They are sorted in descending order by default + resourceCollection.Resources = types.DereferencedResourceList{resourceCollection.Resources[0]} } // Call the next handler - return d.Continue(c, service, response) + return d.Continue(c, service, resourceCollection) } diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index cfb6b463..64db1a5d 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -161,6 +161,32 @@ func (e DereferencedResourceList) FindAllBeforeTime(stime string) (DereferencedR return l, nil } +func (e DereferencedResourceList) AreResourceNamesTheSame() bool { + if len(e) == 0 { + return true + } + firstName := e[0].Name + for _, r := range e { + if r.Name != firstName { + return false + } + } + return true +} + +func (e DereferencedResourceList) AreResourceTypesTheSame() bool { + if len(e) == 0 { + return true + } + firstType := e[0].ResourceType + for _, r := range e { + if r.ResourceType != firstType { + return false + } + } + return true +} + func (dr DereferencedResourceList) Len() int { return len(dr) } diff --git a/types/did_doc_metadata_list.go b/types/did_doc_metadata_list.go index deab587a..2947320e 100644 --- a/types/did_doc_metadata_list.go +++ b/types/did_doc_metadata_list.go @@ -29,10 +29,10 @@ func (e DidDocMetadataList) FindActiveForTime(stime string) (string, error) { versions := e sort.Sort(versions) for _, version := range versions { - if version.Updated != nil && version.Updated.Before(search_time) { + if version.Updated != nil && (version.Updated.Before(search_time) || version.Updated.Equal(search_time)) { return version.VersionId, nil } - if version.Updated == nil && version.Created.Before(search_time) { + if version.Updated == nil && (version.Created.Before(search_time) || version.Created.Equal(search_time)) { return version.VersionId, nil } } diff --git a/types/resource_dereferencing.go b/types/resource_dereferencing.go index 188c2b94..bbc12b65 100644 --- a/types/resource_dereferencing.go +++ b/types/resource_dereferencing.go @@ -7,6 +7,18 @@ type ResourceDereferencing struct { Metadata ResolutionResourceMetadata `json:"contentMetadata"` } +func NewResourceDereferencingFromContent(did string, contentType ContentType, contentStream ContentStreamI) *ResourceDereferencing { + dereferenceMetadata := NewDereferencingMetadata(did, contentType, "") + + var context string + if contentType == DIDJSONLD || contentType == JSONLD { + context = ResolutionSchemaJSONLD + } + + return &ResourceDereferencing{Context: context, ContentStream: contentStream, DereferencingMetadata: dereferenceMetadata} + +} + // Interface implementation func (d ResourceDereferencing) GetContentType() string { From 81d10ef9c40393f16cd4b83a3136b891a8b6b5a9 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Tue, 18 Apr 2023 16:25:56 +0500 Subject: [PATCH 27/46] Add more positive integration tests. --- .../query/transform_key/positive_test.go | 30 ++ .../diddoc_transform_key_and_version_id.json | 416 ++++++++++++++++++ .../diddoc_transform_key_version_time.json | 416 ++++++++++++++++++ 3 files changed, 862 insertions(+) create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json diff --git a/tests/integration/rest/diddoc/query/transform_key/positive_test.go b/tests/integration/rest/diddoc/query/transform_key/positive_test.go index f2e89eb6..5825220d 100644 --- a/tests/integration/rest/diddoc/query/transform_key/positive_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/positive_test.go @@ -162,4 +162,34 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_jwk_2020_to_jwk_2020.json", }, ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2018) with supported Ed25519VerificationKey2020 transformKey and DIDDoc versionId queries", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&versionId=%s", + DidWithEd25519VerificationKey2018Key, + string(types.Ed25519VerificationKey2020), + "44f49254-8106-40ee-99ad-e50ac9517346", + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_transform_key_and_version_id.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2018) with supported Ed25519VerificationKey2020 transformKey and DIDDoc versionTime queries", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&versionTime=%s", + DidWithEd25519VerificationKey2018Key, + string(types.Ed25519VerificationKey2020), + "2023-02-21T14:28:48.406713879Z", + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_transform_key_version_time.json", + }, + ), ) diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json new file mode 100644 index 00000000..acf27909 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json @@ -0,0 +1,416 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T12:02:26Z", + "did": { + "didString": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "methodSpecificId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "controller": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "publicKeyMultibase": "z6MktsJbVGB3m5Sysv3ucfFTyVAPTvNsGXQjHhUFTctAm1oV" + } + ], + "authentication": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-02-21T14:28:47.406713879Z", + "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "b9029cf7-c40b-4850-b9a1-9bfad46a68d7", + "created": "2023-02-22T08:55:19.36229052Z", + "checksum": "8c9fd6ea0aecec6a865a87c48b6c24fdf994411054a9fb23820bd749c05bd65a", + "previousVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.53.53714418716473", + "created": "2023-02-22T06:52:23.286538106Z", + "checksum": "1bfc0482df474af911ca1deb0212c7e51b327bb6da5761237e00359534a64e60", + "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", + "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c8547360-f298-44c0-a785-7b4dc50b26cd", + "created": "2023-02-22T06:47:45.801527254Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.80326856085772", + "created": "2023-02-22T06:45:29.298572213Z", + "checksum": "7e03f7f4efc8ff82b19957e81d377e52f4c4f23e860bd90f1a51a51fd6b65e2b", + "previousVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.189123052353757", + "created": "2023-02-22T06:27:44.050370138Z", + "checksum": "7b4f4a81fc39a920bc1a4e0bff0e9ff1c91057702dd920dd1936090db099f76d", + "previousVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.40.23710152624007", + "created": "2023-02-21T14:29:04.895533682Z", + "checksum": "2f95be447ce790c337767af65cc65e7312244bfd7f2a3ee0886e4c7956be3cee", + "previousVersionId": null, + "nextVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491" + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json new file mode 100644 index 00000000..acf27909 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json @@ -0,0 +1,416 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-17T12:02:26Z", + "did": { + "didString": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "methodSpecificId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2018/v1" + ], + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "controller": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "publicKeyMultibase": "z6MktsJbVGB3m5Sysv3ucfFTyVAPTvNsGXQjHhUFTctAm1oV" + } + ], + "authentication": [ + "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2023-02-21T14:28:47.406713879Z", + "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "b9029cf7-c40b-4850-b9a1-9bfad46a68d7", + "created": "2023-02-22T08:55:19.36229052Z", + "checksum": "8c9fd6ea0aecec6a865a87c48b6c24fdf994411054a9fb23820bd749c05bd65a", + "previousVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.53.53714418716473", + "created": "2023-02-22T06:52:23.286538106Z", + "checksum": "1bfc0482df474af911ca1deb0212c7e51b327bb6da5761237e00359534a64e60", + "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", + "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c8547360-f298-44c0-a785-7b4dc50b26cd", + "created": "2023-02-22T06:47:45.801527254Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.60.80326856085772", + "created": "2023-02-22T06:45:29.298572213Z", + "checksum": "7e03f7f4efc8ff82b19957e81d377e52f4c4f23e860bd90f1a51a51fd6b65e2b", + "previousVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.14.189123052353757", + "created": "2023-02-22T06:27:44.050370138Z", + "checksum": "7b4f4a81fc39a920bc1a4e0bff0e9ff1c91057702dd920dd1936090db099f76d", + "previousVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", + "mediaType": "application/json", + "resourceVersion": "1.40.23710152624007", + "created": "2023-02-21T14:29:04.895533682Z", + "checksum": "2f95be447ce790c337767af65cc65e7312244bfd7f2a3ee0886e4c7956be3cee", + "previousVersionId": null, + "nextVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491" + } + ] + } +} From bac74ba3d7326c536f6f51e412afb69c26ce5125 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Tue, 18 Apr 2023 20:31:00 +0400 Subject: [PATCH 28/46] Add checksum handling and small improvements --- .../diddoc/diddoc_all_version_metadata.go | 8 ++- services/diddoc/diddoc_fragment.go | 2 +- services/diddoc/diddoc_query.go | 61 +++++++++++++++---- services/diddoc/diddoc_version.go | 6 +- services/diddoc/diddoc_version_metadata.go | 9 ++- .../queries/diddoc/did_doc_resolve_handler.go | 2 +- .../resources/resource_checksum_handler.go | 36 +++++++++++ services/request_service_base.go | 11 ++++ .../resource_collection_dereferencing.go | 8 ++- .../resource/resource_data_dereferencing.go | 9 ++- .../resource_metadata_dereferencing.go | 9 ++- types/constants.go | 1 + types/dereferencing_content_stream.go | 12 +++- types/supported_queries.go | 1 + 14 files changed, 149 insertions(+), 26 deletions(-) create mode 100644 services/diddoc/queries/resources/resource_checksum_handler.go diff --git a/services/diddoc/diddoc_all_version_metadata.go b/services/diddoc/diddoc_all_version_metadata.go index 87102820..de63b652 100644 --- a/services/diddoc/diddoc_all_version_metadata.go +++ b/services/diddoc/diddoc_all_version_metadata.go @@ -22,18 +22,22 @@ func (dd *DIDDocAllVersionMetadataRequestService) SpecificPrepare(c services.Res } func (dd DIDDocAllVersionMetadataRequestService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dd.Did) + migratedDid := migrations.MigrateDID(dd.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.DID_VERSIONS_PATH return c.Redirect(http.StatusMovedPermanently, path) } func (dd *DIDDocAllVersionMetadataRequestService) SpecificValidation(c services.ResolverContext) error { + // We not allow query here + if len(dd.Queries) != 0 { + return types.NewInvalidDidUrlError(dd.GetDid(), dd.RequestedContentType, nil, dd.IsDereferencing) + } return nil } func (dd *DIDDocAllVersionMetadataRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.GetAllDidDocVersionsMetadata(dd.Did, dd.GetContentType()) + result, err := c.DidDocService.GetAllDidDocVersionsMetadata(dd.GetDid(), dd.GetContentType()) if err != nil { err.IsDereferencing = dd.IsDereferencing return err diff --git a/services/diddoc/diddoc_fragment.go b/services/diddoc/diddoc_fragment.go index ba06ffcc..a8b5babb 100644 --- a/services/diddoc/diddoc_fragment.go +++ b/services/diddoc/diddoc_fragment.go @@ -29,7 +29,7 @@ func (dd *FragmentDIDDocRequestService) SpecificPrepare(c services.ResolverConte } func (dd *FragmentDIDDocRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.DereferenceSecondary(dd.Did, dd.Version, dd.Fragment, dd.GetContentType()) + result, err := c.DidDocService.DereferenceSecondary(dd.GetDid(), dd.Version, dd.Fragment, dd.GetContentType()) if err != nil { err.IsDereferencing = dd.IsDereferencing return err diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index ef4acf18..8f16f4a5 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -34,18 +34,44 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewRepresentationNotSupportedError("Queries from list: "+strings.Join(diff, ","), dd.GetContentType(), nil, dd.IsDereferencing) } + if dd.AreQueryValuesEmpty(c) { + return types.NewRepresentationNotSupportedError(dd.GetDid(), dd.GetContentType(), nil, dd.IsDereferencing) + } + versionId := dd.GetQueryParam(types.VersionId) versionTime := dd.GetQueryParam(types.VersionTime) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) resourceId := dd.GetQueryParam(types.ResourceId) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) + metadata := dd.GetQueryParam(types.Metadata) + resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { return types.NewRepresentationNotSupportedError(dd.GetDid(), dd.GetContentType(), nil, dd.IsDereferencing) } + // service query is permitted only for diddoc queries + if service != "" && dd.AreResourceQueriesPlaced(c) { + return types.NewRepresentationNotSupportedError(service, dd.GetContentType(), nil, dd.IsDereferencing) + } + + // metadata query is permitted only for diddoc queries + if metadata != "" && dd.AreResourceQueriesPlaced(c) { + return types.NewRepresentationNotSupportedError(service, dd.GetContentType(), nil, dd.IsDereferencing) + } + + // value if metadata can be only true or false + if metadata != "" && metadata != "true" && metadata != "false" { + return types.NewRepresentationNotSupportedError(metadata, dd.GetContentType(), nil, dd.IsDereferencing) + } + + // value if resourceMetadata can be only true or false + if resourceMetadata != "" && resourceMetadata != "true" && resourceMetadata == "false" { + return types.NewRepresentationNotSupportedError(resourceMetadata, dd.GetContentType(), nil, dd.IsDereferencing) + } + // Validate time format if versionTime != "" { _, err := utils.ParseFromStringTimeToGoTime(versionTime) @@ -82,20 +108,25 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte } func (dd *QueryDIDDocRequestService) SpecificPrepare(c services.ResolverContext) error { - queryRaw, flag := services.PrepareQueries(c) - queries, err := url.ParseQuery(queryRaw) - if err != nil { - return err - } - if flag != nil { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - dd.Queries = queries - // Register query handlers return dd.RegisterQueryHandlers(c) } +func (dd QueryDIDDocRequestService) AreResourceQueriesPlaced(c services.ResolverContext) bool { + return len(types.ResourceSupportedQueries.IntersectWithUrlValues(dd.Queries)) > 0 +} + +func (dd QueryDIDDocRequestService) AreQueryValuesEmpty(c services.ResolverContext) bool { + for _, v := range dd.Queries { + // Queries is the map with list of string as value. + // If there is only one value and it's empty string, then we need to return RepresentationNotSupported error + if len(v) == 1 && v[0] == "" { + return true + } + } + return false +} + func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverContext) error { stopHandler := queries.StopHandler{} @@ -109,7 +140,7 @@ func (dd *QueryDIDDocRequestService) RegisterQueryHandlers(c services.ResolverCo return err } - if len(types.ResourceSupportedQueries.IntersectWithUrlValues(dd.Queries)) > 0 { + if dd.AreResourceQueriesPlaced(c) { lastHandler, err := dd.RegisterResourceQueryHandlers(lastHandler, c) if err != nil { return err @@ -187,6 +218,7 @@ func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler resourceVersionHandler := resourceQueries.ResourceVersionHandler{} resourceVersionTimeHandler := resourceQueries.ResourceVersionTimeHandler{} resourceValidationHandler := resourceQueries.ResourceValidationHandler{} + resourceChecksumHandler := resourceQueries.ResourceChecksumHandler{} err := startHandler.SetNext(c, &resourceQueryHandler) if err != nil { @@ -224,7 +256,12 @@ func (dd *QueryDIDDocRequestService) RegisterResourceQueryHandlers(startHandler return nil, err } - err = resourceVersionHandler.SetNext(c, &resourceVersionTimeHandler) + err = resourceVersionHandler.SetNext(c, &resourceChecksumHandler) + if err != nil { + return nil, err + } + + err = resourceChecksumHandler.SetNext(c, &resourceVersionTimeHandler) if err != nil { return nil, err } diff --git a/services/diddoc/diddoc_version.go b/services/diddoc/diddoc_version.go index 93431a59..653c1e1e 100644 --- a/services/diddoc/diddoc_version.go +++ b/services/diddoc/diddoc_version.go @@ -25,7 +25,7 @@ func (dd *DIDDocVersionRequestService) SpecificPrepare(c services.ResolverContex } func (dd DIDDocVersionRequestService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dd.Did) + migratedDid := migrations.MigrateDID(dd.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.DID_VERSION_PATH + dd.Version return c.Redirect(http.StatusMovedPermanently, path) @@ -35,5 +35,9 @@ func (dd *DIDDocVersionRequestService) SpecificValidation(c services.ResolverCon if !utils.IsValidUUID(dd.Version) { return types.NewInvalidDidUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) } + // We not allow query here + if len(dd.Queries) != 0 { + return types.NewInvalidDidUrlError(dd.GetDid(), dd.RequestedContentType, nil, dd.IsDereferencing) + } return nil } diff --git a/services/diddoc/diddoc_version_metadata.go b/services/diddoc/diddoc_version_metadata.go index b6f44362..68c41ffb 100644 --- a/services/diddoc/diddoc_version_metadata.go +++ b/services/diddoc/diddoc_version_metadata.go @@ -25,7 +25,7 @@ func (dd *DIDDocVersionMetadataRequestService) SpecificPrepare(c services.Resolv } func (dd DIDDocVersionMetadataRequestService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dd.Did) + migratedDid := migrations.MigrateDID(dd.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.DID_VERSION_PATH + dd.Version + types.DID_METADATA return c.Redirect(http.StatusMovedPermanently, path) @@ -35,11 +35,16 @@ func (dd *DIDDocVersionMetadataRequestService) SpecificValidation(c services.Res if !utils.IsValidUUID(dd.Version) { return types.NewInvalidDidUrlError(dd.Version, dd.RequestedContentType, nil, dd.IsDereferencing) } + + // We not allow query here + if len(dd.Queries) != 0 { + return types.NewInvalidDidUrlError(dd.GetDid(), dd.RequestedContentType, nil, dd.IsDereferencing) + } return nil } func (dd *DIDDocVersionMetadataRequestService) Query(c services.ResolverContext) error { - result, err := c.DidDocService.GetDIDDocVersionsMetadata(dd.Did, dd.Version, dd.GetContentType()) + result, err := c.DidDocService.GetDIDDocVersionsMetadata(dd.GetDid(), dd.Version, dd.GetContentType()) if err != nil { err.IsDereferencing = dd.IsDereferencing return err diff --git a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go index 729b9d16..a0872c14 100644 --- a/services/diddoc/queries/diddoc/did_doc_resolve_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_resolve_handler.go @@ -32,7 +32,7 @@ func (dd *DidDocResolveHandler) Handle(c services.ResolverContext, service servi // If versionId or versionTime was not called, we will return the latest version versionId := allVersions[0].VersionId filteredResources := allVersions[0].Resources - + // Filter in descending order sort.Sort(filteredResources) diff --git a/services/diddoc/queries/resources/resource_checksum_handler.go b/services/diddoc/queries/resources/resource_checksum_handler.go new file mode 100644 index 00000000..1fad826c --- /dev/null +++ b/services/diddoc/queries/resources/resource_checksum_handler.go @@ -0,0 +1,36 @@ +package resources + +import ( + "github.com/cheqd/did-resolver/services" + "github.com/cheqd/did-resolver/services/diddoc/queries" + "github.com/cheqd/did-resolver/types" +) + +type ResourceChecksumHandler struct { + queries.BaseQueryHandler + ResourceHelperHandler +} + +func (d *ResourceChecksumHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { + resourceChecksum := service.GetQueryParam(types.ResourceChecksum) + if resourceChecksum == "" { + return d.Continue(c, service, response) + } + + // Cast to just list of resources + resourceCollection, err := d.CastToContent(service, response) + if err != nil { + return nil, err + } + + // Filter the list of metadatas by the resourceCollectionId + resourceCollectionFiltered := resourceCollection.Resources.FilterByChecksum(resourceChecksum) + if len(resourceCollectionFiltered) == 0 { + return nil, types.NewNotFoundError(service.GetDid(), service.GetContentType(), nil, d.IsDereferencing) + } + + resourceCollection.Resources = resourceCollectionFiltered + + // Call the next handler + return d.Continue(c, service, resourceCollection) +} diff --git a/services/request_service_base.go b/services/request_service_base.go index a2a97d4f..cd17d32a 100644 --- a/services/request_service_base.go +++ b/services/request_service_base.go @@ -60,6 +60,17 @@ func (dd *BaseRequestService) BasicPrepare(c ResolverContext) error { did = strings.Split(did, "#")[0] dd.Did = did + // Get queries (We need to check that queries are allowed only for /:did path) + queryRaw, flag := PrepareQueries(c) + queries, err := url.ParseQuery(queryRaw) + if err != nil { + return err + } + if flag != nil { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + dd.Queries = queries + return nil } diff --git a/services/resource/resource_collection_dereferencing.go b/services/resource/resource_collection_dereferencing.go index 8eca4f53..d165b03c 100644 --- a/services/resource/resource_collection_dereferencing.go +++ b/services/resource/resource_collection_dereferencing.go @@ -23,18 +23,22 @@ func (dr *ResourceCollectionDereferencingService) SpecificPrepare(c services.Res } func (dr ResourceCollectionDereferencingService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dr.Did) + migratedDid := migrations.MigrateDID(dr.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.DID_METADATA return c.Redirect(http.StatusMovedPermanently, path) } func (dr *ResourceCollectionDereferencingService) SpecificValidation(c services.ResolverContext) error { + // We not allow query here + if len(dr.Queries) != 0 { + return types.NewInvalidDidUrlError(dr.GetDid(), dr.RequestedContentType, nil, dr.IsDereferencing) + } return nil } func (dr *ResourceCollectionDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceCollectionResources(dr.Did, dr.GetContentType()) + result, err := c.ResourceService.DereferenceCollectionResources(dr.GetDid(), dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err diff --git a/services/resource/resource_data_dereferencing.go b/services/resource/resource_data_dereferencing.go index a7295f2f..0aaed40c 100644 --- a/services/resource/resource_data_dereferencing.go +++ b/services/resource/resource_data_dereferencing.go @@ -25,7 +25,7 @@ func (dr *ResourceDataDereferencingService) SpecificPrepare(c services.ResolverC } func (dr ResourceDataDereferencingService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dr.Did) + migratedDid := migrations.MigrateDID(dr.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.RESOURCE_PATH + dr.ResourceId return c.Redirect(http.StatusMovedPermanently, path) @@ -35,11 +35,16 @@ func (dr *ResourceDataDereferencingService) SpecificValidation(c services.Resolv if !utils.IsValidUUID(dr.ResourceId) { return types.NewInvalidDidUrlError(dr.ResourceId, dr.RequestedContentType, nil, dr.IsDereferencing) } + + // We not allow query here + if len(dr.Queries) != 0 { + return types.NewInvalidDidUrlError(dr.GetDid(), dr.RequestedContentType, nil, dr.IsDereferencing) + } return nil } func (dr *ResourceDataDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceResourceData(dr.Did, dr.ResourceId, dr.GetContentType()) + result, err := c.ResourceService.DereferenceResourceData(dr.GetDid(), dr.ResourceId, dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err diff --git a/services/resource/resource_metadata_dereferencing.go b/services/resource/resource_metadata_dereferencing.go index 6a813602..5affe925 100644 --- a/services/resource/resource_metadata_dereferencing.go +++ b/services/resource/resource_metadata_dereferencing.go @@ -25,7 +25,7 @@ func (dr *ResourceMetadataDereferencingService) SpecificPrepare(c services.Resol } func (dr ResourceMetadataDereferencingService) Redirect(c services.ResolverContext) error { - migratedDid := migrations.MigrateDID(dr.Did) + migratedDid := migrations.MigrateDID(dr.GetDid()) path := types.RESOLVER_PATH + migratedDid + types.RESOURCE_PATH + dr.ResourceId + "/metadata" return c.Redirect(http.StatusMovedPermanently, path) @@ -35,11 +35,16 @@ func (dr *ResourceMetadataDereferencingService) SpecificValidation(c services.Re if !utils.IsValidUUID(dr.ResourceId) { return types.NewInvalidDidUrlError(dr.ResourceId, dr.RequestedContentType, nil, dr.IsDereferencing) } + + // We not allow query here + if len(dr.Queries) != 0 { + return types.NewInvalidDidUrlError(dr.GetDid(), dr.RequestedContentType, nil, dr.IsDereferencing) + } return nil } func (dr *ResourceMetadataDereferencingService) Query(c services.ResolverContext) error { - result, err := c.ResourceService.DereferenceResourceMetadata(dr.Did, dr.ResourceId, dr.GetContentType()) + result, err := c.ResourceService.DereferenceResourceMetadata(dr.GetDid(), dr.ResourceId, dr.GetContentType()) if err != nil { err.IsDereferencing = dr.IsDereferencing return err diff --git a/types/constants.go b/types/constants.go index 958c483e..ca0b68c9 100644 --- a/types/constants.go +++ b/types/constants.go @@ -49,4 +49,5 @@ const ( ResourceMetadata string = "resourceMetadata" ResourceCollectionId string = "resourceCollectionId" ResourceVersion string = "resourceVersion" + ResourceChecksum string = "checksum" ) diff --git a/types/dereferencing_content_stream.go b/types/dereferencing_content_stream.go index 64db1a5d..b7a18ad8 100644 --- a/types/dereferencing_content_stream.go +++ b/types/dereferencing_content_stream.go @@ -122,6 +122,16 @@ func (e DereferencedResourceList) FilterByVersion(version string) DereferencedRe return filteredResources } +func (e DereferencedResourceList) FilterByChecksum(checksum string) DereferencedResourceList { + filteredResources := DereferencedResourceList{} + for _, r := range e { + if r.Checksum == checksum { + filteredResources = append(filteredResources, r) + } + } + return filteredResources +} + func (e DereferencedResourceList) FindBeforeTime(stime string) (string, error) { search_time, err := utils.ParseFromStringTimeToGoTime(stime) if err != nil { @@ -154,7 +164,7 @@ func (e DereferencedResourceList) FindAllBeforeTime(stime string) (DereferencedR return l, nil } for _, v := range versions { - if v.Created.Before(search_time) || v.Created.Equal(search_time.Add(time.Second)) { + if v.Created.Before(search_time) || v.Created.Equal(search_time) { l = append(l, v) } } diff --git a/types/supported_queries.go b/types/supported_queries.go index 5c567cef..5e9e7b42 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -52,6 +52,7 @@ var ResourceSupportedQueries = SupportedQueriesT{ ResourceType, ResourceVersion, ResourceVersionTime, + ResourceChecksum, } var AllSupportedQueries = DidSupportedQueries.Plus(ResourceSupportedQueries) From bac682bdeaa92bbab4e234a80dc780fca1266530 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 15:41:23 +0500 Subject: [PATCH 29/46] Add more static validation for transformKey query. --- services/diddoc/diddoc_query.go | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 99fa2e1d..2700f80f 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -36,16 +36,58 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte versionId := dd.GetQueryParam(types.VersionId) versionTime := dd.GetQueryParam(types.VersionTime) + transformKey := dd.GetQueryParam(types.TransformKey) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) + resourceCollectionId := dd.GetQueryParam(types.ResourceCollectionId) resourceId := dd.GetQueryParam(types.ResourceId) + resourceName := dd.GetQueryParam(types.ResourceName) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) + resourceVersion := dd.GetQueryParam(types.ResourceVersion) + resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) + metadata := dd.GetQueryParam(types.Metadata) // // Validation of query parameters // if versionId != "" && versionTime != "" { // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) // } + if transformKey != "" && service != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && relativeRef != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceCollectionId != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceId != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceName != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceVersion != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceVersionTime != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && metadata != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + + if transformKey != "" && resourceMetadata != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + // relativeRef should be only with service parameter also if relativeRef != "" && service == "" { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) From 6e1caa63db2136f9893fa6a5cd58b7ebf118d4f0 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 15:43:18 +0500 Subject: [PATCH 30/46] Add negative integration tests for testing transformKey query. --- .../query/transform_key/negative_test.go | 297 ++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 tests/integration/rest/diddoc/query/transform_key/negative_test.go diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go new file mode 100644 index 00000000..886e82f7 --- /dev/null +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -0,0 +1,297 @@ +//go:build integration + +package transformKey + +import ( + "encoding/json" + "fmt" + + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/integration/rest" + "github.com/cheqd/did-resolver/types" + + "github.com/go-resty/resty/v2" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var IdentifierDIDWithEd25519VerificationKey2018Key = "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + +var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { + client := resty.New() + + resp, err := client.R(). + SetHeader("Accept", testCase.ResolutionType). + Get(testCase.DidURL) + Expect(err).To(BeNil()) + + var receivedDidDereferencing utils.DereferencingResult + Expect(json.Unmarshal(resp.Body(), &receivedDidDereferencing)).To(BeNil()) + Expect(testCase.ExpectedStatusCode).To(Equal(resp.StatusCode())) + + expectedDidDereferencing := testCase.ExpectedResult.(utils.DereferencingResult) + utils.AssertDidDereferencing(expectedDidDereferencing, receivedDidDereferencing) +}, + + Entry( + "cannot get DIDDoc with not supported transformKey query parameter", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and metadata query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&metadata=true", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceId query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceId=%s", + DidWithEd25519VerificationKey2018Key, + testconstants.ValidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceName query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceName=someName", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceType query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceType=someType", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceType query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceType=someType", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceVersionTime=someVersionTime", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceMetadata query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceMetadata=true", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceCollectionId query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceCollectionId=%s", + DidWithEd25519VerificationKey2018Key, + testconstants.ValidIdentifier, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceVersion query parameters", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceVersion=someVersion", + DidWithEd25519VerificationKey2018Key, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "representationNotSupported", + DidProperties: types.DidProperties{ + DidString: DidWithEd25519VerificationKey2018Key, + MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, + }, + ), +) From 4787afe92f86caa00505ecd56e4ab373b6b51969 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 17:06:25 +0500 Subject: [PATCH 31/46] Add validation for a combination of transformKey & resourceType. --- services/diddoc/diddoc_query.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 2700f80f..e455a00f 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -42,6 +42,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte resourceCollectionId := dd.GetQueryParam(types.ResourceCollectionId) resourceId := dd.GetQueryParam(types.ResourceId) resourceName := dd.GetQueryParam(types.ResourceName) + resourceType := dd.GetQueryParam(types.ResourceType) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) resourceVersion := dd.GetQueryParam(types.ResourceVersion) resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) @@ -72,6 +73,10 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } + if transformKey != "" && resourceType != "" { + return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) + } + if transformKey != "" && resourceVersion != "" { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } From 6ab9b2462c980da49604c9a475a3f4814c3755ab Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 17:06:53 +0500 Subject: [PATCH 32/46] Add unit tests for testing transformKey query. --- .../unit/diddoc/request/transform_key_test.go | 298 ++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 tests/unit/diddoc/request/transform_key_test.go diff --git a/tests/unit/diddoc/request/transform_key_test.go b/tests/unit/diddoc/request/transform_key_test.go new file mode 100644 index 00000000..d93a8552 --- /dev/null +++ b/tests/unit/diddoc/request/transform_key_test.go @@ -0,0 +1,298 @@ +//go:build unit + +package request + +import ( + "encoding/json" + "fmt" + "net/http" + "net/http/httptest" + + resourceTypes "github.com/cheqd/cheqd-node/api/v2/cheqd/resource/v2" + didDocService "github.com/cheqd/did-resolver/services/diddoc" + testconstants "github.com/cheqd/did-resolver/tests/constants" + utils "github.com/cheqd/did-resolver/tests/unit" + "github.com/cheqd/did-resolver/types" + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" +) + +var _ = DescribeTable("Test Query handler with transformKey params", func(testCase queriesDIDDocTestCase) { + request := httptest.NewRequest(http.MethodGet, testCase.didURL, nil) + context, rec := utils.SetupEmptyContext(request, testCase.resolutionType, utils.MockLedger) + expectedDIDResolution := testCase.expectedResolution.(*types.DidResolution) + + if (testCase.resolutionType == "" || testCase.resolutionType == types.DIDJSONLD) && testCase.expectedError == nil { + expectedDIDResolution.Did.Context = []string{types.DIDSchemaJSONLD, types.JsonWebKey2020JSONLD} + } else if expectedDIDResolution.Did != nil { + expectedDIDResolution.Did.Context = nil + } + + expectedContentType := utils.DefineContentType(expectedDIDResolution.ResolutionMetadata.ContentType, testCase.resolutionType) + + err := didDocService.DidDocEchoHandler(context) + if testCase.expectedError != nil { + Expect(testCase.expectedError.Error()).To(Equal(err.Error())) + } else { + var resolutionResult types.DidResolution + Expect(err).To(BeNil()) + Expect(json.Unmarshal(rec.Body.Bytes(), &resolutionResult)).To(BeNil()) + Expect(expectedDIDResolution.Did).To(Equal(resolutionResult.Did)) + Expect(expectedDIDResolution.Metadata).To(Equal(resolutionResult.Metadata)) + Expect(expectedContentType).To(Equal(resolutionResult.ResolutionMetadata.ContentType)) + Expect(expectedDIDResolution.ResolutionMetadata.DidProperties).To(Equal(resolutionResult.ResolutionMetadata.DidProperties)) + Expect(expectedContentType).To(Equal(types.ContentType(rec.Header().Get("Content-Type")))) + } +}, + + Entry( + "can get DIDDoc (JSONWebKey2020) with supported Ed25519VerificationKey2018 transformKey query parameter", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, + }, + }, + Did: &types.DidDoc{ + Id: testconstants.ValidDIDDocResolution.Id, + VerificationMethod: []types.VerificationMethod{ + { + Id: testconstants.ValidDIDDocResolution.VerificationMethod[0].Id, + Type: string(types.Ed25519VerificationKey2018), + Controller: testconstants.ValidDIDDocResolution.VerificationMethod[0].Controller, + PublicKeyBase58: "6fYkiuzNvu5THPLV5PKc1b7NyCWQ9bJa2rnLhfRxiYUK", + }, + }, + Service: testconstants.ValidDIDDocResolution.Service, + }, + Metadata: types.NewResolutionDidDocMetadata( + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, + ), + }, + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with supported Ed25519VerificationKey2020 transformKey query parameter", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s", + testconstants.ValidDid, + types.Ed25519VerificationKey2020, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{ + ResolutionMetadata: types.ResolutionMetadata{ + DidProperties: types.DidProperties{ + DidString: testconstants.ValidDid, + MethodSpecificId: testconstants.ValidIdentifier, + Method: testconstants.ValidMethod, + }, + }, + Did: &types.DidDoc{ + Id: testconstants.ValidDIDDocResolution.Id, + VerificationMethod: []types.VerificationMethod{ + { + Id: testconstants.ValidDIDDocResolution.VerificationMethod[0].Id, + Type: string(types.Ed25519VerificationKey2020), + Controller: testconstants.ValidDIDDocResolution.VerificationMethod[0].Controller, + PublicKeyMultibase: "z6Mkk7ooKAEpGSZvPtBBkxHSrgfNnmnFZUYvishGXwPydmFh", + }, + }, + Service: testconstants.ValidDIDDocResolution.Service, + }, + Metadata: types.NewResolutionDidDocMetadata( + testconstants.ValidDid, &testconstants.ValidMetadata, + []*resourceTypes.Metadata{testconstants.ValidResource.Metadata}, + ), + }, + }, + ), + + Entry( + "cannot get DIDDoc with not existent DID and supported transformKey query parameter", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s", + testconstants.NotExistentTestnetDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewNotFoundError( + testconstants.NotExistentTestnetDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc (JSONWebKey2020) with not supported transformKey query parameter", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=notSupportedTransformKey", + testconstants.ValidDid, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and metadata query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&metadata=true", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and metadata query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&metadata=true", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceId query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceId=%s", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + testconstants.ValidIdentifier, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceName query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceName=someName", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceType query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceType=someType", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=someVersionTime", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceMetadata query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceMetadata=true", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceCollectionId query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceCollectionId=%s", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + testconstants.ValidIdentifier, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), + + Entry( + "cannot get DIDDoc with combination of transformKey and resourceVersion query parameters", + queriesDIDDocTestCase{ + didURL: fmt.Sprintf( + "/1.0/identifiers/%s?transformKey=%s&resourceVersion=someVersion", + testconstants.ValidDid, + types.Ed25519VerificationKey2018, + ), + resolutionType: types.DIDJSONLD, + expectedResolution: &types.DidResolution{}, + expectedError: types.NewRepresentationNotSupportedError( + testconstants.ValidDid, types.DIDJSONLD, nil, false, + ), + }, + ), +) From 5bd1f2c51789a1eac3b7c7d0e7ae8f907566c5c7 Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Wed, 19 Apr 2023 16:13:40 +0400 Subject: [PATCH 33/46] Fix RequestURI parameter displaying --- services/diddoc_service.go | 2 +- .../ledger/query_all_did_doc_versions_ledger_service_test.go | 2 +- types/dereferenced_did_versions_list.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/services/diddoc_service.go b/services/diddoc_service.go index 681e3e08..c7c61cc6 100644 --- a/services/diddoc_service.go +++ b/services/diddoc_service.go @@ -119,7 +119,7 @@ func (dds DIDDocService) GetAllDidDocVersionsMetadata(did string, contentType ty context = types.ResolutionSchemaJSONLD } - contentStream := types.NewDereferencedDidVersionsList(versions, resources) + contentStream := types.NewDereferencedDidVersionsList(did, versions, resources) for i, version := range contentStream.Versions { filtered := contentStream.Versions.GetResourcesBeforeNextVersion(version.VersionId) contentStream.Versions[i].Resources = filtered diff --git a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go index 307676ba..198d3e71 100644 --- a/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go +++ b/tests/unit/diddoc/ledger/query_all_did_doc_versions_ledger_service_test.go @@ -18,7 +18,7 @@ type queryDIDDocVersionsTestCase struct { var _ = DescribeTable("Test QueryAllDidDocVersionsMetadata method", func(testCase queryDIDDocVersionsTestCase) { didDocMetadata, err := utils.MockLedger.QueryAllDidDocVersionsMetadata(testCase.did) - didDocVersions := types.NewDereferencedDidVersionsList(didDocMetadata, nil) + didDocVersions := types.NewDereferencedDidVersionsList(testCase.did, didDocMetadata, nil) if err != nil { Expect(testCase.expectedError.Code).To(Equal(err.Code)) Expect(testCase.expectedError.Message).To(Equal(err.Message)) diff --git a/types/dereferenced_did_versions_list.go b/types/dereferenced_did_versions_list.go index 898b9be4..ce6f02e2 100644 --- a/types/dereferenced_did_versions_list.go +++ b/types/dereferenced_did_versions_list.go @@ -11,10 +11,10 @@ type DereferencedDidVersionsList struct { Versions DidDocMetadataList `json:"versions,omitempty"` } -func NewDereferencedDidVersionsList(versions []*didTypes.Metadata, resources []*resourceTypes.Metadata) *DereferencedDidVersionsList { +func NewDereferencedDidVersionsList(did string, versions []*didTypes.Metadata, resources []*resourceTypes.Metadata) *DereferencedDidVersionsList { didVersionList := DidDocMetadataList{} for _, version := range versions { - didVersionList = append(didVersionList, NewResolutionDidDocMetadata("", version, resources)) + didVersionList = append(didVersionList, NewResolutionDidDocMetadata(did, version, resources)) } // Sort by updated date or created in reverse order From 597e594806082ec462369dbd181c00e40d2150dc Mon Sep 17 00:00:00 2001 From: Andrew Nikitin Date: Wed, 19 Apr 2023 16:14:26 +0400 Subject: [PATCH 34/46] Makes linter happy --- services/diddoc/queries/diddoc/did_doc_metadata_handler.go | 2 +- .../diddoc/queries/resources/resource_validation_handler.go | 2 +- types/resource_dereferencing.go | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go index a1d91cf4..3e6a5371 100644 --- a/services/diddoc/queries/diddoc/did_doc_metadata_handler.go +++ b/services/diddoc/queries/diddoc/did_doc_metadata_handler.go @@ -33,7 +33,7 @@ func (dd *DidDocMetadataHandler) Handle(c services.ResolverContext, service serv // Cause allVersions are sorted in reverse order the latest version is the first element versionId := allVersions[0].VersionId filteredResources := allVersions[0].Resources - + // Filter in descending order sort.Sort(filteredResources) result, _err := c.DidDocService.GetDIDDocVersionsMetadata(service.GetDid(), versionId, service.GetContentType()) diff --git a/services/diddoc/queries/resources/resource_validation_handler.go b/services/diddoc/queries/resources/resource_validation_handler.go index e7123ba1..00b122b3 100644 --- a/services/diddoc/queries/resources/resource_validation_handler.go +++ b/services/diddoc/queries/resources/resource_validation_handler.go @@ -14,7 +14,7 @@ type ResourceValidationHandler struct { func (d *ResourceValidationHandler) Handle(c services.ResolverContext, service services.RequestServiceI, response types.ResolutionResultI) (types.ResolutionResultI, error) { resourceName := service.GetQueryParam(types.ResourceName) resourceType := service.GetQueryParam(types.ResourceType) - + // Cast to just list of resources resourceCollection, err := d.CastToContent(service, response) if err != nil { diff --git a/types/resource_dereferencing.go b/types/resource_dereferencing.go index bbc12b65..e6614acc 100644 --- a/types/resource_dereferencing.go +++ b/types/resource_dereferencing.go @@ -16,7 +16,6 @@ func NewResourceDereferencingFromContent(did string, contentType ContentType, co } return &ResourceDereferencing{Context: context, ContentStream: contentStream, DereferencingMetadata: dereferenceMetadata} - } // Interface implementation From a88dcd11afe1ff8063e8e10839623998084171a7 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 17:30:35 +0500 Subject: [PATCH 35/46] Fix problem with go-releaser: - problem was with command: "goreleaser build --clean --snapshot --single-target" - I fix that problem with run above go-releaser command manually and that command run all make commands after that operation it updates swagger files that were problem. --- docs/docs.go | 7 +++++-- docs/swagger.json | 4 ++++ docs/swagger.yaml | 3 +++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/docs.go b/docs/docs.go index 888780c1..f4653bfb 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,5 +1,4 @@ -// Code generated by swaggo/swag. DO NOT EDIT. - +// Code generated by swaggo/swag. DO NOT EDIT package docs import "github.com/swaggo/swag" @@ -624,6 +623,10 @@ const docTemplate = `{ "resourceURI": { "type": "string", "example": "did:cheqd:testnet:55dbc8bf-fba3-4117-855c-1e0dc1d3bb47/resources/398cee0a-efac-4643-9f4c-74c48c72a14b" + }, + "resourceVersion": { + "type": "string", + "example": "1" } } }, diff --git a/docs/swagger.json b/docs/swagger.json index 2a33af34..359795eb 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -621,6 +621,10 @@ "resourceURI": { "type": "string", "example": "did:cheqd:testnet:55dbc8bf-fba3-4117-855c-1e0dc1d3bb47/resources/398cee0a-efac-4643-9f4c-74c48c72a14b" + }, + "resourceVersion": { + "type": "string", + "example": "1" } } }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 16f3f41b..4af42351 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -51,6 +51,9 @@ definitions: resourceURI: example: did:cheqd:testnet:55dbc8bf-fba3-4117-855c-1e0dc1d3bb47/resources/398cee0a-efac-4643-9f4c-74c48c72a14b type: string + resourceVersion: + example: "1" + type: string type: object types.DereferencingMetadata: properties: From 2a242080c6ae34dce4551093e91126047d8d80b3 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 18:43:59 +0500 Subject: [PATCH 36/46] Refactor code and integration tests. --- services/diddoc/diddoc_query.go | 42 +------ .../query/transform_key/negative_test.go | 115 ++++++++++++------ .../query/transform_key/positive_test.go | 20 +-- types/supported_queries.go | 24 ++++ 4 files changed, 110 insertions(+), 91 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 406b49b8..35178897 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -43,12 +43,8 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte transformKey := dd.GetQueryParam(types.TransformKey) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) - resourceCollectionId := dd.GetQueryParam(types.ResourceCollectionId) resourceId := dd.GetQueryParam(types.ResourceId) - resourceName := dd.GetQueryParam(types.ResourceName) - resourceType := dd.GetQueryParam(types.ResourceType) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) - resourceVersion := dd.GetQueryParam(types.ResourceVersion) resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) metadata := dd.GetQueryParam(types.Metadata) @@ -57,43 +53,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte // return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) // } - if transformKey != "" && service != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && relativeRef != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceCollectionId != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceId != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceName != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceType != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceVersion != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceVersionTime != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && metadata != "" { - return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) - } - - if transformKey != "" && resourceMetadata != "" { + if transformKey != "" && !types.IsSupportedWithCombinationTransformKeyQuery(dd.Queries) { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go index 886e82f7..60821627 100644 --- a/tests/integration/rest/diddoc/query/transform_key/negative_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -15,7 +15,7 @@ import ( . "github.com/onsi/gomega" ) -var IdentifierDIDWithEd25519VerificationKey2018Key = "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" +var identifierDidWithEd25519VerificationKey2018Key = "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { client := resty.New() @@ -33,12 +33,38 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { utils.AssertDidDereferencing(expectedDidDereferencing, receivedDidDereferencing) }, + Entry( + "cannot get DIDDoc with not existent DID and not existent transformKey query parameter", + utils.NegativeTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", + testconstants.NotExistentTestnetDid, + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedResult: utils.DereferencingResult{ + Context: "", + DereferencingMetadata: types.DereferencingMetadata{ + ContentType: types.DIDJSONLD, + ResolutionError: "notFound", + DidProperties: types.DidProperties{ + DidString: testconstants.NotExistentTestnetDid, + MethodSpecificId: testconstants.NotExistentIdentifier, + Method: testconstants.ValidMethod, + }, + }, + ContentStream: nil, + Metadata: types.ResolutionDidDocMetadata{}, + }, + ExpectedStatusCode: types.NotFoundHttpCode, + }, + ), + Entry( "cannot get DIDDoc with not supported transformKey query parameter", utils.NegativeTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -47,8 +73,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -63,8 +89,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and metadata query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&metadata=true", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&metadata=true", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -73,8 +100,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -89,8 +116,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceId query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceId=%s", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceId=%s", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, testconstants.ValidIdentifier, ), ResolutionType: testconstants.DefaultResolutionType, @@ -100,8 +128,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -116,8 +144,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceName query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceName=someName", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceName=someName", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -126,8 +155,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -142,8 +171,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceType query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceType=someType", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceType=someType", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -152,8 +182,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -168,8 +198,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceType query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceType=someType", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceType=someType", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -178,8 +209,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -194,8 +225,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceVersionTime=someVersionTime", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=someVersionTime", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -204,8 +236,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -220,8 +252,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceMetadata query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceMetadata=true", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceMetadata=true", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -230,8 +263,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -246,8 +279,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceCollectionId query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceCollectionId=%s", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceCollectionId=%s", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, testconstants.ValidIdentifier, ), ResolutionType: testconstants.DefaultResolutionType, @@ -257,8 +291,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, @@ -273,8 +307,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with combination of transformKey and resourceVersion query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA&resourceVersion=someVersion", - DidWithEd25519VerificationKey2018Key, + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersion=someVersion", + didWithEd25519VerificationKey2018Key, + types.Ed25519VerificationKey2020, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -283,8 +318,8 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { ContentType: types.DIDJSONLD, ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ - DidString: DidWithEd25519VerificationKey2018Key, - MethodSpecificId: IdentifierDIDWithEd25519VerificationKey2018Key, + DidString: didWithEd25519VerificationKey2018Key, + MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, Method: testconstants.ValidMethod, }, }, diff --git a/tests/integration/rest/diddoc/query/transform_key/positive_test.go b/tests/integration/rest/diddoc/query/transform_key/positive_test.go index 5825220d..b1bbc6ca 100644 --- a/tests/integration/rest/diddoc/query/transform_key/positive_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/positive_test.go @@ -16,8 +16,8 @@ import ( ) var ( - DidWithEd25519VerificationKey2018Key = "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" - DidWithJsonWebKey2020Key = "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" + didWithEd25519VerificationKey2018Key = "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" + didWithJsonWebKey2020Key = "did:cheqd:testnet:54c96733-32ad-4878-b7ce-f62f4fdf3291" ) var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", func(testCase utils.PositiveTestCase) { @@ -42,7 +42,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, string(types.Ed25519VerificationKey2018), ), ResolutionType: testconstants.DefaultResolutionType, @@ -56,7 +56,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, string(types.Ed25519VerificationKey2020), ), ResolutionType: testconstants.DefaultResolutionType, @@ -70,7 +70,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, string(types.JsonWebKey2020), ), ResolutionType: testconstants.DefaultResolutionType, @@ -126,7 +126,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithJsonWebKey2020Key, + didWithJsonWebKey2020Key, string(types.Ed25519VerificationKey2018), ), ResolutionType: testconstants.DefaultResolutionType, @@ -140,7 +140,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithJsonWebKey2020Key, + didWithJsonWebKey2020Key, string(types.Ed25519VerificationKey2020), ), ResolutionType: testconstants.DefaultResolutionType, @@ -154,7 +154,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", - DidWithJsonWebKey2020Key, + didWithJsonWebKey2020Key, string(types.JsonWebKey2020), ), ResolutionType: testconstants.DefaultResolutionType, @@ -168,7 +168,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&versionId=%s", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, string(types.Ed25519VerificationKey2020), "44f49254-8106-40ee-99ad-e50ac9517346", ), @@ -183,7 +183,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&versionTime=%s", - DidWithEd25519VerificationKey2018Key, + didWithEd25519VerificationKey2018Key, string(types.Ed25519VerificationKey2020), "2023-02-21T14:28:48.406713879Z", ), diff --git a/types/supported_queries.go b/types/supported_queries.go index 252dafc2..00ef8562 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -57,3 +57,27 @@ var ResourceSupportedQueries = SupportedQueriesT{ } var AllSupportedQueries = DidSupportedQueries.Plus(ResourceSupportedQueries) + +var NotSupportedQueriesWithTransformKey = []string{ + ServiceQ, + RelativeRef, + Metadata, + ResourceId, + ResourceCollectionId, + ResourceName, + ResourceMetadata, + ResourceType, + ResourceVersion, + ResourceVersionTime, + ResourceChecksum, +} + +func IsSupportedWithCombinationTransformKeyQuery(values url.Values) bool { + for query := range values { + if utils.Contains(NotSupportedQueriesWithTransformKey, query) { + return false + } + } + + return true +} From a610dd3caca5f3b1cc25a497ef3e4867df5285ec Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:02:41 +0500 Subject: [PATCH 37/46] Update transformKey query payloads. --- .../diddoc_ed25519_2018_to_ed25519_2018.json | 380 +++++++++--------- .../diddoc_ed25519_2018_to_ed25519_2020.json | 380 +++++++++--------- .../diddoc_ed25519_2018_to_jwk_2020.json | 380 +++++++++--------- .../diddoc_transform_key_and_version_id.json | 380 +++++++++--------- .../diddoc_transform_key_version_time.json | 380 +++++++++--------- 5 files changed, 950 insertions(+), 950 deletions(-) diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json index b68108d0..747b5040 100644 --- a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2018.json @@ -35,17 +35,30 @@ "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", "linkedResourceMetadata": [ { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "resourceName": "test - 11", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.75.7154775070032", - "created": "2023-02-22T06:54:21.642136513Z", - "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", - "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", - "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", @@ -61,173 +74,186 @@ "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", - "created": "2023-02-22T06:58:18.618625297Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", - "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", - "created": "2023-02-22T07:06:35.88519589Z", - "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", - "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", - "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", - "resourceName": "test - 11", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.52.437822168723436", - "created": "2023-02-22T06:31:46.632577547Z", - "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", - "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", - "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", - "created": "2023-02-22T06:43:01.285857333Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": null, - "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.60.10585488950264", - "created": "2023-02-22T06:24:34.178043845Z", - "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", - "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", - "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.14.417474384596773", - "created": "2023-02-22T06:58:06.704598725Z", - "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", - "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", - "created": "2023-02-22T06:52:40.77708053Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", - "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "resourceName": "test11", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.45.245928566483904", - "created": "2023-02-22T08:55:07.547309938Z", - "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", - "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", - "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", - "created": "2023-02-22T08:54:25.74053081Z", - "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", - "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.13.328827899509488", - "created": "2023-02-22T06:47:28.120518418Z", - "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", - "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", - "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", - "resourceName": "test11", - "resourceType": "anonCredsSchema", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "1.42.26264376650386", - "created": "2023-02-22T08:54:14.484707292Z", - "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", - "previousVersionId": null, - "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.0.8322705530387609", - "created": "2023-02-22T06:21:06.651892018Z", - "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", - "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", - "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.31.68736260709204", - "created": "2023-02-22T07:06:23.964025795Z", - "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", - "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", - "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", @@ -242,19 +268,6 @@ "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.96.35140535691139", - "created": "2023-02-22T07:35:25.81556714Z", - "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", - "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "nextVersionId": null - }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", @@ -269,17 +282,30 @@ "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.66.73560282313116", - "created": "2023-02-22T06:42:49.403227253Z", - "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", - "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", - "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", @@ -295,69 +321,43 @@ "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.1.6636632864708512", - "created": "2023-02-22T07:33:32.80237235Z", - "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", - "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", - "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", - "created": "2023-02-22T07:00:05.094232174Z", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", - "resourceName": "test11", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.38.00219791272952", - "created": "2023-02-22T08:57:23.341829704Z", - "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", - "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "nextVersionId": null - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", - "mediaType": "application/json", - "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", - "created": "2023-02-22T06:45:47.444289908Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", - "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.56.91909743350392", - "created": "2023-02-22T06:59:47.570665615Z", - "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", - "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", - "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", @@ -373,30 +373,30 @@ "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", - "created": "2023-02-22T07:35:43.388268438Z", - "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", - "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", - "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", - "created": "2023-02-22T08:57:35.205370982Z", - "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", - "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", - "nextVersionId": null + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json index d42c0c06..92651687 100644 --- a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_ed25519_2020.json @@ -35,17 +35,30 @@ "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", "linkedResourceMetadata": [ { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "resourceName": "test - 11", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.75.7154775070032", - "created": "2023-02-22T06:54:21.642136513Z", - "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", - "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", - "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", @@ -61,173 +74,186 @@ "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", - "created": "2023-02-22T06:58:18.618625297Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", - "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", - "created": "2023-02-22T07:06:35.88519589Z", - "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", - "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", - "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", - "resourceName": "test - 11", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.52.437822168723436", - "created": "2023-02-22T06:31:46.632577547Z", - "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", - "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", - "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", - "created": "2023-02-22T06:43:01.285857333Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": null, - "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.60.10585488950264", - "created": "2023-02-22T06:24:34.178043845Z", - "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", - "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", - "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.14.417474384596773", - "created": "2023-02-22T06:58:06.704598725Z", - "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", - "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", - "created": "2023-02-22T06:52:40.77708053Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", - "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "resourceName": "test11", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.45.245928566483904", - "created": "2023-02-22T08:55:07.547309938Z", - "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", - "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", - "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", - "created": "2023-02-22T08:54:25.74053081Z", - "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", - "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.13.328827899509488", - "created": "2023-02-22T06:47:28.120518418Z", - "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", - "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", - "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", - "resourceName": "test11", - "resourceType": "anonCredsSchema", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "1.42.26264376650386", - "created": "2023-02-22T08:54:14.484707292Z", - "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", - "previousVersionId": null, - "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.0.8322705530387609", - "created": "2023-02-22T06:21:06.651892018Z", - "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", - "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", - "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.31.68736260709204", - "created": "2023-02-22T07:06:23.964025795Z", - "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", - "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", - "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", @@ -242,19 +268,6 @@ "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.96.35140535691139", - "created": "2023-02-22T07:35:25.81556714Z", - "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", - "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "nextVersionId": null - }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", @@ -269,17 +282,30 @@ "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.66.73560282313116", - "created": "2023-02-22T06:42:49.403227253Z", - "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", - "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", - "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", @@ -295,69 +321,43 @@ "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.1.6636632864708512", - "created": "2023-02-22T07:33:32.80237235Z", - "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", - "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", - "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", - "created": "2023-02-22T07:00:05.094232174Z", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", - "resourceName": "test11", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.38.00219791272952", - "created": "2023-02-22T08:57:23.341829704Z", - "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", - "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "nextVersionId": null - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", - "mediaType": "application/json", - "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", - "created": "2023-02-22T06:45:47.444289908Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", - "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.56.91909743350392", - "created": "2023-02-22T06:59:47.570665615Z", - "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", - "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", - "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", @@ -373,30 +373,30 @@ "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", - "created": "2023-02-22T07:35:43.388268438Z", - "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", - "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", - "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", - "created": "2023-02-22T08:57:35.205370982Z", - "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", - "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", - "nextVersionId": null + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json index 376225cb..18b88a06 100644 --- a/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_ed25519_2018_to_jwk_2020.json @@ -39,17 +39,30 @@ "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", "linkedResourceMetadata": [ { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "resourceName": "test - 11", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.75.7154775070032", - "created": "2023-02-22T06:54:21.642136513Z", - "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", - "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", - "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", @@ -65,173 +78,186 @@ "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", - "created": "2023-02-22T06:58:18.618625297Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", - "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", - "created": "2023-02-22T07:06:35.88519589Z", - "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", - "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", - "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", - "resourceName": "test - 11", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.52.437822168723436", - "created": "2023-02-22T06:31:46.632577547Z", - "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", - "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", - "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", - "created": "2023-02-22T06:43:01.285857333Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": null, - "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.60.10585488950264", - "created": "2023-02-22T06:24:34.178043845Z", - "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", - "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", - "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.14.417474384596773", - "created": "2023-02-22T06:58:06.704598725Z", - "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", - "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", - "created": "2023-02-22T06:52:40.77708053Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", - "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "resourceName": "test11", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.45.245928566483904", - "created": "2023-02-22T08:55:07.547309938Z", - "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", - "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", - "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", - "created": "2023-02-22T08:54:25.74053081Z", - "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", - "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.13.328827899509488", - "created": "2023-02-22T06:47:28.120518418Z", - "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", - "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", - "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", - "resourceName": "test11", - "resourceType": "anonCredsSchema", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "1.42.26264376650386", - "created": "2023-02-22T08:54:14.484707292Z", - "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", - "previousVersionId": null, - "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.0.8322705530387609", - "created": "2023-02-22T06:21:06.651892018Z", - "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", - "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", - "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.31.68736260709204", - "created": "2023-02-22T07:06:23.964025795Z", - "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", - "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", - "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", @@ -246,19 +272,6 @@ "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.96.35140535691139", - "created": "2023-02-22T07:35:25.81556714Z", - "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", - "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "nextVersionId": null - }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", @@ -273,17 +286,30 @@ "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.66.73560282313116", - "created": "2023-02-22T06:42:49.403227253Z", - "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", - "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", - "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", @@ -299,69 +325,43 @@ "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.1.6636632864708512", - "created": "2023-02-22T07:33:32.80237235Z", - "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", - "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", - "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", - "created": "2023-02-22T07:00:05.094232174Z", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", - "resourceName": "test11", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.38.00219791272952", - "created": "2023-02-22T08:57:23.341829704Z", - "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", - "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "nextVersionId": null - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", - "mediaType": "application/json", - "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", - "created": "2023-02-22T06:45:47.444289908Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", - "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.56.91909743350392", - "created": "2023-02-22T06:59:47.570665615Z", - "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", - "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", - "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", @@ -377,30 +377,30 @@ "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", - "created": "2023-02-22T07:35:43.388268438Z", - "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", - "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", - "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", - "created": "2023-02-22T08:57:35.205370982Z", - "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", - "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", - "nextVersionId": null + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json index acf27909..f7d49b86 100644 --- a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_and_version_id.json @@ -35,17 +35,30 @@ "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", "linkedResourceMetadata": [ { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "resourceName": "test - 11", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.75.7154775070032", - "created": "2023-02-22T06:54:21.642136513Z", - "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", - "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", - "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", @@ -61,173 +74,186 @@ "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", - "created": "2023-02-22T06:58:18.618625297Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", - "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", - "created": "2023-02-22T07:06:35.88519589Z", - "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", - "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", - "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", - "resourceName": "test - 11", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.52.437822168723436", - "created": "2023-02-22T06:31:46.632577547Z", - "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", - "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", - "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", - "created": "2023-02-22T06:43:01.285857333Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": null, - "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.60.10585488950264", - "created": "2023-02-22T06:24:34.178043845Z", - "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", - "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", - "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.14.417474384596773", - "created": "2023-02-22T06:58:06.704598725Z", - "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", - "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", - "created": "2023-02-22T06:52:40.77708053Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", - "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "resourceName": "test11", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.45.245928566483904", - "created": "2023-02-22T08:55:07.547309938Z", - "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", - "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", - "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", - "created": "2023-02-22T08:54:25.74053081Z", - "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", - "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.13.328827899509488", - "created": "2023-02-22T06:47:28.120518418Z", - "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", - "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", - "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", - "resourceName": "test11", - "resourceType": "anonCredsSchema", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "1.42.26264376650386", - "created": "2023-02-22T08:54:14.484707292Z", - "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", - "previousVersionId": null, - "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.0.8322705530387609", - "created": "2023-02-22T06:21:06.651892018Z", - "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", - "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", - "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.31.68736260709204", - "created": "2023-02-22T07:06:23.964025795Z", - "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", - "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", - "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", @@ -242,19 +268,6 @@ "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.96.35140535691139", - "created": "2023-02-22T07:35:25.81556714Z", - "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", - "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "nextVersionId": null - }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", @@ -269,17 +282,30 @@ "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.66.73560282313116", - "created": "2023-02-22T06:42:49.403227253Z", - "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", - "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", - "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", @@ -295,69 +321,43 @@ "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.1.6636632864708512", - "created": "2023-02-22T07:33:32.80237235Z", - "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", - "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", - "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", - "created": "2023-02-22T07:00:05.094232174Z", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", - "resourceName": "test11", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.38.00219791272952", - "created": "2023-02-22T08:57:23.341829704Z", - "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", - "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "nextVersionId": null - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", - "mediaType": "application/json", - "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", - "created": "2023-02-22T06:45:47.444289908Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", - "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.56.91909743350392", - "created": "2023-02-22T06:59:47.570665615Z", - "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", - "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", - "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", @@ -373,30 +373,30 @@ "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", - "created": "2023-02-22T07:35:43.388268438Z", - "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", - "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", - "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", - "created": "2023-02-22T08:57:35.205370982Z", - "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", - "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", - "nextVersionId": null + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json index acf27909..f7d49b86 100644 --- a/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_transform_key_version_time.json @@ -35,17 +35,30 @@ "versionId": "44f49254-8106-40ee-99ad-e50ac9517346", "linkedResourceMetadata": [ { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "resourceName": "test - 11", + "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", + "created": "2023-02-22T08:57:35.205370982Z", + "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", + "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.75.7154775070032", - "created": "2023-02-22T06:54:21.642136513Z", - "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", - "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", - "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + "resourceVersion": "1.38.00219791272952", + "created": "2023-02-22T08:57:23.341829704Z", + "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", + "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "nextVersionId": null }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", @@ -61,173 +74,186 @@ "nextVersionId": "f82ffa49-9c30-47f2-b398-fe801f99f666" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceName": "test11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", - "created": "2023-02-22T06:58:18.618625297Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", - "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" + "resourceVersion": "1.45.245928566483904", + "created": "2023-02-22T08:55:07.547309938Z", + "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", + "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", + "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", + "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", - "created": "2023-02-22T07:06:35.88519589Z", - "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", - "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", - "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" + "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", + "created": "2023-02-22T08:54:25.74053081Z", + "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", + "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", - "resourceName": "test - 11", + "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", + "resourceName": "test11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.52.437822168723436", - "created": "2023-02-22T06:31:46.632577547Z", - "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", - "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", - "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" + "resourceVersion": "1.42.26264376650386", + "created": "2023-02-22T08:54:14.484707292Z", + "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", + "previousVersionId": null, + "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", - "created": "2023-02-22T06:43:01.285857333Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": null, - "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" + "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", + "created": "2023-02-22T07:35:43.388268438Z", + "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", + "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", + "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.60.10585488950264", - "created": "2023-02-22T06:24:34.178043845Z", - "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", - "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", - "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" + "resourceVersion": "1.96.35140535691139", + "created": "2023-02-22T07:35:25.81556714Z", + "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", + "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", + "nextVersionId": null }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.14.417474384596773", - "created": "2023-02-22T06:58:06.704598725Z", - "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", - "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", - "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" + "resourceVersion": "1.1.6636632864708512", + "created": "2023-02-22T07:33:32.80237235Z", + "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", + "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/106061a7-2809-4188-9226-7b4111f24c0b", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceId": "106061a7-2809-4188-9226-7b4111f24c0b", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", - "created": "2023-02-22T06:52:40.77708053Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", - "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" + "resourceVersion": "d3a771f6-f40b-40c8-b671-d45e3ac3f03b", + "created": "2023-02-22T07:06:35.88519589Z", + "checksum": "c6533754f3b10ab8ea1d34cd17441cb3b39d65f963a8caefaa4c5d607c6456d5", + "previousVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "nextVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/40829caf-b415-4b1d-91a3-b56dfb6374f4", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "resourceName": "test11", + "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.45.245928566483904", - "created": "2023-02-22T08:55:07.547309938Z", - "checksum": "2a6af570635ed49a39eae9a9c60ccb40d61466839d4ab2f17432a8ac705da489", - "previousVersionId": "547abdb3-99f8-4040-b030-3296c4668846", - "nextVersionId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a" + "resourceVersion": "1.31.68736260709204", + "created": "2023-02-22T07:06:23.964025795Z", + "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", + "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e", + "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "e5845a9e-1968-41ee-8b9e-98f961250cc2", - "created": "2023-02-22T08:54:25.74053081Z", - "checksum": "bd89982cd29629765f5f8bcac95617fb34fb454131b28fe1b4fe55547542ae11", - "previousVersionId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "nextVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec" + "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", + "created": "2023-02-22T07:00:05.094232174Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", + "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.13.328827899509488", - "created": "2023-02-22T06:47:28.120518418Z", - "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", - "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", - "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + "resourceVersion": "1.56.91909743350392", + "created": "2023-02-22T06:59:47.570665615Z", + "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", + "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", + "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/547abdb3-99f8-4040-b030-3296c4668846", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/0e1726c4-edcf-4a4a-a3cb-6390abb2c774", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "547abdb3-99f8-4040-b030-3296c4668846", - "resourceName": "test11", - "resourceType": "anonCredsSchema", + "resourceId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "1.42.26264376650386", - "created": "2023-02-22T08:54:14.484707292Z", - "checksum": "4524f2193da6e5cc28d8a71f268d097891d053d4f206b045347ae117ce70d8ac", - "previousVersionId": null, - "nextVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4" + "resourceVersion": "9ad1341c-3835-4187-9005-902a87aded7e", + "created": "2023-02-22T06:58:18.618625297Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "3710c576-4acf-4e84-b319-81c606871c62", + "nextVersionId": "ac681b78-1cbc-48a9-914b-0cd66151ebca" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.0.8322705530387609", - "created": "2023-02-22T06:21:06.651892018Z", - "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", - "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", - "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" + "resourceVersion": "1.14.417474384596773", + "created": "2023-02-22T06:58:06.704598725Z", + "checksum": "4645fa956b3ec2565e323479ef9031e9778e63f4446c04a4c132c8ea866219f9", + "previousVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", + "nextVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "64d5e85c-365c-4457-ab0c-c32f19449f58", + "resourceId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.31.68736260709204", - "created": "2023-02-22T07:06:23.964025795Z", - "checksum": "c65b1d18da23ea0c918cd2a86d151946856a368adcaa04e91e7938e1f65064a6", - "previousVersionId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", - "nextVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe" + "resourceVersion": "1.75.7154775070032", + "created": "2023-02-22T06:54:21.642136513Z", + "checksum": "27ad51a49f079a6634b18bbc3ac08dd2d91f13fabf72ea8e5d83692fe4820058", + "previousVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b", + "nextVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/3710c576-4acf-4e84-b319-81c606871c62", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "3710c576-4acf-4e84-b319-81c606871c62", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "688650f6-f934-468a-b3c8-ff23772ce4d3", + "created": "2023-02-22T06:52:40.77708053Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889", + "nextVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/7f733048-0694-4a7c-ad67-23d691524f7b", @@ -242,19 +268,6 @@ "previousVersionId": "53714087-e20f-456b-a68f-0a3c64909a31", "nextVersionId": "02bc483a-f6e3-4a8e-918d-c903b369eb1c" }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "897368de-e6c5-44ac-a256-2bd02330ab5b", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.96.35140535691139", - "created": "2023-02-22T07:35:25.81556714Z", - "checksum": "4e64170b0b1aedd66b15c7a5644157519ed0d30dfc4df69989310dbef2f7bd60", - "previousVersionId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "nextVersionId": null - }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9844f94e-d21b-4e32-8575-6f3caaf70889", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", @@ -269,17 +282,30 @@ "nextVersionId": "3710c576-4acf-4e84-b319-81c606871c62" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/53714087-e20f-456b-a68f-0a3c64909a31", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceId": "53714087-e20f-456b-a68f-0a3c64909a31", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.66.73560282313116", - "created": "2023-02-22T06:42:49.403227253Z", - "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", - "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", - "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" + "resourceVersion": "1.13.328827899509488", + "created": "2023-02-22T06:47:28.120518418Z", + "checksum": "f7769a16166c55533e3a39aa8b7a2d57c9cc91e5d10fac24a7a52f8af146f0fc", + "previousVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea", + "nextVersionId": "7f733048-0694-4a7c-ad67-23d691524f7b" + }, + { + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", + "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", + "resourceName": "TAG", + "resourceType": "anonCredsCredDef", + "mediaType": "application/json", + "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", + "created": "2023-02-22T06:45:47.444289908Z", + "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", + "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", + "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9c280ef5-96d6-423c-a5eb-e397d82317ea", @@ -295,69 +321,43 @@ "nextVersionId": "53714087-e20f-456b-a68f-0a3c64909a31" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "9f41aca5-bbdf-473d-88cb-4dfb78671ffe", - "resourceName": "test - 11", - "resourceType": "anonCredsSchema", - "mediaType": "application/json", - "resourceVersion": "1.1.6636632864708512", - "created": "2023-02-22T07:33:32.80237235Z", - "checksum": "8847e6b3b935d1c281fe714872edfa3755f45531217dca87f33daae53f43dc64", - "previousVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58", - "nextVersionId": "897368de-e6c5-44ac-a256-2bd02330ab5b" - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "ac681b78-1cbc-48a9-914b-0cd66151ebca", + "resourceId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", "resourceName": "TAG", "resourceType": "anonCredsCredDef", "mediaType": "application/json", - "resourceVersion": "7e8e12df-203b-4941-b739-a2f4c49194e5", - "created": "2023-02-22T07:00:05.094232174Z", + "resourceVersion": "e4700409-975a-45ae-8e34-c85ec1c15197", + "created": "2023-02-22T06:43:01.285857333Z", "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "0e1726c4-edcf-4a4a-a3cb-6390abb2c774", - "nextVersionId": "106061a7-2809-4188-9226-7b4111f24c0b" + "previousVersionId": null, + "nextVersionId": "d573f87b-15ab-42dc-b988-f4281e152b6d" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/9b6d5a3f-2dd4-4d14-b940-96967239f933", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "bae5cb6c-564a-4ed4-8c0e-d5c3b0f8ae0a", - "resourceName": "test11", + "resourceId": "9b6d5a3f-2dd4-4d14-b940-96967239f933", + "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.38.00219791272952", - "created": "2023-02-22T08:57:23.341829704Z", - "checksum": "93ba6f3c55ee073e6278f98e820776e73cfd9d3e32dc5882507ee8effbdbfadd", - "previousVersionId": "40829caf-b415-4b1d-91a3-b56dfb6374f4", - "nextVersionId": null - }, - { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "d573f87b-15ab-42dc-b988-f4281e152b6d", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", - "mediaType": "application/json", - "resourceVersion": "c617dc8c-0cc8-4611-8995-decddf2c577c", - "created": "2023-02-22T06:45:47.444289908Z", - "checksum": "6b6eae38e7a137b332354e3be544c88024994f71ffef20c479e288eda10e799b", - "previousVersionId": "21ea37da-f382-4f31-82ae-0485b3f2a97c", - "nextVersionId": "9844f94e-d21b-4e32-8575-6f3caaf70889" + "resourceVersion": "1.66.73560282313116", + "created": "2023-02-22T06:42:49.403227253Z", + "checksum": "d81a6caf78ed4e7ee983acd8b2db2ba97f84a95ec35c3a9f97a5f56d0f4e7b2e", + "previousVersionId": "12e7385c-9815-4094-a8de-50b0f8713508", + "nextVersionId": "9c280ef5-96d6-423c-a5eb-e397d82317ea" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/12e7385c-9815-4094-a8de-50b0f8713508", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "e4e32646-69a0-40ef-af9d-235cb0b6a108", + "resourceId": "12e7385c-9815-4094-a8de-50b0f8713508", "resourceName": "test - 11", "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "1.56.91909743350392", - "created": "2023-02-22T06:59:47.570665615Z", - "checksum": "4c5e3136eb7e00f88145af3f100c252c366cbd97ca60efc99916cf4f1e66f7de", - "previousVersionId": "31fa6841-bcda-4a3c-abd3-261e1b244d3c", - "nextVersionId": "64d5e85c-365c-4457-ab0c-c32f19449f58" + "resourceVersion": "1.52.437822168723436", + "created": "2023-02-22T06:31:46.632577547Z", + "checksum": "e94bcb65a758753c1b66332c5d1878c2b87b959c3af7f94b5a5d81ed241292fa", + "previousVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88", + "nextVersionId": "9b6d5a3f-2dd4-4d14-b940-96967239f933" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/eee49898-c80d-4862-a7db-73c7aa9a6c88", @@ -373,30 +373,30 @@ "nextVersionId": "12e7385c-9815-4094-a8de-50b0f8713508" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f1d46889-e6fb-4982-8953-d5caefdc8c9a", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/319f8889-8bbe-4fc6-b5a4-638ba58390a2", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f1d46889-e6fb-4982-8953-d5caefdc8c9a", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "923201d7-401f-442f-b864-9bbe42e8d1e6", - "created": "2023-02-22T07:35:43.388268438Z", - "checksum": "a0c92b865277e57bb71d950a998e8ab90d0a76824cbc87e0e793715a6353fb19", - "previousVersionId": "106061a7-2809-4188-9226-7b4111f24c0b", - "nextVersionId": "4abb1244-f5b5-47b0-a088-eec9304a9a7e" + "resourceVersion": "1.60.10585488950264", + "created": "2023-02-22T06:24:34.178043845Z", + "checksum": "5c259086d4676d6fe06e447776c8e55f04e6e01d98489b2a85d3a35d8f50e732", + "previousVersionId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "nextVersionId": "eee49898-c80d-4862-a7db-73c7aa9a6c88" }, { - "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/f82ffa49-9c30-47f2-b398-fe801f99f666", + "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/57a091e6-aafb-4c88-81fe-508a51c92491", "resourceCollectionId": "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c", - "resourceId": "f82ffa49-9c30-47f2-b398-fe801f99f666", - "resourceName": "TAG", - "resourceType": "anonCredsCredDef", + "resourceId": "57a091e6-aafb-4c88-81fe-508a51c92491", + "resourceName": "test - 11", + "resourceType": "anonCredsSchema", "mediaType": "application/json", - "resourceVersion": "abca66ec-3fbe-4dc2-af41-71708d2c8057", - "created": "2023-02-22T08:57:35.205370982Z", - "checksum": "3b9a5d73b9ea6a416f5d8ef44fb09a23e77a595f8a70b0dd606a98d2ee13cc16", - "previousVersionId": "0ce57ae9-af04-42bd-bf6c-047cd8fc0dec", - "nextVersionId": null + "resourceVersion": "1.0.8322705530387609", + "created": "2023-02-22T06:21:06.651892018Z", + "checksum": "9737d5e62aa4ea8903e11d9322782b5c5349a37ffecca17b8b0165941ca084aa", + "previousVersionId": "ffd001c2-1f80-4cd8-84b2-945fba309457", + "nextVersionId": "319f8889-8bbe-4fc6-b5a4-638ba58390a2" }, { "resourceURI": "did:cheqd:testnet:d8ac0372-0d4b-413e-8ef5-8e8f07822b2c/resources/ffd001c2-1f80-4cd8-84b2-945fba309457", From 36e543f517e2b6346d9cd3a4d92068092e76bd13 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:29:44 +0500 Subject: [PATCH 38/46] Add integration tests for testing transformKey query with old 16/32 chars style DIDs. --- .../query/transform_key/positive_test.go | 84 +++++++++++ ..._old_16_indy_jwk_2020_to_ed25519_2018.json | 40 ++++++ ..._old_16_indy_jwk_2020_to_ed25519_2020.json | 40 ++++++ ...ddoc_old_16_indy_jwk_2020_to_jwk_2020.json | 44 ++++++ ...32_indy_ed255519_2020_to_ed25519_2018.json | 130 +++++++++++++++++ ...32_indy_ed255519_2020_to_ed25519_2020.json | 130 +++++++++++++++++ ...old_32_indy_ed255519_2020_to_jwk_2020.json | 134 ++++++++++++++++++ 7 files changed, 602 insertions(+) create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2018.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_jwk_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2018.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2020.json create mode 100644 tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_jwk_2020.json diff --git a/tests/integration/rest/diddoc/query/transform_key/positive_test.go b/tests/integration/rest/diddoc/query/transform_key/positive_test.go index b1bbc6ca..ba412765 100644 --- a/tests/integration/rest/diddoc/query/transform_key/positive_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/positive_test.go @@ -163,6 +163,90 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", }, ), + Entry( + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy16CharStyleTestnetDid, + string(types.Ed25519VerificationKey2018), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2018.json", + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy16CharStyleTestnetDid, + string(types.Ed25519VerificationKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2020.json", + }, + ), + + Entry( + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported JSONWebKey2020 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy16CharStyleTestnetDid, + string(types.JsonWebKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_jwk_2020.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy32CharStyleTestnetDid, + string(types.Ed25519VerificationKey2018), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2018.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy32CharStyleTestnetDid, + string(types.Ed25519VerificationKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2020.json", + }, + ), + + Entry( + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported JSONWebKey2020 transformKey", + utils.PositiveTestCase{ + DidURL: fmt.Sprintf( + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + testconstants.OldIndy32CharStyleTestnetDid, + string(types.JsonWebKey2020), + ), + ResolutionType: testconstants.DefaultResolutionType, + ExpectedStatusCode: http.StatusOK, + ExpectedJSONPath: "../../../testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_jwk_2020.json", + }, + ), + Entry( "can get DIDDoc (Ed25519VerificationKey2018) with supported Ed25519VerificationKey2020 transformKey and DIDDoc versionId queries", utils.PositiveTestCase{ diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2018.json new file mode 100644 index 00000000..66b6afc0 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2018.json @@ -0,0 +1,40 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:15:59Z", + "did": { + "didString": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "methodSpecificId": "CpeMubv5yw63jXyrgRRsxR", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "controller": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "publicKeyBase58": "HqbcXb3irKRCMstm5nav1dG1qksdDkKjDK41gR5qz64b" + } + ], + "authentication": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ], + "assertionMethod": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-13T06:09:04Z", + "versionId": "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6" + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2020.json new file mode 100644 index 00000000..6a5fc318 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_ed25519_2020.json @@ -0,0 +1,40 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:12:22Z", + "did": { + "didString": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "methodSpecificId": "CpeMubv5yw63jXyrgRRsxR", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "controller": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "publicKeyMultibase": "z6MkwHrf7qJABrufUNjTmMYkrip1fL9Udda5uKxwWh3ruJqy" + } + ], + "authentication": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ], + "assertionMethod": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-13T06:09:04Z", + "versionId": "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6" + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_jwk_2020.json new file mode 100644 index 00000000..6bd1c995 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_16_indy_jwk_2020_to_jwk_2020.json @@ -0,0 +1,44 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:16:42Z", + "did": { + "didString": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "methodSpecificId": "CpeMubv5yw63jXyrgRRsxR", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/jws-2020/v1" + ], + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "controller": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1", + "type": "JsonWebKey2020", + "controller": "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR", + "publicKeyJwk": { + "crv": "Ed25519", + "kty": "OKP", + "x": "-i4BlSGbjoUqmqRePrQhBvHbvqrrQjVIDL_lAoceRGw" + } + } + ], + "authentication": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ], + "assertionMethod": [ + "did:cheqd:testnet:CpeMubv5yw63jXyrgRRsxR#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-13T06:09:04Z", + "versionId": "674e6cb5-8d7c-5c50-b0ff-d91bcbcbd5d6" + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2018.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2018.json new file mode 100644 index 00000000..67334afd --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2018.json @@ -0,0 +1,130 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:20:07Z", + "did": { + "didString": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "methodSpecificId": "3KpiDD6Hxs4i2G7FtpiGhu", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "controller": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1", + "type": "Ed25519VerificationKey2018", + "controller": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "publicKeyBase58": "6MktNQJ7YCFUBk7Q6VAD9jnUfgYcxwXstGdoALbME9QSTL3" + } + ], + "authentication": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-12T08:57:25Z", + "versionId": "1dc202d4-26ee-54a9-b091-8d2e1f609722", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:01:23Z", + "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", + "previousVersionId": "9f5b2985-990d-4160-94ed-06706043af7e", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/9f5b2985-990d-4160-94ed-06706043af7e", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:14Z", + "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", + "previousVersionId": "214b8b61-a861-416b-a7e4-45533af40ada", + "nextVersionId": "7c20c558-9b0b-46c3-a095-79861828b35a" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/214b8b61-a861-416b-a7e4-45533af40ada", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:02Z", + "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", + "previousVersionId": "616be02a-0838-42ee-b906-065fff3799ea", + "nextVersionId": "9f5b2985-990d-4160-94ed-06706043af7e" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/a22b1d28-c408-43b8-9001-563b4a648317", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", + "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-CredDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:22Z", + "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/616be02a-0838-42ee-b906-065fff3799ea", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:16Z", + "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", + "previousVersionId": null, + "nextVersionId": "214b8b61-a861-416b-a7e4-45533af40ada" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:03Z", + "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-Schema", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:57:31Z", + "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2020.json new file mode 100644 index 00000000..30bfad9c --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_ed25519_2020.json @@ -0,0 +1,130 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:20:38Z", + "did": { + "didString": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "methodSpecificId": "3KpiDD6Hxs4i2G7FtpiGhu", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "controller": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1", + "type": "Ed25519VerificationKey2020", + "controller": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "publicKeyMultibase": "z6MktNQJ7YCFUBk7Q6VAD9jnUfgYcxwXstGdoALbME9QSTL3" + } + ], + "authentication": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-12T08:57:25Z", + "versionId": "1dc202d4-26ee-54a9-b091-8d2e1f609722", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:01:23Z", + "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", + "previousVersionId": "9f5b2985-990d-4160-94ed-06706043af7e", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/9f5b2985-990d-4160-94ed-06706043af7e", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:14Z", + "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", + "previousVersionId": "214b8b61-a861-416b-a7e4-45533af40ada", + "nextVersionId": "7c20c558-9b0b-46c3-a095-79861828b35a" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/214b8b61-a861-416b-a7e4-45533af40ada", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:02Z", + "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", + "previousVersionId": "616be02a-0838-42ee-b906-065fff3799ea", + "nextVersionId": "9f5b2985-990d-4160-94ed-06706043af7e" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/a22b1d28-c408-43b8-9001-563b4a648317", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", + "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-CredDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:22Z", + "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/616be02a-0838-42ee-b906-065fff3799ea", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:16Z", + "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", + "previousVersionId": null, + "nextVersionId": "214b8b61-a861-416b-a7e4-45533af40ada" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:03Z", + "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-Schema", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:57:31Z", + "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} diff --git a/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_jwk_2020.json b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_jwk_2020.json new file mode 100644 index 00000000..7f21bb83 --- /dev/null +++ b/tests/integration/rest/testdata/query/transform_key/diddoc_old_32_indy_ed255519_2020_to_jwk_2020.json @@ -0,0 +1,134 @@ +{ + "@context": "https://w3id.org/did-resolution/v1", + "didResolutionMetadata": { + "contentType": "application/did+ld+json", + "retrieved": "2023-04-19T14:21:22Z", + "did": { + "didString": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "methodSpecificId": "3KpiDD6Hxs4i2G7FtpiGhu", + "method": "cheqd" + } + }, + "didDocument": { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "controller": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu" + ], + "verificationMethod": [ + { + "id": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1", + "type": "JsonWebKey2020", + "controller": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", + "publicKeyJwk": { + "crv": "Ed25519", + "kty": "OKP", + "x": "7QHOxQqqZrE0dc6A5vARFimS0OFcBpcHl-cYi3unckcIkA" + } + } + ], + "authentication": [ + "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu#key-1" + ] + }, + "didDocumentMetadata": { + "created": "2022-10-12T08:57:25Z", + "versionId": "1dc202d4-26ee-54a9-b091-8d2e1f609722", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:01:23Z", + "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", + "previousVersionId": "9f5b2985-990d-4160-94ed-06706043af7e", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/9f5b2985-990d-4160-94ed-06706043af7e", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:14Z", + "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", + "previousVersionId": "214b8b61-a861-416b-a7e4-45533af40ada", + "nextVersionId": "7c20c558-9b0b-46c3-a095-79861828b35a" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/214b8b61-a861-416b-a7e4-45533af40ada", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:02Z", + "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", + "previousVersionId": "616be02a-0838-42ee-b906-065fff3799ea", + "nextVersionId": "9f5b2985-990d-4160-94ed-06706043af7e" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/a22b1d28-c408-43b8-9001-563b4a648317", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", + "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-CredDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:22Z", + "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/616be02a-0838-42ee-b906-065fff3799ea", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:16Z", + "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", + "previousVersionId": null, + "nextVersionId": "214b8b61-a861-416b-a7e4-45533af40ada" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:03Z", + "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-Schema", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:57:31Z", + "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", + "previousVersionId": null, + "nextVersionId": null + } + ] + } +} From 10cfabfcfaca0403224b0ea7592ad394517c5503 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:31:50 +0500 Subject: [PATCH 39/46] Rename file from "transform_key_suite_test.go" to "suite_test.go". --- .../transform_key/{transform_key_suite_test.go => suite_test.go} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/integration/rest/diddoc/query/transform_key/{transform_key_suite_test.go => suite_test.go} (100%) diff --git a/tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go b/tests/integration/rest/diddoc/query/transform_key/suite_test.go similarity index 100% rename from tests/integration/rest/diddoc/query/transform_key/transform_key_suite_test.go rename to tests/integration/rest/diddoc/query/transform_key/suite_test.go From 0010cf3cddf49f75637b2d04568fb372464b139d Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:36:11 +0500 Subject: [PATCH 40/46] Remove debug println. --- .../rest/diddoc/query/positive_diddoc_service_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go index 0074a3dd..7db36681 100644 --- a/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go +++ b/tests/integration/rest/diddoc/query/positive_diddoc_service_test.go @@ -23,7 +23,6 @@ var _ = DescribeTable("Positive: Get Service param", func(testCase utils.Positiv client := resty.New() client.SetRedirectPolicy(resty.NoRedirectPolicy()) - fmt.Println(testCase.DidURL) resp, err := client.R(). SetHeader("Accept", testCase.ResolutionType). Get(testCase.DidURL) From cb77d9f4e47ef7050999a2522d4cedc52a1d0e6e Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:53:14 +0500 Subject: [PATCH 41/46] Update did/versions integration tests payloads. --- .../diddoc_versions_did_json.json | 32 +++++- .../diddoc_versions_old_32_indy_did.json | 99 ++++++++++++++++++- 2 files changed, 126 insertions(+), 5 deletions(-) diff --git a/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_did_json.json b/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_did_json.json index 2b8e55f7..86fbcfa1 100644 --- a/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_did_json.json +++ b/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_did_json.json @@ -1,7 +1,7 @@ { "dereferencingMetadata": { "contentType": "application/did+json", - "retrieved": "2023-04-05T16:34:14Z", + "retrieved": "2023-04-19T14:47:33Z", "did": { "didString": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", "methodSpecificId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", @@ -12,7 +12,35 @@ "versions": [ { "created": "2023-01-25T11:58:10.390039347Z", - "versionId": "e5615fc2-6f13-42b1-989c-49576a574cef" + "versionId": "e5615fc2-6f13-42b1-989c-49576a574cef", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "9ba3922e-d5f5-4f53-b265-fc0d4e988c77", + "resourceName": "Demo Resource", + "resourceType": "String", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2023-01-25T12:08:39.633307395Z", + "checksum": "e1dbc03b50bdb995961dc8843df6539b79d03bf49787ed6462189ee97d27eaf3", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0/resources/e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceCollectionId": "c1685ca0-1f5b-439c-8eb8-5c0e85ab7cd0", + "resourceId": "e733ebb7-c8dd-41ed-9d42-33bceea70952", + "resourceName": "ResourceName", + "resourceType": "String", + "mediaType": "text/plain; charset=utf-8", + "resourceVersion": "", + "created": "2023-01-25T12:04:52.261619721Z", + "checksum": "cffd829b06797f85407be9353056db722ca3eca0c05ab0462a42d30f19cdef09", + "previousVersionId": null, + "nextVersionId": null + } + ] } ] }, diff --git a/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_old_32_indy_did.json b/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_old_32_indy_did.json index e89abb92..7ffad2c2 100644 --- a/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_old_32_indy_did.json +++ b/tests/integration/rest/testdata/diddoc_versions/diddoc_versions_old_32_indy_did.json @@ -2,7 +2,7 @@ "@context": "https://w3id.org/did-resolution/v1", "dereferencingMetadata": { "contentType": "application/did+ld+json", - "retrieved": "2023-04-03T11:31:59Z", + "retrieved": "2023-04-19T14:39:24Z", "did": { "didString": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu", "methodSpecificId": "3KpiDD6Hxs4i2G7FtpiGhu", @@ -13,9 +13,102 @@ "versions": [ { "created": "2022-10-12T08:57:25Z", - "versionId": "1dc202d4-26ee-54a9-b091-8d2e1f609722" + "versionId": "1dc202d4-26ee-54a9-b091-8d2e1f609722", + "linkedResourceMetadata": [ + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/214b8b61-a861-416b-a7e4-45533af40ada", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "214b8b61-a861-416b-a7e4-45533af40ada", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:02Z", + "checksum": "4bf7d5855a05955f84195f01ef7e8d91353a8895dc5d9022aebbcecc9f2c3dc6", + "previousVersionId": "616be02a-0838-42ee-b906-065fff3799ea", + "nextVersionId": "9f5b2985-990d-4160-94ed-06706043af7e" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/616be02a-0838-42ee-b906-065fff3799ea", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "616be02a-0838-42ee-b906-065fff3799ea", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:16Z", + "checksum": "94af95e5a9743aa9f059387b61dffc78aa7774960b4e43cc762ceed0f55d907f", + "previousVersionId": null, + "nextVersionId": "214b8b61-a861-416b-a7e4-45533af40ada" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "7c20c558-9b0b-46c3-a095-79861828b35a", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:01:23Z", + "checksum": "60c1c5c408e9d8e74b95c272a7961c9c3042af64ffbd8cbdc43e54df06655bc4", + "previousVersionId": "9f5b2985-990d-4160-94ed-06706043af7e", + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "83205e1a-f474-448d-bf4b-816fe2aabd84", + "resourceName": "RevRegDef301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:03Z", + "checksum": "4324bc513c13f1e841463d253c51e3aafb110f841e2e50f1b29df2466ca0e36f", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/9f5b2985-990d-4160-94ed-06706043af7e", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "9f5b2985-990d-4160-94ed-06706043af7e", + "resourceName": "RevRegEntry301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-RevRegEntry", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T09:00:14Z", + "checksum": "fb8a2127adf86e6d6f3f235832775099c437012565039b6658858b6e52dbe456", + "previousVersionId": "214b8b61-a861-416b-a7e4-45533af40ada", + "nextVersionId": "7c20c558-9b0b-46c3-a095-79861828b35a" + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/a22b1d28-c408-43b8-9001-563b4a648317", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "a22b1d28-c408-43b8-9001-563b4a648317", + "resourceName": "Degree301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-CredDef", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:58:22Z", + "checksum": "eac5b9093f7375450bba4a91c67dcc7fe69c36cad9fa16aa3720d3f91f5ced1b", + "previousVersionId": null, + "nextVersionId": null + }, + { + "resourceURI": "did:cheqd:testnet:3KpiDD6Hxs4i2G7FtpiGhu/resources/f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceCollectionId": "3KpiDD6Hxs4i2G7FtpiGhu", + "resourceId": "f31c68e6-61b5-4926-a932-40a13b4c4507", + "resourceName": "FaberCollege301071f2-314d-49e4-8e65-393586e5e05a", + "resourceType": "CL-Schema", + "mediaType": "application/json", + "resourceVersion": "", + "created": "2022-10-12T08:57:31Z", + "checksum": "657e37a833f139fc8f58b115174b2297223a2d98316a78ce8d49d60467d8913d", + "previousVersionId": null, + "nextVersionId": null + } + ] } ] }, "contentMetadata": {} -} \ No newline at end of file +} From 87f1bb0896da78e8d30b8bebe704e385ebb676f7 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 19:56:49 +0500 Subject: [PATCH 42/46] Fix problem with go-releaser. --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index e907b0f9..e6236db3 100644 --- a/Makefile +++ b/Makefile @@ -158,7 +158,7 @@ clean: swagger: @echo "Generating Swagger files..." - @go install github.com/swaggo/swag/cmd/swag@latest + @go install github.com/swaggo/swag/cmd/swag@v1.8.11 @swag fmt @swag init -g ./main.go .PHONY: swagger From a580790d8fb9747ffd5d574a0ffec67ac09217ff Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 20:17:19 +0500 Subject: [PATCH 43/46] Refactor code and unit/integration tests. --- services/diddoc/diddoc_query.go | 2 +- tests/constants/constants.go | 7 ++-- .../query/transform_key/negative_test.go | 40 ++++--------------- .../query/transform_key/positive_test.go | 12 +++--- .../unit/diddoc/request/transform_key_test.go | 3 +- 5 files changed, 21 insertions(+), 43 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 35178897..85d28c03 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -45,8 +45,8 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte relativeRef := dd.GetQueryParam(types.RelativeRef) resourceId := dd.GetQueryParam(types.ResourceId) resourceVersionTime := dd.GetQueryParam(types.ResourceVersionTime) - resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) metadata := dd.GetQueryParam(types.Metadata) + resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) // // Validation of query parameters // if versionId != "" && versionTime != "" { diff --git a/tests/constants/constants.go b/tests/constants/constants.go index e15221a9..a284c607 100644 --- a/tests/constants/constants.go +++ b/tests/constants/constants.go @@ -10,9 +10,10 @@ import ( ) var ( - DefaultResolutionType = "*/*" - DefaultEncodingType = "gzip, deflate, br" - NotSupportedEncodingType = "deflate, br" + DefaultResolutionType = "*/*" + DefaultEncodingType = "gzip, deflate, br" + NotSupportedEncodingType = "deflate, br" + NotSupportedTransformKeyType = "EDDSA" ) var ( diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go index 60821627..287842c9 100644 --- a/tests/integration/rest/diddoc/query/transform_key/negative_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -17,7 +17,7 @@ import ( var identifierDidWithEd25519VerificationKey2018Key = "d8ac0372-0d4b-413e-8ef5-8e8f07822b2c" -var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { +var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", func(testCase utils.NegativeTestCase) { client := resty.New() resp, err := client.R(). @@ -34,11 +34,12 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { }, Entry( - "cannot get DIDDoc with not existent DID and not existent transformKey query parameter", + "cannot get DIDDoc with not existent DID and not supported transformKey query parameter", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", testconstants.NotExistentTestnetDid, + testconstants.NotSupportedTransformKeyType, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -63,8 +64,9 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { "cannot get DIDDoc with not supported transformKey query parameter", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", didWithEd25519VerificationKey2018Key, + testconstants.NotSupportedTransformKeyType, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ @@ -194,40 +196,14 @@ var _ = DescribeTable("", func(testCase utils.NegativeTestCase) { }, ), - Entry( - "cannot get DIDDoc with combination of transformKey and resourceType query parameters", - utils.NegativeTestCase{ - DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceType=someType", - didWithEd25519VerificationKey2018Key, - types.Ed25519VerificationKey2020, - ), - ResolutionType: testconstants.DefaultResolutionType, - ExpectedResult: utils.DereferencingResult{ - Context: "", - DereferencingMetadata: types.DereferencingMetadata{ - ContentType: types.DIDJSONLD, - ResolutionError: "representationNotSupported", - DidProperties: types.DidProperties{ - DidString: didWithEd25519VerificationKey2018Key, - MethodSpecificId: identifierDidWithEd25519VerificationKey2018Key, - Method: testconstants.ValidMethod, - }, - }, - ContentStream: nil, - Metadata: types.ResolutionDidDocMetadata{}, - }, - ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, - }, - ), - Entry( "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=someVersionTime", + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", didWithEd25519VerificationKey2018Key, types.Ed25519VerificationKey2020, + testconstants.NotEmptyTime, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ diff --git a/tests/integration/rest/diddoc/query/transform_key/positive_test.go b/tests/integration/rest/diddoc/query/transform_key/positive_test.go index ba412765..721b6798 100644 --- a/tests/integration/rest/diddoc/query/transform_key/positive_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/positive_test.go @@ -164,7 +164,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey", + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", @@ -178,7 +178,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey", + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", @@ -192,7 +192,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported JSONWebKey2020 transformKey", + "can get DIDDoc (JSONWebKey2020) with an existent old 16 characters INDY style DID and supported JSONWebKey2020 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", @@ -206,7 +206,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey", + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2018 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", @@ -220,7 +220,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey", + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported Ed25519VerificationKey2020 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", @@ -234,7 +234,7 @@ var _ = DescribeTable("Positive: Get DIDDoc with transformKey query parameter", ), Entry( - "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported JSONWebKey2020 transformKey", + "can get DIDDoc (Ed25519VerificationKey2020) with an existent old 32 characters INDY style DID and supported JSONWebKey2020 transformKey query parameter", utils.PositiveTestCase{ DidURL: fmt.Sprintf( "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", diff --git a/tests/unit/diddoc/request/transform_key_test.go b/tests/unit/diddoc/request/transform_key_test.go index d93a8552..cee698d8 100644 --- a/tests/unit/diddoc/request/transform_key_test.go +++ b/tests/unit/diddoc/request/transform_key_test.go @@ -235,9 +235,10 @@ var _ = DescribeTable("Test Query handler with transformKey params", func(testCa "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", queriesDIDDocTestCase{ didURL: fmt.Sprintf( - "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=someVersionTime", + "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", testconstants.ValidDid, types.Ed25519VerificationKey2018, + testconstants.NotEmptyTime, ), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{}, From 6812d7d4c89936b49d61c678b626d763f6ac829a Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 20:28:23 +0500 Subject: [PATCH 44/46] Set correct time format in unit/integration tests. --- .../rest/diddoc/query/transform_key/negative_test.go | 2 +- tests/unit/diddoc/request/transform_key_test.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go index 287842c9..285ab753 100644 --- a/tests/integration/rest/diddoc/query/transform_key/negative_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -203,7 +203,7 @@ var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", didWithEd25519VerificationKey2018Key, types.Ed25519VerificationKey2020, - testconstants.NotEmptyTime, + testconstants.NotEmptyTime.String(), ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ diff --git a/tests/unit/diddoc/request/transform_key_test.go b/tests/unit/diddoc/request/transform_key_test.go index cee698d8..81c5384c 100644 --- a/tests/unit/diddoc/request/transform_key_test.go +++ b/tests/unit/diddoc/request/transform_key_test.go @@ -238,7 +238,7 @@ var _ = DescribeTable("Test Query handler with transformKey params", func(testCa "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", testconstants.ValidDid, types.Ed25519VerificationKey2018, - testconstants.NotEmptyTime, + testconstants.NotEmptyTime.String(), ), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{}, From ec2f4faa11f3b8a5b6cb7a744ae6857f90807b06 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Wed, 19 Apr 2023 20:37:42 +0500 Subject: [PATCH 45/46] Set correct time format in unit/integration tests. --- .../rest/diddoc/query/transform_key/negative_test.go | 3 +-- tests/unit/diddoc/request/transform_key_test.go | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go index 285ab753..f8342340 100644 --- a/tests/integration/rest/diddoc/query/transform_key/negative_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -200,10 +200,9 @@ var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", + "http://localhost:8080/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=2006-01-02", didWithEd25519VerificationKey2018Key, types.Ed25519VerificationKey2020, - testconstants.NotEmptyTime.String(), ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ diff --git a/tests/unit/diddoc/request/transform_key_test.go b/tests/unit/diddoc/request/transform_key_test.go index 81c5384c..175e1be6 100644 --- a/tests/unit/diddoc/request/transform_key_test.go +++ b/tests/unit/diddoc/request/transform_key_test.go @@ -235,10 +235,9 @@ var _ = DescribeTable("Test Query handler with transformKey params", func(testCa "cannot get DIDDoc with combination of transformKey and resourceVersionTime query parameters", queriesDIDDocTestCase{ didURL: fmt.Sprintf( - "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=%s", + "/1.0/identifiers/%s?transformKey=%s&resourceVersionTime=2006-01-02", testconstants.ValidDid, types.Ed25519VerificationKey2018, - testconstants.NotEmptyTime.String(), ), resolutionType: types.DIDJSONLD, expectedResolution: &types.DidResolution{}, From cbe1934f14c7390d91ca04421be4c8af5b0438c9 Mon Sep 17 00:00:00 2001 From: abdulla-ashurov Date: Fri, 21 Apr 2023 18:23:40 +0500 Subject: [PATCH 46/46] Fix the review comments. --- services/diddoc/diddoc_query.go | 4 ++-- tests/constants/constants.go | 7 +++---- .../query/transform_key/negative_test.go | 10 ++++------ types/supported_queries.go | 19 ++++++++----------- 4 files changed, 17 insertions(+), 23 deletions(-) diff --git a/services/diddoc/diddoc_query.go b/services/diddoc/diddoc_query.go index 46fcd279..07a2515d 100644 --- a/services/diddoc/diddoc_query.go +++ b/services/diddoc/diddoc_query.go @@ -39,7 +39,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte versionId := dd.GetQueryParam(types.VersionId) versionTime := dd.GetQueryParam(types.VersionTime) - transformKey := dd.GetQueryParam(types.TransformKey) + transformKey := types.TransformKeyType(dd.GetQueryParam(types.TransformKey)) service := dd.GetQueryParam(types.ServiceQ) relativeRef := dd.GetQueryParam(types.RelativeRef) resourceId := dd.GetQueryParam(types.ResourceId) @@ -47,7 +47,7 @@ func (dd *QueryDIDDocRequestService) SpecificValidation(c services.ResolverConte metadata := dd.GetQueryParam(types.Metadata) resourceMetadata := dd.GetQueryParam(types.ResourceMetadata) - if transformKey != "" && !types.IsSupportedWithCombinationTransformKeyQuery(dd.Queries) { + if string(transformKey) != "" && (!transformKey.IsSupported() || !types.IsSupportedWithCombinationTransformKeyQuery(dd.Queries)) { return types.NewRepresentationNotSupportedError(dd.Did, dd.GetContentType(), nil, dd.IsDereferencing) } diff --git a/tests/constants/constants.go b/tests/constants/constants.go index a284c607..e15221a9 100644 --- a/tests/constants/constants.go +++ b/tests/constants/constants.go @@ -10,10 +10,9 @@ import ( ) var ( - DefaultResolutionType = "*/*" - DefaultEncodingType = "gzip, deflate, br" - NotSupportedEncodingType = "deflate, br" - NotSupportedTransformKeyType = "EDDSA" + DefaultResolutionType = "*/*" + DefaultEncodingType = "gzip, deflate, br" + NotSupportedEncodingType = "deflate, br" ) var ( diff --git a/tests/integration/rest/diddoc/query/transform_key/negative_test.go b/tests/integration/rest/diddoc/query/transform_key/negative_test.go index f8342340..0b91eebb 100644 --- a/tests/integration/rest/diddoc/query/transform_key/negative_test.go +++ b/tests/integration/rest/diddoc/query/transform_key/negative_test.go @@ -37,16 +37,15 @@ var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", "cannot get DIDDoc with not existent DID and not supported transformKey query parameter", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", testconstants.NotExistentTestnetDid, - testconstants.NotSupportedTransformKeyType, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ Context: "", DereferencingMetadata: types.DereferencingMetadata{ ContentType: types.DIDJSONLD, - ResolutionError: "notFound", + ResolutionError: "representationNotSupported", DidProperties: types.DidProperties{ DidString: testconstants.NotExistentTestnetDid, MethodSpecificId: testconstants.NotExistentIdentifier, @@ -56,7 +55,7 @@ var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", ContentStream: nil, Metadata: types.ResolutionDidDocMetadata{}, }, - ExpectedStatusCode: types.NotFoundHttpCode, + ExpectedStatusCode: types.RepresentationNotSupportedHttpCode, }, ), @@ -64,9 +63,8 @@ var _ = DescribeTable("Negative: Get DIDDoc with transformKey query parameter", "cannot get DIDDoc with not supported transformKey query parameter", utils.NegativeTestCase{ DidURL: fmt.Sprintf( - "http://localhost:8080/1.0/identifiers/%s?transformKey=%s", + "http://localhost:8080/1.0/identifiers/%s?transformKey=EDDSA", didWithEd25519VerificationKey2018Key, - testconstants.NotSupportedTransformKeyType, ), ResolutionType: testconstants.DefaultResolutionType, ExpectedResult: utils.DereferencingResult{ diff --git a/types/supported_queries.go b/types/supported_queries.go index 00ef8562..713b3e8a 100644 --- a/types/supported_queries.go +++ b/types/supported_queries.go @@ -58,23 +58,20 @@ var ResourceSupportedQueries = SupportedQueriesT{ var AllSupportedQueries = DidSupportedQueries.Plus(ResourceSupportedQueries) -var NotSupportedQueriesWithTransformKey = []string{ +var SupportedQueriesWithTransformKey = []string{ + VersionId, + VersionTime, ServiceQ, RelativeRef, - Metadata, - ResourceId, - ResourceCollectionId, - ResourceName, - ResourceMetadata, - ResourceType, - ResourceVersion, - ResourceVersionTime, - ResourceChecksum, } func IsSupportedWithCombinationTransformKeyQuery(values url.Values) bool { for query := range values { - if utils.Contains(NotSupportedQueriesWithTransformKey, query) { + if query == TransformKey { + continue + } + + if !utils.Contains(SupportedQueriesWithTransformKey, query) { return false } }