[INJIMOB-2160] use pixelpass for processing mmdoc data for rendering (#1660)

* [INJIMOB-2160] use pixelpass for processing mmdoc data for rendering

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] fix history not showing properly post download

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] add processing VC logic for iOS

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] modify selectCredential in VCItemSelectors to return selectCredential

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - remove debug logs

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - mark prop credentialWrapper as mandatory

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - optimize imports

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - remove unused functions / code block

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - format code

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] modify pixelpass module to get toJSON api from pixelpass class

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor - optimize imports

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] show keytype for mso_mdoc format VCs

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] use id in mso_mdoc VC as unique VC ID

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] refactor getDisplayId method

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] update ci-client & pixelpass version

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] add runtime asset to gitignore

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] remove unused var

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

* [INJIMOB-2160] bypass verification for mock VCs

This is done since mock VCs are not verifiable as of now.

Co-Authored by: BalachandarG <balachandar.g@thoughtworks.com>
Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>

---------

Signed-off-by: KiruthikaJeyashankar <kiruthikavjshankar@gmail.com>
This commit is contained in:
KiruthikaJeyashankar
2024-11-06 18:55:27 +05:30
committed by GitHub
parent 1207ae81ec
commit a6ed9031f5
27 changed files with 338 additions and 153 deletions

View File

@@ -5,8 +5,8 @@ import {
selectGeneratedOn,
selectKebabPopUp,
selectWalletBindingResponse,
selectCredential,
selectVerifiableCredentialData,
selectCredential,
} from '../../machines/VerifiableCredential/VCItemMachine/VCItemSelectors';
import {useInterpret, useSelector} from '@xstate/react';
import {VCItemProps} from './Views/VCCardView';

View File

