mirror of
https://github.com/mosip/inji-wallet.git
synced 2026-01-09 13:38:01 -05:00
[INJIMOB-2799]: add support for sending wallet metadata to verifier (#1875)
* [INJIMOB-2799]: add support for sending wallet metadata to verifier Signed-off-by: Alka Prasad <prasadalka1998@gmail.com> * [INJIMOB-3157]: [iOS]add support to send wallet metadata to verifier Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: [iOS] pass client id schemes only if it is present and not empty Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-2491]: should read walletMetadata from config if present else from the local Signed-off-by: Alka Prasad <prasadalka1998@gmail.com> * [INJIMOB-3157]:[iOS]update validations on wallet metadata Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: update openid4vp swift package Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: fix native module issue Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: refactor wallet metadata to pass optional values Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: refactor wallet metadata to pass optional values Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> * [INJIMOB-3157]: update openid4vp swift package Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> --------- Signed-off-by: Alka Prasad <prasadalka1998@gmail.com> Signed-off-by: adityankannan-tw <adityan.kannan@thoughtworks.com> Co-authored-by: adityankannan-tw <adityan.kannan@thoughtworks.com>
This commit is contained in:
@@ -24,10 +24,14 @@ import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
|
||||
import io.mosip.openID4VP.OpenID4VP;
|
||||
import io.mosip.openID4VP.authorizationRequest.AuthorizationRequest;
|
||||
import io.mosip.openID4VP.authorizationRequest.VPFormatSupported;
|
||||
import io.mosip.openID4VP.authorizationRequest.WalletMetadata;
|
||||
import io.mosip.openID4VP.authorizationResponse.models.unsignedVPToken.UnsignedVPToken;
|
||||
import io.mosip.openID4VP.constants.ClientIdScheme;
|
||||
import io.mosip.openID4VP.constants.FormatType;
|
||||
import io.mosip.openID4VP.dto.Verifier;
|
||||
import io.mosip.openID4VP.dto.vpResponseMetadata.VPResponseMetadata;
|
||||
@@ -59,11 +63,11 @@ public class InjiOpenID4VPModule extends ReactContextBaseJavaModule {
|
||||
|
||||
@ReactMethod
|
||||
public void authenticateVerifier(String urlEncodedAuthorizationRequest, ReadableArray trustedVerifiers,
|
||||
Boolean shouldValidateClient,
|
||||
Promise promise) {
|
||||
ReadableMap walletMetadata, Boolean shouldValidateClient, Promise promise) {
|
||||
try {
|
||||
WalletMetadata walletMetadataObj = getWalletMetadataFromReadableMap(walletMetadata);
|
||||
AuthorizationRequest authenticationResponse = openID4VP.authenticateVerifier(urlEncodedAuthorizationRequest,
|
||||
convertReadableArrayToVerifierArray(trustedVerifiers), shouldValidateClient);
|
||||
convertReadableArrayToVerifierArray(trustedVerifiers), walletMetadataObj, shouldValidateClient);
|
||||
String authenticationResponseAsJson = gson.toJson(authenticationResponse, AuthorizationRequest.class);
|
||||
promise.resolve(authenticationResponseAsJson);
|
||||
} catch (Exception exception) {
|
||||
@@ -87,10 +91,10 @@ public class InjiOpenID4VPModule extends ReactContextBaseJavaModule {
|
||||
while (matchingVcsIterator.hasNextKey()) {
|
||||
String credentialFormat = matchingVcsIterator.nextKey();
|
||||
List<String> matchingVcsOfSpecificCredentialFormat = convertReadableArrayToList(Objects.requireNonNull(matchingVcsOfDifferentFormats.getArray(credentialFormat)));
|
||||
if(credentialFormat.equals(FormatType.LDP_VC.getValue()))
|
||||
formattedMatchingVcsOfDifferentFormats.put(FormatType.LDP_VC, matchingVcsOfSpecificCredentialFormat);
|
||||
if (credentialFormat.equals(FormatType.LDP_VC.getValue()))
|
||||
formattedMatchingVcsOfDifferentFormats.put(FormatType.LDP_VC, matchingVcsOfSpecificCredentialFormat);
|
||||
else
|
||||
throw new UnsupportedOperationException("Credential format - "+credentialFormat+" is not supported");
|
||||
throw new UnsupportedOperationException("Credential format - " + credentialFormat + " is not supported");
|
||||
}
|
||||
selectedVCsMap.put(inputDescriptorId, formattedMatchingVcsOfDifferentFormats);
|
||||
}
|
||||
@@ -160,4 +164,45 @@ public class InjiOpenID4VPModule extends ReactContextBaseJavaModule {
|
||||
}
|
||||
return trustedVerifiersList;
|
||||
}
|
||||
|
||||
private WalletMetadata getWalletMetadataFromReadableMap(ReadableMap walletMetadata) {
|
||||
Boolean presentationDefinitionUriSupported = walletMetadata.hasKey("presentation_definition_uri_supported")
|
||||
? walletMetadata.getBoolean("presentation_definition_uri_supported") : null;
|
||||
|
||||
Map<String, VPFormatSupported> vpFormatsSupportedMap = new HashMap<>();
|
||||
ReadableMap vpFormatsMap = walletMetadata.getMap("vp_formats_supported");
|
||||
|
||||
if (vpFormatsMap != null && vpFormatsMap.hasKey("ldp_vc")) {
|
||||
ReadableMap ldpVc = vpFormatsMap.getMap("ldp_vc");
|
||||
if (ldpVc != null && ldpVc.hasKey("alg_values_supported")) {
|
||||
ReadableArray ldpVcAlgArray = ldpVc.getArray("alg_values_supported");
|
||||
List<String> algValuesList = new ArrayList<>(ldpVcAlgArray.size());
|
||||
|
||||
for (int i = 0; i < ldpVcAlgArray.size(); i++) {
|
||||
algValuesList.add(ldpVcAlgArray.getString(i));
|
||||
}
|
||||
|
||||
vpFormatsSupportedMap.put("ldp_vc", new VPFormatSupported(algValuesList));
|
||||
} else {
|
||||
vpFormatsSupportedMap.put("ldp_vc", new VPFormatSupported(null));
|
||||
}
|
||||
}
|
||||
|
||||
return new WalletMetadata(
|
||||
presentationDefinitionUriSupported,
|
||||
vpFormatsSupportedMap,
|
||||
extractStringListOrNull(walletMetadata, "client_id_schemes_supported"),
|
||||
extractStringListOrNull(walletMetadata, "request_object_signing_alg_values_supported"),
|
||||
extractStringListOrNull(walletMetadata, "authorization_encryption_alg_values_supported"),
|
||||
extractStringListOrNull(walletMetadata, "authorization_encryption_enc_values_supported")
|
||||
);
|
||||
}
|
||||
|
||||
private List<String> extractStringListOrNull(ReadableMap readableMap, String key) {
|
||||
return Optional.ofNullable(readableMap.getArray(key))
|
||||
.map(this::convertReadableArrayToList)
|
||||
.filter(list -> !list.isEmpty())
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user