Skip to content

Commit 039cf9f

Browse files
authored
Merge pull request #320 from Worklenz/development
Development
2 parents e17efb5 + 1401af3 commit 039cf9f

47 files changed

Lines changed: 538 additions & 150 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

worklenz-backend/src/controllers/auth-controller.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,8 +114,11 @@ export default class AuthController extends WorklenzControllerBase {
114114
public static async reset_password(req: IWorkLenzRequest, res: IWorkLenzResponse) {
115115
const {email} = req.body;
116116

117-
const q = `SELECT id, email, google_id, password FROM users WHERE email = $1;`;
118-
const result = await db.query(q, [email || null]);
117+
// Normalize email to lowercase for case-insensitive comparison
118+
const normalizedEmail = email ? email.toLowerCase().trim() : null;
119+
120+
const q = `SELECT id, email, google_id, password FROM users WHERE LOWER(email) = $1;`;
121+
const result = await db.query(q, [normalizedEmail]);
119122

120123
if (!result.rowCount)
121124
return res.status(200).send(new ServerResponse(false, null, "Account does not exists!"));
@@ -297,15 +300,16 @@ export default class AuthController extends WorklenzControllerBase {
297300
}
298301

299302
// Check for existing local account
300-
const localAccountResult = await db.query("SELECT 1 FROM users WHERE email = $1 AND password IS NOT NULL AND is_deleted IS FALSE;", [profile.email]);
303+
const normalizedProfileEmail = profile.email.toLowerCase().trim();
304+
const localAccountResult = await db.query("SELECT 1 FROM users WHERE LOWER(email) = $1 AND password IS NOT NULL AND is_deleted IS FALSE;", [normalizedProfileEmail]);
301305
if (localAccountResult.rowCount) {
302306
return res.status(400).send(new ServerResponse(false, null, `No Google account exists for email ${profile.email}.`));
303307
}
304308

305309
// Check if user exists
306310
const userResult = await db.query(
307-
"SELECT id, google_id, name, email, active_team FROM users WHERE google_id = $1 OR email = $2;",
308-
[profile.sub, profile.email]
311+
"SELECT id, google_id, name, email, active_team FROM users WHERE google_id = $1 OR LOWER(email) = $2;",
312+
[profile.sub, normalizedProfileEmail]
309313
);
310314

311315
let user: any;
@@ -317,7 +321,7 @@ export default class AuthController extends WorklenzControllerBase {
317321
const googleUserData = {
318322
id: profile.sub,
319323
displayName: profile.name,
320-
email: profile.email,
324+
email: normalizedProfileEmail,
321325
picture: profile.picture
322326
};
323327

worklenz-backend/src/passport/passport-strategies/passport-local-login.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,15 @@ async function handleLogin(req: Request, email: string, password: string, done:
1616
}
1717

1818
try {
19+
// Normalize email to lowercase for case-insensitive comparison
20+
const normalizedEmail = email.toLowerCase().trim();
21+
1922
const q = `SELECT id, email, google_id, password
2023
FROM users
21-
WHERE email = $1
24+
WHERE LOWER(email) = $1
2225
AND google_id IS NULL
2326
AND is_deleted IS FALSE;`;
24-
const result = await db.query(q, [email]);
27+
const result = await db.query(q, [normalizedEmail]);
2528

2629
const [data] = result.rows;
2730

@@ -33,7 +36,7 @@ async function handleLogin(req: Request, email: string, password: string, done:
3336

3437
const passwordMatch = bcrypt.compareSync(password, data.password);
3538

36-
if (passwordMatch && email === data.email) {
39+
if (passwordMatch) {
3740
delete data.password;
3841
const successMsg = "User successfully logged in";
3942
req.flash(SUCCESS_KEY, successMsg);

worklenz-backend/src/passport/passport-strategies/passport-local-signup.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,21 +13,21 @@ async function isGoogleAccountFound(email: string) {
1313
const q = `
1414
SELECT 1
1515
FROM users
16-
WHERE email = $1
16+
WHERE LOWER(email) = $1
1717
AND google_id IS NOT NULL;
1818
`;
19-
const result = await db.query(q, [email]);
19+
const result = await db.query(q, [email.toLowerCase().trim()]);
2020
return !!result.rowCount;
2121
}
2222

2323
async function isAccountDeactivated(email: string) {
2424
const q = `
2525
SELECT 1
2626
FROM users
27-
WHERE email = $1
27+
WHERE LOWER(email) = $1
2828
AND is_deleted = TRUE;
2929
`;
30-
const result = await db.query(q, [email]);
30+
const result = await db.query(q, [email.toLowerCase().trim()]);
3131
return !!result.rowCount;
3232
}
3333

@@ -41,7 +41,7 @@ async function registerUser(password: string, team_id: string, name: string, tea
4141
const body = {
4242
name,
4343
team_name,
44-
email,
44+
email: email.toLowerCase().trim(),
4545
password: encryptedPassword,
4646
timezone,
4747
invited_team_id: teamId,

worklenz-backend/src/views/_tawk-to.pug

Lines changed: 0 additions & 11 deletions
This file was deleted.

worklenz-frontend/public/locales/alb/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@
3232
"trial-badge-hours": "{{hours}} orë të mbetura",
3333
"trial-alert-admin-note": "Ju mund të aksesoni ende Qendrën e Administrimit për të menaxhuar abonimin tuaj",
3434
"trial-alert-dismiss": "Hidhe për sot",
35+
"switch-team-to-continue": "Ndërro skuadrën për të vazhduar",
36+
"current-team": "Skuadra aktuale",
37+
"select-team": "Zgjidh skuadrën",
38+
"owned-by": "Në pronësi të",
39+
"switch-team-active-subscription": "Kaloni në një skuadër me një abonim aktiv për të vazhduar punën",
40+
"or": "ose",
3541
"license-expiring-soon": "Licenca juaj skadon në {{days}} ditë",
3642
"license-expiring-soon_plural": "Licenca juaj skadon në {{days}} ditë",
3743
"license-expiring-today": "Licenca juaj skadon sot!",

worklenz-frontend/public/locales/de/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"trial-badge-hours": "{{hours}}h übrig",
4343
"trial-alert-admin-note": "Sie können weiterhin auf das Admin Center zugreifen, um Ihr Abonnement zu verwalten",
4444
"trial-alert-dismiss": "Für heute ausblenden",
45+
"switch-team-to-continue": "Team wechseln zum Fortfahren",
46+
"current-team": "Aktuelles Team",
47+
"select-team": "Team auswählen",
48+
"owned-by": "Gehört",
49+
"switch-team-active-subscription": "Wechseln Sie zu einem Team mit einem aktiven Abonnement, um weiterzuarbeiten",
50+
"or": "oder",
4551
"license-expiring-soon": "Ihre Lizenz läuft in {{days}} Tag ab",
4652
"license-expiring-soon_plural": "Ihre Lizenz läuft in {{days}} Tagen ab",
4753
"license-expiring-today": "Ihre Lizenz läuft heute ab!",

worklenz-frontend/public/locales/en/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"trial-badge-hours": "{{hours}}h left",
4343
"trial-alert-admin-note": "You can still access the Admin Center to manage your subscription",
4444
"trial-alert-dismiss": "Dismiss for today",
45+
"switch-team-to-continue": "Switch Team to Continue",
46+
"current-team": "Current Team",
47+
"select-team": "Select Team",
48+
"owned-by": "Owned by",
49+
"switch-team-active-subscription": "Switch to a team with an active subscription to continue working",
50+
"or": "or",
4551
"license-expiring-soon": "Your license expires in {{days}} day",
4652
"license-expiring-soon_plural": "Your license expires in {{days}} days",
4753
"license-expiring-today": "Your license expires today!",

worklenz-frontend/public/locales/es/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,12 @@
4242
"trial-badge-hours": "{{hours}}h restantes",
4343
"trial-alert-admin-note": "Aún puede acceder al Centro de administración para gestionar su suscripción",
4444
"trial-alert-dismiss": "Descartar por hoy",
45+
"switch-team-to-continue": "Cambiar equipo para continuar",
46+
"current-team": "Equipo actual",
47+
"select-team": "Seleccionar equipo",
48+
"owned-by": "Propiedad de",
49+
"switch-team-active-subscription": "Cambie a un equipo con una suscripción activa para continuar trabajando",
50+
"or": "o",
4551
"license-expiring-soon": "Su licencia expira en {{days}} día",
4652
"license-expiring-soon_plural": "Su licencia expira en {{days}} días",
4753
"license-expiring-today": "¡Su licencia expira hoy!",

worklenz-frontend/public/locales/pt/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@
3232
"trial-badge-hours": "{{hours}}h restantes",
3333
"trial-alert-admin-note": "Você ainda pode acessar o Centro de administração para gerenciar sua assinatura",
3434
"trial-alert-dismiss": "Dispensar por hoje",
35+
"switch-team-to-continue": "Trocar equipe para continuar",
36+
"current-team": "Equipe atual",
37+
"select-team": "Selecionar equipe",
38+
"owned-by": "Propriedade de",
39+
"switch-team-active-subscription": "Mude para uma equipe com uma assinatura ativa para continuar trabalhando",
40+
"or": "ou",
3541
"license-expiring-soon": "Sua licença expira em {{days}} dia",
3642
"license-expiring-soon_plural": "Sua licença expira em {{days}} dias",
3743
"license-expiring-today": "Sua licença expira hoje!",

worklenz-frontend/public/locales/zh/common.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,12 @@
3232
"trial-badge-hours": "剩余{{hours}}小时",
3333
"trial-alert-admin-note": "您仍可以访问管理中心管理您的订阅",
3434
"trial-alert-dismiss": "今日暂不提醒",
35+
"switch-team-to-continue": "切换团队以继续",
36+
"current-team": "当前团队",
37+
"select-team": "选择团队",
38+
"owned-by": "拥有者",
39+
"switch-team-active-subscription": "切换到有有效订阅的团队以继续工作",
40+
"or": "",
3541
"license-expiring-soon": "您的许可证还有 {{days}} 天到期",
3642
"license-expiring-soon_plural": "您的许可证还有 {{days}} 天到期",
3743
"license-expiring-today": "您的许可证今天到期!",

0 commit comments

Comments
 (0)