From 3a606d55473a6569bd4b2c7a9b0fb79187c5f1d4 Mon Sep 17 00:00:00 2001 From: martgil Date: Thu, 9 Jan 2025 15:13:11 +0800 Subject: [PATCH 1/4] add reference comment --- .../elements/compose-modules/compose-input-module.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/extension/chrome/elements/compose-modules/compose-input-module.ts b/extension/chrome/elements/compose-modules/compose-input-module.ts index 215b8adadf8..5f1b6238715 100644 --- a/extension/chrome/elements/compose-modules/compose-input-module.ts +++ b/extension/chrome/elements/compose-modules/compose-input-module.ts @@ -301,15 +301,17 @@ export class ComposeInputModule extends ViewModule { const result: ParsedRecipients = { to: [], cc: [], bcc: [] }; for (const recipient of recipients) { /* eslint-disable @typescript-eslint/no-non-null-assertion */ + // Setting recipient name to empty string as a hotfix - https://github.com/FlowCrypt/enterprise-server/issues/6264 + const defaultName = ''; switch (recipient.sendingType) { case 'to': - result.to!.push({ email: recipient.email, name: recipient.name }); + result.to!.push({ email: recipient.email, name: defaultName }); break; case 'cc': - result.cc!.push({ email: recipient.email, name: recipient.name }); + result.cc!.push({ email: recipient.email, name: defaultName }); break; case 'bcc': - result.bcc!.push({ email: recipient.email, name: recipient.name }); + result.bcc!.push({ email: recipient.email, name: defaultName }); break; } /* eslint-enable @typescript-eslint/no-non-null-assertion */ From 9b58e7cd5e54fa45015c480ec9a7e5d657a8ae8f Mon Sep 17 00:00:00 2001 From: martgil Date: Tue, 14 Jan 2025 13:58:08 +0800 Subject: [PATCH 2/4] revert changes --- .../elements/compose-modules/compose-input-module.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/extension/chrome/elements/compose-modules/compose-input-module.ts b/extension/chrome/elements/compose-modules/compose-input-module.ts index 5f1b6238715..215b8adadf8 100644 --- a/extension/chrome/elements/compose-modules/compose-input-module.ts +++ b/extension/chrome/elements/compose-modules/compose-input-module.ts @@ -301,17 +301,15 @@ export class ComposeInputModule extends ViewModule { const result: ParsedRecipients = { to: [], cc: [], bcc: [] }; for (const recipient of recipients) { /* eslint-disable @typescript-eslint/no-non-null-assertion */ - // Setting recipient name to empty string as a hotfix - https://github.com/FlowCrypt/enterprise-server/issues/6264 - const defaultName = ''; switch (recipient.sendingType) { case 'to': - result.to!.push({ email: recipient.email, name: defaultName }); + result.to!.push({ email: recipient.email, name: recipient.name }); break; case 'cc': - result.cc!.push({ email: recipient.email, name: defaultName }); + result.cc!.push({ email: recipient.email, name: recipient.name }); break; case 'bcc': - result.bcc!.push({ email: recipient.email, name: defaultName }); + result.bcc!.push({ email: recipient.email, name: recipient.name }); break; } /* eslint-enable @typescript-eslint/no-non-null-assertion */ From b2e767d48d835ef00f40b7e0f1f720a7255b9e80 Mon Sep 17 00:00:00 2001 From: martgil Date: Tue, 14 Jan 2025 14:12:02 +0800 Subject: [PATCH 3/4] add working hotfix --- extension/js/common/core/common.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/extension/js/common/core/common.ts b/extension/js/common/core/common.ts index 6aac74e249f..c084f71ce01 100644 --- a/extension/js/common/core/common.ts +++ b/extension/js/common/core/common.ts @@ -283,7 +283,12 @@ export class Str { }; private static formatEmailWithOptionalNameEx = ({ email, name }: EmailParts, forceBrackets?: boolean): string => { if (name) { - return `${Str.rmSpecialCharsKeepUtf(name, 'ALLOW-SOME')} <${email}>`; + /* + * hotfix for issue https://github.com/FlowCrypt/enterprise-server/issues/6264 + * this replaces accented characters with their unaccented counterparts + */ + const normalizedName = name.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); + return `${Str.rmSpecialCharsKeepUtf(normalizedName, 'ALLOW-SOME')} <${email}>`; } return forceBrackets ? `<${email}>` : email; }; From 5b332568cbc71155a115fbc9e1f4a41a09928a53 Mon Sep 17 00:00:00 2001 From: martgil Date: Fri, 17 Jan 2025 15:37:04 +0800 Subject: [PATCH 4/4] pr reviews: apply fix with appropriate approach --- .../api/account-servers/external-service.ts | 6 +++--- extension/js/common/core/common.ts | 15 +++++++++------ 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/extension/js/common/api/account-servers/external-service.ts b/extension/js/common/api/account-servers/external-service.ts index 41bd9cba62c..ec9b478c24d 100644 --- a/extension/js/common/api/account-servers/external-service.ts +++ b/extension/js/common/api/account-servers/external-service.ts @@ -146,9 +146,9 @@ export class ExternalService extends Api { JSON.stringify({ associateReplyToken, from, - to: (recipients.to || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis), - cc: (recipients.cc || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis), - bcc: (recipients.bcc || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis), + to: (recipients.to || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis).map(Str.replaceAccentedChars), + cc: (recipients.cc || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis).map(Str.replaceAccentedChars), + bcc: (recipients.bcc || []).map(Str.formatEmailWithOptionalName).map(Xss.stripEmojis).map(Str.replaceAccentedChars), }) ), }); diff --git a/extension/js/common/core/common.ts b/extension/js/common/core/common.ts index c084f71ce01..5bd479a712d 100644 --- a/extension/js/common/core/common.ts +++ b/extension/js/common/core/common.ts @@ -121,6 +121,13 @@ export class Str { return str.replace(/[.~!$%^*=?]/gi, ''); }; + public static replaceAccentedChars = (str: string) => { + /* + * hotfix for issue https://github.com/FlowCrypt/enterprise-server/issues/6264 + */ + return str.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); + }; + public static formatEmailWithOptionalName = (emailParts: EmailParts): string => { return Str.formatEmailWithOptionalNameEx(emailParts); }; @@ -281,14 +288,10 @@ export class Str { public static stripPgpOrGpgExtensionIfPresent = (filename: string) => { return filename.replace(/\.(pgp|gpg)$/i, ''); }; + private static formatEmailWithOptionalNameEx = ({ email, name }: EmailParts, forceBrackets?: boolean): string => { if (name) { - /* - * hotfix for issue https://github.com/FlowCrypt/enterprise-server/issues/6264 - * this replaces accented characters with their unaccented counterparts - */ - const normalizedName = name.normalize('NFD').replace(/[\u0300-\u036f]/g, ''); - return `${Str.rmSpecialCharsKeepUtf(normalizedName, 'ALLOW-SOME')} <${email}>`; + return `${Str.rmSpecialCharsKeepUtf(name, 'ALLOW-SOME')} <${email}>`; } return forceBrackets ? `<${email}>` : email; };