Skip to content

Commit

Permalink
feat: Support test 5 and test 6
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Aug 15, 2023
1 parent ecff2fd commit 45914ad
Show file tree
Hide file tree
Showing 6 changed files with 318 additions and 124 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ class CredentialManifestOfferPickView extends StatelessWidget {
return;
}

await context.read<ScanCubit>().credentialOffer(
await context.read<ScanCubit>().credentialOfferOrPresent(
uri: uri,
credentialModel: credential,
keyId: SecureStorageKeys.ssiKey,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,14 @@ class _CredentialsReceivePageState extends State<CredentialsReceivePage> {
),
);
} else {
context.read<ScanCubit>().credentialOffer(
uri: widget.uri,
credentialModel: credentialModel,
keyId: SecureStorageKeys.ssiKey,
issuer: widget.issuer,
isFromPresentation: false,
);
context.read<ScanCubit>().credentialOfferOrPresent(
uri: widget.uri,
credentialModel: credentialModel,
keyId: SecureStorageKeys.ssiKey,
issuer: widget.issuer,
isFromPresentation: false,
credentialsToBePresented: [],
);
}
},
),
Expand Down
105 changes: 71 additions & 34 deletions lib/dashboard/qr_code/qr_code_scan/cubit/qr_code_scan_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {

if (!isOID4VCUrl) {
emit(state.acceptHost(isRequestVerified: true));
return;
}

/// SIOPV2 : wallet returns an id_token which is a simple jwt
Expand Down Expand Up @@ -241,38 +242,8 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {
await launchSiopV2WithRequestUriAsValueFlow();
} else if (responseType == 'vp_token') {
/// verifier side (oidc4vp) with request uri as value
final String? presentationDefinitionValue =
uri.queryParameters['presentation_definition'];

if (presentationDefinitionValue == null) {
throw Exception();
}

final json =
jsonDecode(presentationDefinitionValue.replaceAll("'", '"'))
as Map<String, dynamic>;

final PresentationDefinition presentationDefinition =
PresentationDefinition.fromJson(json);

final CredentialManifest credentialManifest = CredentialManifest(
'',
IssuedBy('', ''),
[],
presentationDefinition,
);
final isPresentable = await isVCPresentable(presentationDefinition);
if (!isPresentable) {
emit(
state.copyWith(
qrScanStatus: QrScanStatus.success,
route: MissingCredentialsPage.route(
credentialManifest: credentialManifest,
),
),
);
return;
}
await launchOIDC4VPWithRequestUriAsValueFlow();
return;
} else {
throw Exception();
}
Expand Down Expand Up @@ -581,7 +552,7 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {
return isPresentable;
}
}
return false;
return true;
}

void navigateToOidc4vcCredentialPickPage(List<dynamic> credentials) {
Expand Down Expand Up @@ -629,6 +600,72 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {
}
}

Future<void> launchOIDC4VPWithRequestUriAsValueFlow() async {
if (isUriAsValueValid && keys.contains('presentation_definition')) {
final String presentationDefinitionValue =
state.uri?.queryParameters['presentation_definition'] ?? '';

final json = jsonDecode(presentationDefinitionValue.replaceAll("'", '"'))
as Map<String, dynamic>;

final PresentationDefinition presentationDefinition =
PresentationDefinition.fromJson(json);

final CredentialManifest credentialManifest = CredentialManifest(
'id',
IssuedBy('', ''),
null,
presentationDefinition,
);
final isPresentable = await isVCPresentable(presentationDefinition);
if (!isPresentable) {
emit(
state.copyWith(
qrScanStatus: QrScanStatus.success,
route: MissingCredentialsPage.route(
credentialManifest: credentialManifest,
),
),
);
return;
}

final CredentialModel credentialPreview = CredentialModel(
id: 'id',
image: 'image',
credentialPreview: Credential.dummy(),
shareLink: 'shareLink',
display: Display.emptyDisplay(),
data: const {},
credentialManifest: credentialManifest,
);

emit(
state.copyWith(
qrScanStatus: QrScanStatus.success,
route: CredentialManifestOfferPickPage.route(
uri: state.uri!,
credential: credentialPreview,
issuer: Issuer.emptyIssuer('domain'),
inputDescriptorIndex: 0,
credentialsToBePresented: [],
),
),
);
} else {
emit(
state.error(
message: StateMessage.error(
messageHandler: ResponseMessage(
ResponseString
.RESPONSE_STRING_SOMETHING_WENT_WRONG_TRY_AGAIN_LATER,
),
),
),
);
}
}

Future<void> launchOIDC4VPAndSiopV2RequestAsURIFlow() async {
final requestUri = state.uri!.queryParameters['request_uri'].toString();

Expand Down Expand Up @@ -770,7 +807,7 @@ class QRCodeScanCubit extends Cubit<QRCodeScanState> {
.toList();

final PresentationDefinition presentationDefinition =
PresentationDefinition(inputDescriptorList);
PresentationDefinition(inputDescriptors: inputDescriptorList);
final CredentialModel credentialPreview = CredentialModel(
id: 'id',
image: 'image',
Expand Down
Loading

0 comments on commit 45914ad

Please sign in to comment.