Skip to content

Commit 0a8df58

Browse files
committed
better revoked credential handling
1 parent 4996759 commit 0a8df58

1 file changed

Lines changed: 49 additions & 1 deletion

File tree

java/demo/src/main/java/org/keychain/demo/ui/MainView.java

Lines changed: 49 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -779,6 +779,11 @@ private Div heldSelector() {
779779
String value = event.getValue();
780780
if (value != null && !value.isBlank()) {
781781
selectedHeldDid = value;
782+
heldArea.clear();
783+
updateHeldSelectionState();
784+
} else {
785+
selectedHeldDid = null;
786+
heldArea.clear();
782787
updateHeldSelectionState();
783788
}
784789
});
@@ -2054,6 +2059,7 @@ private void updateIssued() {
20542059
return;
20552060
}
20562061
issuedOriginal = json;
2062+
resetHeldSelection();
20572063
showSuccess("Credential updated");
20582064
} catch (Exception e) {
20592065
showError(e.getMessage());
@@ -2073,6 +2079,7 @@ private void revokeIssued() {
20732079
return;
20742080
}
20752081
refreshIssued();
2082+
resetHeldSelection();
20762083
showSuccess("Credential revoked");
20772084
} catch (Exception e) {
20782085
showError(e.getMessage());
@@ -2358,6 +2365,13 @@ private void updateIssuedSelectionState() {
23582365
setButtonsEnabledOnValue(selected, issuedCopyButton);
23592366
}
23602367

2368+
private void resetHeldSelection() {
2369+
heldSelect.clear();
2370+
selectedHeldDid = null;
2371+
heldArea.clear();
2372+
updateHeldSelectionState();
2373+
}
2374+
23612375
private void setButtonsEnabledOnValue(String value, Button... buttons) {
23622376
boolean enabled = value != null && !value.isBlank();
23632377
for (Button button : buttons) {
@@ -3018,17 +3032,29 @@ private void updateHeldSelectionState() {
30183032
boolean hasSelection = did != null && !did.isBlank();
30193033

30203034
heldResolveSelectedButton.setEnabled(hasSelection);
3021-
heldDecryptSelectedButton.setEnabled(hasSelection);
30223035
heldCopyButton.setEnabled(hasSelection);
30233036

30243037
if (!hasSelection) {
3038+
heldDecryptSelectedButton.setEnabled(false);
30253039
heldRemoveButton.setEnabled(false);
30263040
heldPublishButton.setEnabled(false);
30273041
heldRevealButton.setEnabled(false);
30283042
heldUnpublishButton.setEnabled(false);
30293043
return;
30303044
}
30313045

3046+
boolean deactivatedEmpty = isDeactivatedEmptyCredential(did);
3047+
if (deactivatedEmpty) {
3048+
boolean unpublished = credentialUnpublished(did);
3049+
heldDecryptSelectedButton.setEnabled(false);
3050+
heldPublishButton.setEnabled(false);
3051+
heldRevealButton.setEnabled(false);
3052+
heldRemoveButton.setEnabled(true);
3053+
heldUnpublishButton.setEnabled(!unpublished);
3054+
return;
3055+
}
3056+
3057+
heldDecryptSelectedButton.setEnabled(true);
30323058
boolean unpublished = credentialUnpublished(did);
30333059
boolean published = credentialPublished(did);
30343060
boolean revealed = credentialRevealed(did);
@@ -3070,6 +3096,28 @@ private boolean credentialUnpublished(String did) {
30703096
return !manifest.containsKey(did);
30713097
}
30723098

3099+
private boolean isDeactivatedEmptyCredential(String did) {
3100+
try {
3101+
MdipDocument doc = keymasterService.resolveDID(did);
3102+
if (doc == null || doc.didDocumentMetadata == null) {
3103+
return false;
3104+
}
3105+
if (!Boolean.TRUE.equals(doc.didDocumentMetadata.deactivated)) {
3106+
return false;
3107+
}
3108+
Object data = doc.didDocumentData;
3109+
if (data == null) {
3110+
return true;
3111+
}
3112+
if (data instanceof java.util.Map<?, ?>) {
3113+
return ((java.util.Map<?, ?>) data).isEmpty();
3114+
}
3115+
return false;
3116+
} catch (Exception e) {
3117+
return false;
3118+
}
3119+
}
3120+
30733121
private void updateSchemaCreateState() {
30743122
String name = schemaNameField.getValue();
30753123
schemaCreateButton.setEnabled(name != null && !name.isBlank());

0 commit comments

Comments
 (0)