Files
inji-wallet/screens/QrLogin/QrLogin.tsx
adityankannan-tw 339e08c462 [INJIMOB-1433,528] - Add passive liveness detection with blink detection (#1474)
* [INJIMOB-528] add liveness support for face verification

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-528] add and comment blink detection

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-528] update locales and remove blink detection

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] add blinking and increase threshold if blinking is detected

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] sync package lock json

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] update node version to 18 for android build

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] refactor

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] refactor components

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] use the default version of package resolved file

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] refactor and add new env for liveness in workflow

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] remove new env and unused code

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-1433] add new env for liveness and combine build descriptiona and build name

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

* [INJIMOB-528] update package lock & pbxproj files

Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>

* [INJIMOB-1433] add test id for elements

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>

---------

Signed-off-by: adityankannan-tw <adityan410pm@gmail.com>
Signed-off-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>
Co-authored-by: adityankannan-tw <adityan410pm@gmail.com>
Co-authored-by: KiruthikaJeyashankar <81218987+KiruthikaJeyashankar@users.noreply.github.com>
2024-06-04 13:59:02 +05:30

93 lines
3.0 KiB
TypeScript

import React from 'react';
import {Column} from '../../components/ui';
import {useTranslation} from 'react-i18next';
import {useQrLogin} from './QrLoginController';
import {VerifyIdentityOverlay} from '../VerifyIdentityOverlay';
import {MessageOverlay} from '../../components/MessageOverlay';
import {MyBindedVcs} from './MyBindedVcs';
import {QrLoginSuccess} from './QrLoginSuccessMessage';
import {QrConsent} from './QrConsent';
import {QrLoginRef} from '../../machines/QrLogin/QrLoginMachine';
import {Icon} from 'react-native-elements';
import {View} from 'react-native';
import {FaceVerificationAlertOverlay} from '../Scan/FaceVerificationAlertOverlay';
import {SvgImage} from '../../components/ui/svg';
import { LIVENESS_CHECK } from '../../shared/constants';
export const QrLogin: React.FC<QrLoginProps> = props => {
const controller = useQrLogin(props);
const {t} = useTranslation('QrLogin');
return (
<View
isVisible={props.isVisible}
onDismiss={controller.DISMISS}
headerTitle={t('title')}
headerRight={<Icon name={''} />}>
<Column fill>
<MyBindedVcs
isVisible={controller.isShowingVcList}
service={props.service}
/>
<MessageOverlay
isVisible={
controller.isWaitingForData ||
controller.isLoadingMyVcs ||
controller.isLinkTransaction ||
controller.isSendingConsent ||
controller.isSendingAuthenticate
}
title={t('loading')}
progress
/>
<MessageOverlay
isVisible={controller.isShowingError}
title={controller.error}
onButtonPress={controller.DISMISS}
testID="qrLoginError"
/>
<VerifyIdentityOverlay
credential={controller.selectCredential}
verifiableCredentialData={controller.verifiableCredentialData}
isVerifyingIdentity={controller.isVerifyingIdentity}
onCancel={controller.CANCEL}
onFaceValid={controller.FACE_VALID}
onFaceInvalid={controller.FACE_INVALID}
isInvalidIdentity={controller.isInvalidIdentity}
onNavigateHome={controller.GO_TO_HOME}
onRetryVerification={controller.RETRY_VERIFICATION}
isLivenessEnabled={LIVENESS_CHECK}
/>
<FaceVerificationAlertOverlay
isQrLogin={true}
isVisible={controller.isFaceVerificationConsent}
onConfirm={controller.FACE_VERIFICATION_CONSENT}
close={controller.DISMISS}
/>
<QrConsent
isVisible={controller.isRequestConsent}
onConfirm={controller.CONFIRM}
onCancel={controller.DISMISS}
service={props.service}
/>
<QrLoginSuccess
isVisible={controller.isVerifyingSuccesful}
onPress={controller.CONFIRM}
service={props.service}
/>
</Column>
</View>
);
};
export interface QrLoginProps {
isVisible: boolean;
service: QrLoginRef;
}