diff --git a/lib/app/shared/enum/type/oidc4vc_type.dart b/lib/app/shared/enum/type/oidc4vc_type.dart index 8e507e514..f53072cb7 100644 --- a/lib/app/shared/enum/type/oidc4vc_type.dart +++ b/lib/app/shared/enum/type/oidc4vc_type.dart @@ -106,7 +106,7 @@ enum OIDC4VCType { 'RS256' ], subjectSyntaxTypesSupported: ['did:key', 'did:pkh'], - schemaForType: true, + schemaForType: false, publicJWKNeeded: true, serviceDocumentation: '''WORK IN PROGRESS EON project. last release of the specs.\n''' diff --git a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart index 5c51d48dc..813289df0 100644 --- a/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart +++ b/lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart @@ -236,8 +236,8 @@ class QRCodeScanCubit extends Cubit { return; } - if (state.uri.toString().startsWith('openid-vc://') || - uri.toString().startsWith('openid-hedera://')) { + if (state.uri.toString().startsWith('openid-vc://?') || + uri.toString().startsWith('openid-hedera://?')) { if (responseType == 'id_token') { /// verifier side (siopv2) with request uri as value await launchSiopV2WithRequestUriAsValueFlow(); @@ -307,9 +307,9 @@ class QRCodeScanCubit extends Cubit { // ), // ), // ); - } else if (state.uri.toString().startsWith('openid://') || - state.uri.toString().startsWith('openid-vc://') || - state.uri.toString().startsWith('openid-hedera://')) { + } else if (state.uri.toString().startsWith('openid://?') || + state.uri.toString().startsWith('openid-vc://?') || + state.uri.toString().startsWith('openid-hedera://?')) { /// verifier side (siopv2 oidc4vc) with request_uri await launchOIDC4VPAndSiopV2RequestAsURIFlow(); @@ -371,13 +371,13 @@ class QRCodeScanCubit extends Cubit { } /// verifier side (OIDC4VP And siopv2) with request_uri - if (state.uri.toString().startsWith('openid://')) { + if (state.uri.toString().startsWith('openid://?')) { await launchOIDC4VPAndSiopV2WithRequestUriFlow(state.uri); return; } /// verifier side (siopv2) with request_uri - if (state.uri.toString().startsWith('openid-vc://')) { + if (state.uri.toString().startsWith('openid-vc://?')) { await launchSiopV2WithRequestUriFlow(); return; } diff --git a/lib/scan/cubit/scan_cubit.dart b/lib/scan/cubit/scan_cubit.dart index eec4c8881..62e82d44a 100644 --- a/lib/scan/cubit/scan_cubit.dart +++ b/lib/scan/cubit/scan_cubit.dart @@ -75,8 +75,8 @@ class ScanCubit extends Cubit { return; } - if (uri.toString().startsWith('openid-vc://') || - uri.toString().startsWith('openid-hedera://')) { + if (uri.toString().startsWith('openid-vc://?') || + uri.toString().startsWith('openid-hedera://?')) { if (responseType == 'id_token') { /// verifier side (siopv2) with request uri as value throw Exception(); diff --git a/packages/credential_manifest/lib/src/helpers/get_credential_manifest.dart b/packages/credential_manifest/lib/src/helpers/get_credential_manifest.dart index 93dae581a..26064c5a7 100644 --- a/packages/credential_manifest/lib/src/helpers/get_credential_manifest.dart +++ b/packages/credential_manifest/lib/src/helpers/get_credential_manifest.dart @@ -14,41 +14,48 @@ Future getCredentialManifest( final dynamic wellKnown = await client.get( '$baseUrl/.well-known/openid-configuration', ); - final JsonPath credentialManifestPath = JsonPath( - r'$..credential_manifests[?(@.id)]', - ); - - /// select first credential manifest - final credentialManifestMap = credentialManifestPath - .read(jsonDecode(wellKnown.data as String)) - .first - .value as Map; - /// create credentialManisfest object - final credentialManifest = CredentialManifest.fromJson( - credentialManifestMap, - ); + if (schemaForType) { + final JsonPath credentialManifestPath = + JsonPath(r'$..credential_manifests'); - final String key = schemaForType ? 'schema' : 'id'; + final credentialManifestsMap = credentialManifestPath + .read(jsonDecode(wellKnown.data as String)) + .first + .value as List; - /// select wanted output desciptor - final JsonPath outputDescriptorPath = JsonPath( - // ignore: prefer_interpolation_to_compose_strings - r'$..output_descriptors[?(@.' + key + '=="' + credentialTypeOrId + '")]', - ); + for (final map in credentialManifestsMap) { + final credentialManifest = CredentialManifest.fromJson( + map as Map, + ); + if (credentialManifest.outputDescriptors != null) { + for (final outputDescriptor + in credentialManifest.outputDescriptors!) { + if (outputDescriptor.schema == credentialTypeOrId) { + return credentialManifest; + } + } + } + } - /// There are some possible issues with this way of filtering :-/ - final outputDescriptorList = - outputDescriptorPath.read(jsonDecode(wellKnown.data as String)); - if (outputDescriptorList.isNotEmpty) { - final Map outputDescriptorMap = - outputDescriptorList.first.value as Map; - final OutputDescriptor outputDescriptor = - OutputDescriptor.fromJson(outputDescriptorMap); - final CredentialManifest sanitizedCredentialManifest = - credentialManifest.copyWith(outputDescriptors: [outputDescriptor]); - return sanitizedCredentialManifest; + return null; } else { + final JsonPath credentialManifestPath = JsonPath( + // ignore: prefer_interpolation_to_compose_strings + r'$..credential_manifests[?(@.id=="' + credentialTypeOrId + '")]', + ); + + /// select first credential manifest + final credentialManifestMap = credentialManifestPath + .read(jsonDecode(wellKnown.data as String)) + .first + .value as Map; + + /// create credentialManisfest object + final credentialManifest = CredentialManifest.fromJson( + credentialManifestMap, + ); + return credentialManifest; } } catch (e) {