From ae360f2201c7dec466c2d16da0d1b6b8d23f264c Mon Sep 17 00:00:00 2001 From: roschaefer Date: Fri, 22 Nov 2019 15:24:27 +0100 Subject: [PATCH] fix #2329: Normalize email on login in the backend --- .../src/schema/resolvers/user_management.js | 2 ++ .../schema/resolvers/user_management.spec.js | 24 +++++++++++++++++++ webapp/components/LoginForm/LoginForm.spec.js | 11 --------- webapp/components/LoginForm/LoginForm.vue | 4 +--- 4 files changed, 27 insertions(+), 14 deletions(-) diff --git a/backend/src/schema/resolvers/user_management.js b/backend/src/schema/resolvers/user_management.js index e1528cc9e..b7584dd68 100644 --- a/backend/src/schema/resolvers/user_management.js +++ b/backend/src/schema/resolvers/user_management.js @@ -2,6 +2,7 @@ import encode from '../../jwt/encode' import bcrypt from 'bcryptjs' import { AuthenticationError } from 'apollo-server' import { neode } from '../../bootstrap/neo4j' +import { normalizeEmail } from 'validator' const instance = neode() @@ -21,6 +22,7 @@ export default { // if (user && user.id) { // throw new Error('Already logged in.') // } + email = normalizeEmail(email) const session = driver.session() const result = await session.run( ` diff --git a/backend/src/schema/resolvers/user_management.spec.js b/backend/src/schema/resolvers/user_management.spec.js index 9d7dff2a3..df8454ebb 100644 --- a/backend/src/schema/resolvers/user_management.spec.js +++ b/backend/src/schema/resolvers/user_management.spec.js @@ -5,8 +5,10 @@ import { gql } from '../../helpers/jest' import { createTestClient } from 'apollo-server-testing' import createServer, { context } from '../../server' import encode from '../../jwt/encode' +import { neode as getNeode } from '../../bootstrap/neo4j' const factory = Factory() +const neode = getNeode() let query let mutate let variables @@ -214,6 +216,28 @@ describe('login', () => { }) }) }) + + describe('normalization', () => { + describe('email address is a gmail address ', () => { + beforeEach(async () => { + const email = await neode.first('EmailAddress', { email: 'test@example.org' }) + await email.update({ email: 'someuser@gmail.com' }) + }) + + describe('supplied email contains dots', () => { + beforeEach(() => { + variables = { ...variables, email: 'some.user@gmail.com' } + }) + + it('normalizes email, issue #2329', async () => { + await respondsWith({ + data: { login: expect.any(String) }, + errors: undefined, + }) + }) + }) + }) + }) }) describe('with a valid email but incorrect password', () => { diff --git a/webapp/components/LoginForm/LoginForm.spec.js b/webapp/components/LoginForm/LoginForm.spec.js index b8697e771..b60680f37 100644 --- a/webapp/components/LoginForm/LoginForm.spec.js +++ b/webapp/components/LoginForm/LoginForm.spec.js @@ -57,17 +57,6 @@ describe('LoginForm', () => { undefined, ) }) - - describe('given email is a gmail address', () => { - it('removes dots, issue #2329', () => { - fillIn(Wrapper(), { email: 'example.user@gmail.com' }) - expect(storeMocks.actions['auth/login']).toHaveBeenCalledWith( - expect.any(Object), - { email: 'exampleuser@gmail.com', password: '1234' }, - undefined, - ) - }) - }) }) }) }) diff --git a/webapp/components/LoginForm/LoginForm.vue b/webapp/components/LoginForm/LoginForm.vue index 0d13772a9..d61a5675a 100644 --- a/webapp/components/LoginForm/LoginForm.vue +++ b/webapp/components/LoginForm/LoginForm.vue @@ -73,7 +73,6 @@