@@ -14,6 +14,7 @@ import {CARD_VIEW_DEFAULT_FIELDS, isVCLoaded} from '../common/VCUtils';
import {VCItemMachine} from '../../../machines/VerifiableCredential/VCItemMachine/VCItemMachine';
import {useTranslation} from 'react-i18next';
import {Copilot} from '../../ui/Copilot';
import {VCProcessor} from '../common/VCProcessor';
export const VCCardView: React.FC<VCItemProps> = props => {
const controller = useVcItemController(props);
@@ -30,10 +31,23 @@ export const VCCardView: React.FC<VCItemProps> = props => {
controller.UPDATE_VC_METADATA(props.vcMetadata);
}, [props.vcMetadata]);
const vc = props.isDownloading ? null : controller.credential;
const [fields, setFields] = useState([]);
const [wellknown, setWellknown] = useState(null);
const [vc, setVc] = useState(null);
useEffect(() => {
async function loadVc() {
if (!props.isDownloading) {
const processedData = await VCProcessor.processForRendering(
controller.credential,
controller.verifiableCredentialData.format,
);
setVc(processedData);
}
}
loadVc();
}, [props.isDownloading, controller.credential]);
useEffect(() => {
const {

View File

@@ -3,6 +3,7 @@ import {useTranslation} from 'react-i18next';
import {Image, ImageBackground, View} from 'react-native';
import {
Credential,
CredentialWrapper,
VerifiableCredential,
VerifiableCredentialData,
WalletBindingResponse,
@@ -40,7 +41,7 @@ const getProfileImage = (face: any) => {
};
export const VCDetailView: React.FC<VCItemDetailsProps> = props => {
const {t, i18n} = useTranslation('VcDetails');
const {t} = useTranslation('VcDetails');
const logo = props.verifiableCredentialData.issuerLogo;
const face = props.verifiableCredentialData.face;
const verifiableCredential = props.credential;
@@ -94,7 +95,9 @@ export const VCDetailView: React.FC<VCItemDetailsProps> = props => {
<Column crossAlign="center">
{getProfileImage(face)}
<QrCodeOverlay
verifiableCredential={verifiableCredential}
verifiableCredential={
props.credentialWrapper as unknown as VerifiableCredential
}
meta={props.verifiableCredentialData.vcMetadata}
/>
<Column
@@ -123,35 +126,34 @@ export const VCDetailView: React.FC<VCItemDetailsProps> = props => {
)}
</Column>
</Row>
{shouldShowHrLine(verifiableCredential) && (
<>
<View
style={[
Theme.Styles.hrLine,
{
borderBottomColor: getTextColor(
props.wellknown,
Theme.Styles.hrLine.borderBottomColor,
),
},
]}></View>
<Column padding="0 14 14 14">
{fieldItemIterator(
<>
<View
style={[
Theme.Styles.hrLine,
{
borderBottomColor: getTextColor(
props.wellknown,
Theme.Styles.hrLine.borderBottomColor,
),
},
]}></View>
<Column padding="0 14 14 14">
{shouldShowHrLine(verifiableCredential) &&
fieldItemIterator(
DETAIL_VIEW_BOTTOM_SECTION_FIELDS,
verifiableCredential,
props.wellknown,
props,
)}
<VCItemField
key={'keyTypeVcDetailView'}
fieldName={KEY_TYPE_FIELD}
fieldValue={props.keyType}
verifiableCredential={verifiableCredential}
testID={'keyTypeVcDetailView'}
/>
</Column>
</>
)}
<VCItemField
key={'keyTypeVcDetailView'}
fieldName={KEY_TYPE_FIELD}
fieldValue={props.keyType}
verifiableCredential={verifiableCredential}
testID={'keyTypeVcDetailView'}
/>
</Column>
</>
</ImageBackground>
</Column>
</Column>
@@ -246,6 +248,7 @@ export interface VCItemDetailsProps {
credential: VerifiableCredential | Credential;
verifiableCredentialData: VerifiableCredentialData;
walletBindingResponse?: WalletBindingResponse;
credentialWrapper: CredentialWrapper;
onBinding?: () => void;
activeTab?: Number;
vcHasImage: boolean;

View File

@@ -0,0 +1,26 @@
import {NativeModules} from 'react-native';
import {VerifiableCredential} from '../../../machines/VerifiableCredential/VCMetaMachine/vc';
import {VCFormat} from '../../../shared/VCFormat';
import {getVerifiableCredential} from '../../../machines/VerifiableCredential/VCItemMachine/VCItemSelectors';
import {parseJSON} from '../../../shared/Utils';
const {RNPixelpassModule} = NativeModules;
export class VCProcessor {
static async processForRendering(
vcData: VerifiableCredential,
vcFormat: String,
): Promise<any> {
if (vcFormat === VCFormat.mso_mdoc) {
if (vcData.processedCredential) {
return vcData.processedCredential;
}
const decodedString =
await RNPixelpassModule.decodeBase64UrlEncodedCBORData(
vcData.credential.toString(),
);
return parseJSON(decodedString);
}
return getVerifiableCredential(vcData);
}
}

View File

@@ -232,7 +232,7 @@ export const fieldItemIterator = (
};
export const isVCLoaded = (
verifiableCredential: Credential,
verifiableCredential: Credential | null,
fields: string[],
) => {
return verifiableCredential != null && fields.length > 0;
@@ -258,7 +258,11 @@ export const getIdType = (
wellknown: CredentialTypes | IssuerWellknownResponse,
credentialConfigurationId: string | undefined = undefined,
): string => {
if (wellknown && wellknown?.display) {
if (
wellknown &&
wellknown['credential_configurations_supported'] === undefined &&
wellknown?.display
) {
const idTypeObj = wellknown.display.map((displayProps: any) => {
return {language: displayProps.locale, value: displayProps.name};
});
@@ -266,7 +270,6 @@ export const getIdType = (
} else if (wellknown && Object.keys(wellknown).length > 0) {
let supportedCredentialsWellknown;
wellknown = parseJSON(wellknown) as unknown as Object[];
if (!!!wellknown['credential_configurations_supported']) {
return i18n.t('VcDetails:nationalCard');
}