UNPKG

@nevis-security/nevis-mobile-authentication-sdk-react

Version:

React Native plugin for Nevis Mobile Authentication SDK. Supports only mobile.

111 lines (99 loc) 4.08 kB
/** * Copyright © 2024 Nevis Security AG. All rights reserved. */ import uuid from 'react-native-uuid'; import { DeviceInformationCheckResult } from './DeviceInformationCheckResult'; import { DeviceInformationCheckPlatformOperation } from '../../cache/operation/DeviceInformationCheckPlatformOperation'; import { PlatformOperationCache } from '../../cache/PlatformOperationCache'; import NevisMobileAuthenticationSdkReact from '../../MobileAuthenticationSdk'; import { DeviceInformationCheckResultMessage } from '../../model/messages/in/DeviceInformationCheckResultMessage'; import { DeviceInformationCheckMessage } from '../../model/messages/out/DeviceInformationCheckMessage'; import { HttpOperation, HttpOperationImpl } from '../HttpOperation'; /** * The operation retrieving the mismatches that exist between the configuration in the server and in * the mobile device application. * * The configuration mismatches can be fixed by providing them to the {@link DeviceInformationSync} * operation. * * This is supported only with FIDO UAF registrations made against a backend with nevisFIDO 7.2408.** * or later. With registrations made with earlier versions of nevisFIDO, this operation can return * {@link MissingAuthenticatorInServer} false positives, that is, it can report mismatches, when the * credentials of backend and server are in sync. * * Usage example: * ```ts * [...] * async retrieveDeviceInformationMismatches( * operations: Operations * ): Promise<void> { * operations.deviceInformationCheck * .onResult((result) => { * // handle the retrieved mismatches. They can be fixed by * // running a DeviceInformationSync operation. * }) * .execute(); * } * [...] * ``` * * @see * - {@link DeviceInformationCheckResult} * - {@link DeviceInformationSync} * - {@link Operations.deviceInformationCheck} */ export abstract class DeviceInformationCheck extends HttpOperation<DeviceInformationCheck> { /** * Specifies the object that will be invoked with the {@link DeviceInformationCheckResult} * containing the configuration mismatches an errors (if any) that occurred. * * **IMPORTANT** \ * Providing the {@link onResult} callback is required. * * **WARNING** \ * The information returned in `DeviceInformationCheckResult` is only reliable for registrations * done using the Authentication Mobile SDK 3.8.0 or later. If your application has been upgraded * from previous versions of the SDK and thus some users were registered using earlier versions, * some false positive {@link MissingAuthenticatorInServer} mismatches can be returned for those * users. * * @param onResult the callback that will be invoked when the operation finishes. * @return a {@link DeviceInformationCheck} object. */ abstract onResult( onResult: (result: DeviceInformationCheckResult) => void ): DeviceInformationCheck; } export class DeviceInformationCheckImpl extends HttpOperationImpl<DeviceInformationCheck> implements DeviceInformationCheck { private _onResult?: (result: DeviceInformationCheckResult) => void; constructor() { super(); } onResult(onResult: (result: DeviceInformationCheckResult) => void): DeviceInformationCheck { this._onResult = onResult; return this; } async execute(): Promise<void> { const operationId = uuid.v4() as string; const operation = new DeviceInformationCheckPlatformOperation(operationId, this._onResult); PlatformOperationCache.getInstance().put(operation); const message = new DeviceInformationCheckMessage( operationId, this.onResult !== undefined, this.httpRequestHeaders ); function finish() { PlatformOperationCache.getInstance().delete(operationId); } return NevisMobileAuthenticationSdkReact.deviceInformationCheck(message).then( (result: DeviceInformationCheckResultMessage) => { const resultMessage = DeviceInformationCheckResultMessage.fromJson(result); operation.handleResult(resultMessage.result); finish(); } ); } }