From 905e106ecf833cf4df29ec1af176cf963287f49d Mon Sep 17 00:00:00 2001 From: Boris Volkov Date: Fri, 27 Oct 2023 13:18:36 +0300 Subject: [PATCH] Update captcha --- .../src/pages/Login/Login.tsx | 14 +++- .../src/services/IdentityService.ts | 68 ++++++++++--------- .../src/services/configService.ts | 1 + .../provider-cloud-ui/src/utils/geeTest.ts | 11 ++- 4 files changed, 59 insertions(+), 35 deletions(-) diff --git a/packages/provider-cloud-ui/src/pages/Login/Login.tsx b/packages/provider-cloud-ui/src/pages/Login/Login.tsx index 98ac47f..81e8c86 100644 --- a/packages/provider-cloud-ui/src/pages/Login/Login.tsx +++ b/packages/provider-cloud-ui/src/pages/Login/Login.tsx @@ -3,12 +3,13 @@ import { Flex, Icon, IconButton, + Text, iconClose, iconExpandAccordion, - Text, } from '@waves.exchange/react-uikit'; import React, { FC, useCallback, useEffect, useRef, useState } from 'react'; import { IUser } from '../../interface'; +/* eslint-disable sort-imports */ import { ForgotPassword } from '../../components/Auth/ForgotPassword'; import { SignInForm } from '../../components/Auth/SignInForm'; import { CodeConfirmation } from '../../components/Auth/CodeConfirmation'; @@ -41,6 +42,7 @@ type LoginProps = { const day = 1000 * 60 * 60 * 24; +// eslint-disable-next-line complexity export const Login: FC = ({ identity, onConfirm, @@ -104,7 +106,10 @@ export const Login: FC = ({ const signIn = useCallback( async (username: string, password: string): Promise => { try { - const geeTest = await getGeeTestToken(identity.geetestUrl); + const geeTest = await getGeeTestToken( + identity.geetestUrl, + identity.isUseCaptcha + ); const cognitoUser = await identity.signIn( username, @@ -147,7 +152,10 @@ export const Login: FC = ({ const signUp = useCallback( async (username: string, password: string): Promise => { - const geeTest = await getGeeTestToken(identity.geetestUrl); + const geeTest = await getGeeTestToken( + identity.geetestUrl, + identity.isUseCaptcha + ); const result = await identity.signUp(username, password, geeTest); userData.current = { diff --git a/packages/provider-cloud-ui/src/services/IdentityService.ts b/packages/provider-cloud-ui/src/services/IdentityService.ts index 49c7cfb..ce4ea3c 100644 --- a/packages/provider-cloud-ui/src/services/IdentityService.ts +++ b/packages/provider-cloud-ui/src/services/IdentityService.ts @@ -1,14 +1,17 @@ -import { seedUtils, libs } from '@waves/waves-transactions'; +import { libs, seedUtils } from '@waves/waves-transactions'; + +// eslint-disable-next-line sort-imports import { AuthenticationDetails, - CognitoIdToken, CodeDeliveryDetails, - ISignUpResult, + CognitoIdToken, CognitoUser, - CognitoUserPool, CognitoUserAttribute, + CognitoUserPool, ICognitoStorage, + ISignUpResult, } from 'amazon-cognito-identity-js'; + import { MemoryStorage } from './MemoryStorage'; type IdentityUser = { @@ -39,10 +42,16 @@ type IdentityServiceOptions = { clientId: string; endpoint: string; geetestUrl: string; + disableCaptcha?: boolean; +}; + +const USER = { + CHALLENGE: { NAME: 'challengeName', PARAM: 'challengeParam' }, }; export class IdentityService { public geetestUrl = ''; + public isUseCaptcha = false; private readonly storage: ICognitoStorage = new MemoryStorage(); private userPool: CognitoUserPool | undefined = undefined; private currentUser: CognitoUser | undefined = undefined; @@ -57,9 +66,13 @@ export class IdentityService { userPoolId, endpoint, geetestUrl, + disableCaptcha, }: IdentityServiceOptions): void { this.apiUrl = apiUrl; + this.isUseCaptcha = + disableCaptcha == null ? this.isUseCaptcha : disableCaptcha; + this.userPool = new CognitoUserPool({ UserPoolId: userPoolId, ClientId: clientId, @@ -208,12 +221,10 @@ export class IdentityService { }), { onSuccess: async () => { - const identityUser = await this.fetchIdentityUser(); + this.identityUser = await this.fetchIdentityUser(); - this.identityUser = identityUser; - - delete user['challengeName']; - delete user['challengeParam']; + delete user[USER.CHALLENGE.NAME]; + delete user[USER.CHALLENGE.PARAM]; resolve(user); }, @@ -221,39 +232,39 @@ export class IdentityService { reject(err); }, customChallenge: function (challengeParam) { - user['challengeName'] = 'CUSTOM_CHALLENGE'; - user['challengeParam'] = challengeParam; + user[USER.CHALLENGE.NAME] = 'CUSTOM_CHALLENGE'; + user[USER.CHALLENGE.PARAM] = challengeParam; resolve(user); }, mfaRequired: function (challengeName, challengeParam) { - user['challengeName'] = challengeName; - user['challengeParam'] = challengeParam; + user[USER.CHALLENGE.NAME] = challengeName; + user[USER.CHALLENGE.PARAM] = challengeParam; resolve(user); }, mfaSetup: function (challengeName, challengeParam) { - user['challengeName'] = challengeName; - user['challengeParam'] = challengeParam; + user[USER.CHALLENGE.NAME] = challengeName; + user[USER.CHALLENGE.PARAM] = challengeParam; resolve(user); }, newPasswordRequired: function ( userAttributes, requiredAttributes ) { - user['challengeName'] = 'NEW_PASSWORD_REQUIRED'; - user['challengeParam'] = { + user[USER.CHALLENGE.NAME] = 'NEW_PASSWORD_REQUIRED'; + user[USER.CHALLENGE.PARAM] = { userAttributes: userAttributes, requiredAttributes: requiredAttributes, }; resolve(user); }, totpRequired: function (challengeName, challengeParam) { - user['challengeName'] = challengeName; - user['challengeParam'] = challengeParam; + user[USER.CHALLENGE.NAME] = challengeName; + user[USER.CHALLENGE.PARAM] = challengeParam; resolve(user); }, selectMFAType: function (challengeName, challengeParam) { - user['challengeName'] = challengeName; - user['challengeParam'] = challengeParam; + user[USER.CHALLENGE.NAME] = challengeName; + user[USER.CHALLENGE.PARAM] = challengeParam; resolve(user); }, } @@ -272,15 +283,12 @@ export class IdentityService { { onSuccess: async (session) => { if (this.currentUser) { - delete this.currentUser['challengeName']; - delete this.currentUser['challengeParam']; + delete this.currentUser[USER.CHALLENGE.NAME]; + delete this.currentUser[USER.CHALLENGE.PARAM]; } if (session && !this.identityUser) { - const identityUser = await this.fetchIdentityUser(); - - this.identityUser = identityUser; - + this.identityUser = await this.fetchIdentityUser(); resolve(); } }, @@ -436,9 +444,8 @@ export class IdentityService { Authorization: `Bearer ${token}`, }, }); - const identityUser: IdentityUser = await itentityUserResponse.json(); - return identityUser; + return (await itentityUserResponse.json()) as IdentityUser; } private async signByIdentity( @@ -454,9 +461,8 @@ export class IdentityService { }, body: JSON.stringify(body), }); - const result: IdentitySignTxResponse = await response.json(); - return result; + return (await response.json()) as IdentitySignTxResponse; } } diff --git a/packages/provider-cloud-ui/src/services/configService.ts b/packages/provider-cloud-ui/src/services/configService.ts index 65480c0..181a6d4 100644 --- a/packages/provider-cloud-ui/src/services/configService.ts +++ b/packages/provider-cloud-ui/src/services/configService.ts @@ -5,6 +5,7 @@ export type Config = { clientId: string; userPoolId: string; endpoint: string; + disableCaptcha?: string; }; geetest: { url: string; diff --git a/packages/provider-cloud-ui/src/utils/geeTest.ts b/packages/provider-cloud-ui/src/utils/geeTest.ts index 67c4dc7..41fcb6c 100644 --- a/packages/provider-cloud-ui/src/utils/geeTest.ts +++ b/packages/provider-cloud-ui/src/utils/geeTest.ts @@ -1,12 +1,21 @@ const w = window as any; export const getGeeTestToken = ( - geetestUrl: string + geetestUrl: string, + useCaptcha = true ): Promise<{ geetest_challenge: string; geetest_seccode: string; geetest_validate: string; }> => { + if (!useCaptcha) { + return Promise.resolve({ + geetest_challenge: '', + geetest_seccode: '', + geetest_validate: '', + }); + } + // eslint-disable-next-line no-async-promise-executor return new Promise(async (res, rej) => { try {