From fa97fe7452a90d413affc98e3f7d8310f7b275e3 Mon Sep 17 00:00:00 2001 From: uzairr Date: Thu, 20 May 2021 13:10:16 +0500 Subject: [PATCH] add mailto info link --- src/_style.scss | 2 +- src/forgot-password/ForgotPasswordPage.jsx | 6 ++--- src/forgot-password/messages.js | 2 +- src/login/LoginFailure.jsx | 26 +++++++++++++--------- src/login/LoginPage.jsx | 7 ++---- src/login/data/service.js | 2 +- src/login/messages.jsx | 5 +++++ src/login/tests/LoginFailure.test.jsx | 4 ++-- src/login/tests/LoginPage.test.jsx | 15 +------------ src/register/RegistrationPage.jsx | 1 + 10 files changed, 31 insertions(+), 39 deletions(-) diff --git a/src/_style.scss b/src/_style.scss index aa09d670..32edf162 100644 --- a/src/_style.scss +++ b/src/_style.scss @@ -514,7 +514,7 @@ select.form-control { } .one-rem-font { - font-size: 1rem; + font-size: 0.99rem; } @media (max-width: 767px) { diff --git a/src/forgot-password/ForgotPasswordPage.jsx b/src/forgot-password/ForgotPasswordPage.jsx index ba3221f6..95a736c4 100644 --- a/src/forgot-password/ForgotPasswordPage.jsx +++ b/src/forgot-password/ForgotPasswordPage.jsx @@ -143,10 +143,8 @@ const ForgotPasswordPage = (props) => { {intl.formatMessage(messages['need.help.sign.in.text'])} -

{intl.formatMessage( - messages['additional.help.text'], - { infoEmail: process.env.INFO_EMAIL }, - )} +

{intl.formatMessage(messages['additional.help.text'])} + {getConfig().INFO_EMAIL}

diff --git a/src/forgot-password/messages.js b/src/forgot-password/messages.js index ea5caf9f..55a44307 100644 --- a/src/forgot-password/messages.js +++ b/src/forgot-password/messages.js @@ -86,7 +86,7 @@ const messages = defineMessages({ }, 'additional.help.text': { id: 'additional.help.text', - defaultMessage: 'For additional help, contact edX support at {infoEmail}', + defaultMessage: 'For additional help, contact edX support at ', description: 'additional help text on forgot password page', }, 'sign.in.text': { diff --git a/src/login/LoginFailure.jsx b/src/login/LoginFailure.jsx index 06cdb1f1..60e48341 100644 --- a/src/login/LoginFailure.jsx +++ b/src/login/LoginFailure.jsx @@ -23,7 +23,7 @@ const LoginFailureMessage = (props) => { const { context, errorCode, value } = props.loginError; let errorList; let link; - const resetLink = ( + let resetLink = ( <> {intl.formatMessage(messages['login.incorrect.credentials.error.reset.link.text'])} @@ -94,18 +94,23 @@ const LoginFailureMessage = (props) => { ); break; case FAILED_LOGIN_ATTEMPT: { + resetLink = ( + <> + + {intl.formatMessage(messages['login.incorrect.credentials.error.before.account.blocked.text'])} + + + ); errorList = ( , - remainingAttempts: {context.remainingAttempts}, - warning: Warning: , - allowedFailureAttempts: {context.allowedFailureAttempts} consecutive, + remainingAttempts: context.remainingAttempts, resetLink, }} /> @@ -117,12 +122,11 @@ const LoginFailureMessage = (props) => { , resetLink, - blockText:

Your account {props.loginError.email} is blocked for 30 minutes due to reaching the maximum {context.allowedFailureAttempts} failed login attempts.

, }} /> ); @@ -169,7 +173,7 @@ const LoginFailureMessage = (props) => { {intl.formatMessage(messages['login.failure.header.title'])} - { errorList } + { errorList } ); }; diff --git a/src/login/LoginPage.jsx b/src/login/LoginPage.jsx index 2925fb1e..42765177 100644 --- a/src/login/LoginPage.jsx +++ b/src/login/LoginPage.jsx @@ -31,7 +31,7 @@ import { getThirdPartyAuthContext } from '../common-components/data/actions'; import { thirdPartyAuthContextSelector } from '../common-components/data/selectors'; import EnterpriseSSO from '../common-components/EnterpriseSSO'; import { - DEFAULT_STATE, ENTERPRISE_LOGIN_URL, PENDING_STATE, RESET_PAGE, VALID_EMAIL_REGEX, + DEFAULT_STATE, ENTERPRISE_LOGIN_URL, PENDING_STATE, RESET_PAGE, } from '../data/constants'; import { getTpaHint, @@ -91,21 +91,18 @@ class LoginPage extends React.Component { } const payload = { - email: emailOrUsername, password, ...this.queryParams, + email_or_username: emailOrUsername, password, ...this.queryParams, }; this.props.loginRequest(payload); } validateEmail(email) { const { errors } = this.state; - const regex = new RegExp(VALID_EMAIL_REGEX, 'i'); if (email === '') { errors.emailOrUsername = this.props.intl.formatMessage(messages['email.validation.message']); } else if (email.length < 3) { errors.emailOrUsername = this.props.intl.formatMessage(messages['email.format.validation.less.chars.message']); - } else if (!regex.test(email)) { - errors.emailOrUsername = this.props.intl.formatMessage(messages['email.format.validation.message']); } else { errors.emailOrUsername = ''; } diff --git a/src/login/data/service.js b/src/login/data/service.js index 24923d3c..72a721f0 100644 --- a/src/login/data/service.js +++ b/src/login/data/service.js @@ -11,7 +11,7 @@ export async function loginRequest(creds) { const { data } = await getAuthenticatedHttpClient() .post( - `${getConfig().LMS_BASE_URL}/user_api/v1/account/login_session/`, + `${getConfig().LMS_BASE_URL}/api/user/v2/account/login_session/`, querystring.stringify(creds), requestConfig, ) diff --git a/src/login/messages.jsx b/src/login/messages.jsx index 4826020a..d82dfa51 100644 --- a/src/login/messages.jsx +++ b/src/login/messages.jsx @@ -208,6 +208,11 @@ const messages = defineMessages({ defaultMessage: 'reset your password', description: 'Reset password link text for incorrect email or password credentials', }, + 'login.incorrect.credentials.error.before.account.blocked.text': { + id: 'login.incorrect.credentials.error.before.account.blocked.text', + defaultMessage: 'click here to reset it.', + description: 'Reset password link text for incorrect email or password credentials before blocking account', + }, }); export default messages; diff --git a/src/login/tests/LoginFailure.test.jsx b/src/login/tests/LoginFailure.test.jsx index bbae064c..6011b851 100644 --- a/src/login/tests/LoginFailure.test.jsx +++ b/src/login/tests/LoginFailure.test.jsx @@ -84,8 +84,8 @@ describe('LoginFailureMessage', () => { , ); - const expectedMessage = 'We couldn\'t sign you in.The username, email or password you entered is incorrect. Please try again or ' - + 'reset your password Attempts remaining: 3 Warning: After 6 consecutive unsuccessful login attempts, your account will be locked.'; + const expectedMessage = 'We couldn\'t sign you in.The username, email or password you entered is incorrect. ' + + 'You have 3 more sign in attempts before your account is temporarily locked. If you\'ve forgotten your password, click here to reset it.'; expect(loginFailureMessage.find('#login-failure-alert').first().text()).toEqual(expectedMessage); }); diff --git a/src/login/tests/LoginPage.test.jsx b/src/login/tests/LoginPage.test.jsx index 9905d827..ba1dd355 100644 --- a/src/login/tests/LoginPage.test.jsx +++ b/src/login/tests/LoginPage.test.jsx @@ -91,7 +91,7 @@ describe('LoginPage', () => { loginPage.find('input#password').simulate('change', { target: { value: 'password' } }); loginPage.find('button.btn-brand').simulate('click'); - expect(store.dispatch).toHaveBeenCalledWith(loginRequest({ email: 'test@example.com', password: 'password' })); + expect(store.dispatch).toHaveBeenCalledWith(loginRequest({ email_or_username: 'test@example.com', password: 'password' })); }); it('should not dispatch loginRequest on empty form submission', () => { @@ -129,19 +129,6 @@ describe('LoginPage', () => { expect(loginPage.state('errors')).toEqual(errorState); }); - it('should match the state for invalid email format on form submission', () => { - const errorState = { emailOrUsername: 'The email address you\'ve provided isn\'t formatted correctly.', password: '' }; - store.dispatch = jest.fn(store.dispatch); - - const loginPage = (mount(reduxWrapper())).find('LoginPage'); - - loginPage.find('input#password').simulate('change', { target: { value: 'test', name: 'password' } }); - loginPage.find('input#email').simulate('change', { target: { value: 'test@', name: 'email' } }); - loginPage.find('button.btn-brand').simulate('click'); - - expect(loginPage.state('errors')).toEqual(errorState); - }); - // ******** test form buttons and links ******** it('should match default button state', () => { diff --git a/src/register/RegistrationPage.jsx b/src/register/RegistrationPage.jsx index e02bd0b4..7afd6ab1 100644 --- a/src/register/RegistrationPage.jsx +++ b/src/register/RegistrationPage.jsx @@ -252,6 +252,7 @@ class RegistrationPage extends React.Component { } else if (value.length <= 2 || !emailRegex.test(value)) { errors.email = intl.formatMessage(messages['email.invalid.format.error']); } else if (emailRegex.test(value)) { + errors.email = ''; let emailLexemes = value.split('@'); let domainLexemes = emailLexemes[1].split('.'); const serviceProvider = domainLexemes[0];