From 8b0a421924b14a1a47d6296deafc88798c64e406 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 13 Oct 2023 11:44:52 +0200 Subject: [PATCH 1/3] fix: Lowercase user email before insert and update --- packages/backend/src/models/user.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/backend/src/models/user.ts b/packages/backend/src/models/user.ts index fe58670cac..20060458e3 100644 --- a/packages/backend/src/models/user.ts +++ b/packages/backend/src/models/user.ts @@ -263,6 +263,8 @@ class User extends Base { async $beforeInsert(queryContext: QueryContext) { await super.$beforeInsert(queryContext); + + this.email = this.email.toLowerCase(); await this.generateHash(); if (appConfig.isCloud) { @@ -273,6 +275,7 @@ class User extends Base { async $beforeUpdate(opt: ModelOptions, queryContext: QueryContext) { await super.$beforeUpdate(opt, queryContext); + this.email = this.email.toLowerCase(); await this.generateHash(); } From 82ad0735d2cee5c15d07ecfcb655a071d5c2808e Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 13 Oct 2023 11:52:31 +0200 Subject: [PATCH 2/3] chore: Convert user emails to lowercase --- ...231013094544_convert_user_emails_to_lowercase.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 packages/backend/src/db/migrations/20231013094544_convert_user_emails_to_lowercase.ts diff --git a/packages/backend/src/db/migrations/20231013094544_convert_user_emails_to_lowercase.ts b/packages/backend/src/db/migrations/20231013094544_convert_user_emails_to_lowercase.ts new file mode 100644 index 0000000000..623bfc755d --- /dev/null +++ b/packages/backend/src/db/migrations/20231013094544_convert_user_emails_to_lowercase.ts @@ -0,0 +1,13 @@ +import { Knex } from 'knex'; + +export async function up(knex: Knex): Promise { + await knex('users') + .whereRaw('email != LOWER(email)') + .update({ + email: knex.raw('LOWER(email)'), + }); +} + +export async function down(): Promise { + // void +} From fe820fb4fe6f03f8123e31cd4de98a97eb947ad5 Mon Sep 17 00:00:00 2001 From: Faruk AYDIN Date: Fri, 13 Oct 2023 13:21:55 +0200 Subject: [PATCH 3/3] fix: use lowercase email for user model findOne method --- .../backend/src/graphql/mutations/create-user.ee.ts | 10 ++++++++-- .../src/graphql/mutations/forgot-password.ee.ts | 2 +- .../backend/src/graphql/mutations/register-user.ee.ts | 4 +++- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/packages/backend/src/graphql/mutations/create-user.ee.ts b/packages/backend/src/graphql/mutations/create-user.ee.ts index 887bdc895c..956be348d0 100644 --- a/packages/backend/src/graphql/mutations/create-user.ee.ts +++ b/packages/backend/src/graphql/mutations/create-user.ee.ts @@ -13,12 +13,18 @@ type Params = { }; }; -const createUser = async (_parent: unknown, params: Params, context: Context) => { +const createUser = async ( + _parent: unknown, + params: Params, + context: Context +) => { context.currentUser.can('create', 'User'); const { fullName, email, password } = params.input; - const existingUser = await User.query().findOne({ email }); + const existingUser = await User.query().findOne({ + email: email.toLowerCase(), + }); if (existingUser) { throw new Error('User already exists!'); diff --git a/packages/backend/src/graphql/mutations/forgot-password.ee.ts b/packages/backend/src/graphql/mutations/forgot-password.ee.ts index 5e28a42947..e40a32d926 100644 --- a/packages/backend/src/graphql/mutations/forgot-password.ee.ts +++ b/packages/backend/src/graphql/mutations/forgot-password.ee.ts @@ -15,7 +15,7 @@ type Params = { const forgotPassword = async (_parent: unknown, params: Params) => { const { email } = params.input; - const user = await User.query().findOne({ email }); + const user = await User.query().findOne({ email: email.toLowerCase() }); if (!user) { throw new Error('Email address not found!'); diff --git a/packages/backend/src/graphql/mutations/register-user.ee.ts b/packages/backend/src/graphql/mutations/register-user.ee.ts index 0a7ede0719..ba0651b485 100644 --- a/packages/backend/src/graphql/mutations/register-user.ee.ts +++ b/packages/backend/src/graphql/mutations/register-user.ee.ts @@ -12,7 +12,9 @@ type Params = { const registerUser = async (_parent: unknown, params: Params) => { const { fullName, email, password } = params.input; - const existingUser = await User.query().findOne({ email }); + const existingUser = await User.query().findOne({ + email: email.toLowerCase(), + }); if (existingUser) { throw new Error('User already exists!');