Skip to content

Commit

Permalink
refactor: Bug fix on external issuer draft 13, ldp_vc #2443
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Feb 27, 2024
1 parent 89c1b9a commit 3ddf250
Showing 1 changed file with 119 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -39,136 +39,156 @@ class CredentialDetailsCubit extends Cubit<CredentialDetailsState> {
}

Future<void> verifyCredential(CredentialModel item) async {
emit(state.copyWith(status: AppStatus.loading));
await Future<void>.delayed(const Duration(milliseconds: 500));
try {
emit(state.copyWith(status: AppStatus.loading));
await Future<void>.delayed(const Duration(milliseconds: 500));

if (item.credentialPreview.credentialSubjectModel.credentialSubjectType ==
CredentialSubjectType.walletCredential) {
emit(
state.copyWith(
credentialStatus: CredentialStatus.active,
status: AppStatus.idle,
),
);
return;
}
if (!profileCubit.state.model.profileSetting.selfSovereignIdentityOptions
.customOidc4vcProfile.securityLevel) {
emit(
state.copyWith(
credentialStatus: CredentialStatus.notVerified,
status: AppStatus.idle,
),
);
return;
}

if (item.expirationDate != null) {
final DateTime dateTimeExpirationDate =
DateTime.parse(item.expirationDate!);
if (!dateTimeExpirationDate.isAfter(DateTime.now())) {
if (item.credentialPreview.credentialSubjectModel.credentialSubjectType ==
CredentialSubjectType.walletCredential) {
emit(
state.copyWith(
credentialStatus: CredentialStatus.suspended,
credentialStatus: CredentialStatus.active,
status: AppStatus.idle,
),
);
return;
}
}

if (item.jwt != null) {
/// issuer did
final issuerDid = item.issuer;
if (item.expirationDate != null) {
final DateTime dateTimeExpirationDate =
DateTime.parse(item.expirationDate!);
if (!dateTimeExpirationDate.isAfter(DateTime.now())) {
emit(
state.copyWith(
credentialStatus: CredentialStatus.suspended,
status: AppStatus.idle,
),
);
return;
}
}

if (item.jwt != null) {
/// issuer did
final issuerDid = item.issuer;

String? issuerKid;
late final String encodedData;
if (item.jwt == null) {
issuerKid = item.data['proof']['verificationMethod'] as String;
} else {
encodedData = item.jwt!;
String? issuerKid;
late final String encodedData;
if (item.jwt == null) {
issuerKid = item.data['proof']['verificationMethod'] as String;
} else {
encodedData = item.jwt!;

final Map<String, dynamic> header =
decodeHeader(jwtDecode: jwtDecode, token: encodedData);
final Map<String, dynamic> header =
decodeHeader(jwtDecode: jwtDecode, token: encodedData);

if (header.containsKey('kid')) {
issuerKid = header['kid'].toString();
if (header.containsKey('kid')) {
issuerKid = header['kid'].toString();
}
}
}

final VerificationType isVerified = await verifyEncodedData(
issuerDid,
issuerKid,
encodedData,
);
final VerificationType isVerified = await verifyEncodedData(
issuerDid,
issuerKid,
encodedData,
);

late CredentialStatus credentialStatus;
late CredentialStatus credentialStatus;

switch (isVerified) {
case VerificationType.verified:
credentialStatus = CredentialStatus.active;
case VerificationType.notVerified:
credentialStatus = CredentialStatus.notVerified;
case VerificationType.unKnown:
credentialStatus = CredentialStatus.suspended;
}
switch (isVerified) {
case VerificationType.verified:
credentialStatus = CredentialStatus.active;
case VerificationType.notVerified:
credentialStatus = CredentialStatus.notVerified;
case VerificationType.unKnown:
credentialStatus = CredentialStatus.suspended;
}

emit(
state.copyWith(
credentialStatus: credentialStatus,
status: AppStatus.idle,
),
);
} else if (item.isPolygonssuer) {
final mnemonic =
await secureStorageProvider.get(SecureStorageKeys.ssiMnemonic);
await polygonIdCubit.initialise();
emit(
state.copyWith(
credentialStatus: credentialStatus,
status: AppStatus.idle,
),
);
} else if (item.isPolygonssuer) {
final mnemonic =
await secureStorageProvider.get(SecureStorageKeys.ssiMnemonic);
await polygonIdCubit.initialise();

String network = Parameters.POLYGON_MAIN_NETWORK;
String network = Parameters.POLYGON_MAIN_NETWORK;

if (item.issuer.contains('polygon:main')) {
network = Parameters.POLYGON_MAIN_NETWORK;
} else {
network = Parameters.POLYGON_TEST_NETWORK;
}
if (item.issuer.contains('polygon:main')) {
network = Parameters.POLYGON_MAIN_NETWORK;
} else {
network = Parameters.POLYGON_TEST_NETWORK;
}

final List<ClaimEntity> claim =
await polygonIdCubit.polygonId.getClaimById(
claimId: item.id,
mnemonic: mnemonic!,
network: network,
);
final List<ClaimEntity> claim =
await polygonIdCubit.polygonId.getClaimById(
claimId: item.id,
mnemonic: mnemonic!,
network: network,
);

late CredentialStatus credentialStatus;
late CredentialStatus credentialStatus;

if (claim.isEmpty) {
credentialStatus = CredentialStatus.suspended;
if (claim.isEmpty) {
credentialStatus = CredentialStatus.suspended;
} else {
switch (claim[0].state) {
case ClaimState.active:
credentialStatus = CredentialStatus.active;
case ClaimState.expired:
credentialStatus = CredentialStatus.expired;
case ClaimState.pending:
credentialStatus = CredentialStatus.pending;
case ClaimState.revoked:
credentialStatus = CredentialStatus.revoked;
}
}

emit(
state.copyWith(
credentialStatus: credentialStatus,
status: AppStatus.idle,
),
);
} else {
switch (claim[0].state) {
case ClaimState.active:
credentialStatus = CredentialStatus.active;
case ClaimState.expired:
credentialStatus = CredentialStatus.expired;
case ClaimState.pending:
credentialStatus = CredentialStatus.pending;
case ClaimState.revoked:
credentialStatus = CredentialStatus.revoked;
if (item.credentialPreview.credentialStatus.type != '') {
final CredentialStatus credentialStatus =
await item.checkRevocationStatus();
if (credentialStatus == CredentialStatus.active) {
await verifyProofOfPurpose(item);
} else {
emit(
state.copyWith(
credentialStatus: CredentialStatus.suspended,
status: AppStatus.idle,
),
);
}
} else {
await verifyProofOfPurpose(item);
}
}

} catch (e) {
emit(
state.copyWith(
credentialStatus: credentialStatus,
credentialStatus: CredentialStatus.notVerified,
status: AppStatus.idle,
),
);
} else {
if (item.credentialPreview.credentialStatus.type != '') {
final CredentialStatus credentialStatus =
await item.checkRevocationStatus();
if (credentialStatus == CredentialStatus.active) {
await verifyProofOfPurpose(item);
} else {
emit(
state.copyWith(
credentialStatus: CredentialStatus.suspended,
status: AppStatus.idle,
),
);
}
} else {
await verifyProofOfPurpose(item);
}
}
}

Expand Down

0 comments on commit 3ddf250

Please sign in to comment.