From 454950374f0c6fd4258923131c0f8ce52f028e6a Mon Sep 17 00:00:00 2001 From: rustmailer Date: Wed, 3 Dec 2025 03:48:39 +0800 Subject: [PATCH] feat(account): Prioritize dedicated name field for IMAP authentication username #28 Refactor account authentication logic to prioritize the `name` field over the `email` field during the IMAP connection phase. - The `name` field now serves as the primary IMAP login credential and is no longer treated purely as an optional, descriptive field. - If the `name` field is empty or unset, the system will fall back to using the full `email` address for authentication. - This change supports IMAP providers that require a username different from the full email address (e.g., employee ID, specific account name). --- Cargo.lock | 2 +- Cargo.toml | 2 +- src/modules/imap/manager.rs | 5 +++-- web/src/features/accounts/components/nosync-dialog.tsx | 4 ++-- web/src/features/accounts/components/step1.tsx | 2 +- web/src/locales/ar.json | 1 + web/src/locales/da.json | 1 + web/src/locales/de.json | 1 + web/src/locales/en.json | 1 + web/src/locales/es.json | 1 + web/src/locales/fi.json | 1 + web/src/locales/fr.json | 1 + web/src/locales/it.json | 1 + web/src/locales/jp.json | 1 + web/src/locales/ko.json | 1 + web/src/locales/nl.json | 1 + web/src/locales/no.json | 1 + web/src/locales/pt.json | 1 + web/src/locales/ru.json | 1 + web/src/locales/sv.json | 1 + web/src/locales/zh-tw.json | 1 + web/src/locales/zh.json | 1 + 22 files changed, 25 insertions(+), 7 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e38518b..26abba3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -424,7 +424,7 @@ dependencies = [ [[package]] name = "bichon" -version = "0.1.1" +version = "0.1.2" dependencies = [ "ahash", "async-imap", diff --git a/Cargo.toml b/Cargo.toml index 5a69a70..2fee261 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "bichon" -version = "0.1.1" +version = "0.1.2" edition = "2021" [[bin]] diff --git a/src/modules/imap/manager.rs b/src/modules/imap/manager.rs index 15548e9..cf92b01 100644 --- a/src/modules/imap/manager.rs +++ b/src/modules/imap/manager.rs @@ -67,6 +67,7 @@ impl ImapConnectionManager { ) -> BichonResult>> { assert_eq!(account.account_type, AccountType::IMAP); let imap = account.imap.as_ref().unwrap(); + let username = account.name.clone().unwrap_or(account.email.clone()); match &imap.auth.auth_type { AuthType::Password => { let password = &imap.auth.password.clone().ok_or_else(|| { @@ -77,7 +78,7 @@ impl ImapConnectionManager { })?; let password = decrypt!(&password)?; - client.login(&account.email, &password).await + client.login(&username, &password).await } AuthType::OAuth2 => { let record = OAuth2AccessToken::get(self.account_id).await?; @@ -89,7 +90,7 @@ impl ImapConnectionManager { ) })?; client - .authenticate(OAuth2::new(account.email.clone(), access_token)) + .authenticate(OAuth2::new(username, access_token)) .await } } diff --git a/web/src/features/accounts/components/nosync-dialog.tsx b/web/src/features/accounts/components/nosync-dialog.tsx index c2c2231..4f101d4 100644 --- a/web/src/features/accounts/components/nosync-dialog.tsx +++ b/web/src/features/accounts/components/nosync-dialog.tsx @@ -190,7 +190,7 @@ export function NoSyncAccountDialog({ currentRow, open, onOpenChange }: Props) { )} /> - ( @@ -205,7 +205,7 @@ export function NoSyncAccountDialog({ currentRow, open, onOpenChange }: Props) { )} - /> + /> */} - {t('accounts.optional')} + {t('accounts.nameDescription')} )} diff --git a/web/src/locales/ar.json b/web/src/locales/ar.json index c76063c..ea0cef4 100644 --- a/web/src/locales/ar.json +++ b/web/src/locales/ar.json @@ -163,6 +163,7 @@ "emailPlaceholder": "مثال: john.doe@example.com", "namePlaceholder": "مثال: john.doe", "optional": "اختياري", + "nameDescription": "اسم مستخدم اتصال IMAP. اترك هذا الحقل فارغًا إذا كنت تستخدم عنوان بريدك الإلكتروني الكامل كاسم مستخدم للاتصال.", "emailCannotBeModified": "لا يمكن تعديل عنوان حساب البريد الإلكتروني أثناء التحرير.", "addAccount": "إضافة حساب", "updateAccount": "تحديث الحساب", diff --git a/web/src/locales/da.json b/web/src/locales/da.json index 6188260..bf89d84 100644 --- a/web/src/locales/da.json +++ b/web/src/locales/da.json @@ -163,6 +163,7 @@ "emailPlaceholder": "f.eks. hans.hansen@eksempel.dk", "namePlaceholder": "f.eks. Hans Hansen", "optional": "Valgfri", + "nameDescription": "IMAP-forbindelsesbrugernavn. Lad dette felt være tomt, hvis du bruger din fulde e-mailadresse som forbindelsesbrugernavn.", "emailCannotBeModified": "Kontoens e-mailadresse kan ikke ændres under redigering.", "addAccount": "Tilføj konto", "updateAccount": "Opdater konto", diff --git a/web/src/locales/de.json b/web/src/locales/de.json index b23f874..da0a83f 100644 --- a/web/src/locales/de.json +++ b/web/src/locales/de.json @@ -163,6 +163,7 @@ "emailPlaceholder": "z.B. max.mustermann@beispiel.de", "namePlaceholder": "z.B. Max Mustermann", "optional": "Optional", + "nameDescription": "IMAP-Verbindungsbenutzername. Lassen Sie dieses Feld leer, wenn Sie Ihre vollständige E-Mail-Adresse als Verbindungsbenutzernamen verwenden.", "emailCannotBeModified": "Die E-Mail-Adresse des Kontos kann während der Bearbeitung nicht geändert werden.", "addAccount": "Konto hinzufügen", "updateAccount": "Konto aktualisieren", diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 9bd63bd..02f0507 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -163,6 +163,7 @@ "emailPlaceholder": "e.g john.doe@example.com", "namePlaceholder": "e.g john.doe", "optional": "Optional", + "nameDescription": "IMAP Connection Username. Leave this field blank if you use your full email address as the connection username.", "emailCannotBeModified": "The email account address cannot be modified when editing.", "addAccount": "Add Account", "updateAccount": "Update Account", diff --git a/web/src/locales/es.json b/web/src/locales/es.json index 4bcc20a..8e06740 100644 --- a/web/src/locales/es.json +++ b/web/src/locales/es.json @@ -163,6 +163,7 @@ "emailPlaceholder": "ej. juan.perez@ejemplo.com", "namePlaceholder": "ej. Juan Pérez", "optional": "Opcional", + "nameDescription": "Nombre de usuario de conexión IMAP. Deje este campo en blanco si utiliza su dirección de correo electrónico completa como nombre de usuario de conexión.", "emailCannotBeModified": "La dirección de correo electrónico de la cuenta no se puede modificar durante la edición.", "addAccount": "Añadir cuenta", "updateAccount": "Actualizar cuenta", diff --git a/web/src/locales/fi.json b/web/src/locales/fi.json index e5a2b81..1b4e975 100644 --- a/web/src/locales/fi.json +++ b/web/src/locales/fi.json @@ -163,6 +163,7 @@ "emailPlaceholder": "esim. matti.meikäläinen@esimerkki.fi", "namePlaceholder": "esim. matti.meikäläinen", "optional": "Valinnainen", + "nameDescription": "IMAP-yhteyden käyttäjänimi. Jätä tämä kenttä tyhjäksi, jos käytät koko sähköpostiosoitettasi yhteyden käyttäjänimenä.", "emailCannotBeModified": "Tilin sähköpostiosoitetta ei voi muokata muokkauksen aikana.", "addAccount": "Lisää tili", "updateAccount": "Päivitä tili", diff --git a/web/src/locales/fr.json b/web/src/locales/fr.json index 7fb1ac2..b802336 100644 --- a/web/src/locales/fr.json +++ b/web/src/locales/fr.json @@ -163,6 +163,7 @@ "emailPlaceholder": "ex. jean.dupont@exemple.com", "namePlaceholder": "ex. jean.dupont", "optional": "Facultatif", + "nameDescription": "Nom d'utilisateur de connexion IMAP. Laissez ce champ vide si vous utilisez votre adresse e-mail complète comme nom d'utilisateur de connexion.", "emailCannotBeModified": "L'adresse e-mail du compte ne peut pas être modifiée lors de l'édition.", "addAccount": "Ajouter un Compte", "updateAccount": "Mettre à jour le Compte", diff --git a/web/src/locales/it.json b/web/src/locales/it.json index d65731d..af7054d 100644 --- a/web/src/locales/it.json +++ b/web/src/locales/it.json @@ -163,6 +163,7 @@ "emailPlaceholder": "es. john.doe@esempio.com", "namePlaceholder": "es. john.doe", "optional": "Opzionale", + "nameDescription": "Nome utente di connessione IMAP. Lasciare vuoto questo campo se si utilizza l'indirizzo email completo come nome utente di connessione.", "emailCannotBeModified": "L'indirizzo email dell'account non può essere modificato durante la modifica.", "addAccount": "Aggiungi Account", "updateAccount": "Aggiorna Account", diff --git a/web/src/locales/jp.json b/web/src/locales/jp.json index fdf8e30..e45a8d9 100644 --- a/web/src/locales/jp.json +++ b/web/src/locales/jp.json @@ -163,6 +163,7 @@ "emailPlaceholder": "例: john.doe@example.com", "namePlaceholder": "例: john.doe", "optional": "オプション", + "nameDescription": "IMAP接続のユーザー名。接続ユーザー名として完全なメールアドレスを使用する場合は、このフィールドを空欄にしてください。", "emailCannotBeModified": "編集時にはメールアカウントアドレスは変更できません。", "addAccount": "アカウントを追加", "updateAccount": "アカウントを更新", diff --git a/web/src/locales/ko.json b/web/src/locales/ko.json index 62cddbf..4a9e061 100644 --- a/web/src/locales/ko.json +++ b/web/src/locales/ko.json @@ -163,6 +163,7 @@ "emailPlaceholder": "예: john.doe@example.com", "namePlaceholder": "예: john.doe", "optional": "선택 사항", + "nameDescription": "IMAP 연결 사용자 이름. 전체 이메일 주소를 연결 사용자 이름으로 사용하는 경우, 이 필드를 비워 두십시오.", "emailCannotBeModified": "편집 시 계정 이메일 주소는 수정할 수 없습니다.", "addAccount": "계정 추가", "updateAccount": "계정 업데이트", diff --git a/web/src/locales/nl.json b/web/src/locales/nl.json index 614178f..a172d7d 100644 --- a/web/src/locales/nl.json +++ b/web/src/locales/nl.json @@ -163,6 +163,7 @@ "emailPlaceholder": "bv. john.doe@voorbeeld.com", "namePlaceholder": "bv. john.doe", "optional": "Optioneel", + "nameDescription": "IMAP-verbindingsgebruikersnaam. Laat dit veld leeg als u uw volledige e-mailadres als verbindingsgebruikersnaam gebruikt.", "emailCannotBeModified": "Het e-mailadres van het account kan niet worden gewijzigd tijdens het bewerken.", "addAccount": "Account Toevoegen", "updateAccount": "Account Bijwerken", diff --git a/web/src/locales/no.json b/web/src/locales/no.json index 59dd702..ddf25c3 100644 --- a/web/src/locales/no.json +++ b/web/src/locales/no.json @@ -163,6 +163,7 @@ "emailPlaceholder": "f.eks. ola.nordmann@eksempel.no", "namePlaceholder": "f.eks. ola.nordmann", "optional": "Valgfritt", + "nameDescription": "IMAP-tilkoblingsbrukernavn. La dette feltet stå tomt hvis du bruker hele e-postadressen din som tilkoblingsbrukernavn.", "emailCannotBeModified": "E-postadressen til kontoen kan ikke endres under redigering.", "addAccount": "Legg til konto", "updateAccount": "Oppdater konto", diff --git a/web/src/locales/pt.json b/web/src/locales/pt.json index 8172689..23dea30 100644 --- a/web/src/locales/pt.json +++ b/web/src/locales/pt.json @@ -163,6 +163,7 @@ "emailPlaceholder": "Ex: john.doe@example.com", "namePlaceholder": "Ex: john.doe", "optional": "Opcional", + "nameDescription": "Nome de usuário de conexão IMAP. Deixe este campo em branco se você usar seu endereço de e-mail completo como nome de usuário de conexão.", "emailCannotBeModified": "O endereço de email da conta não pode ser modificado ao editar.", "addAccount": "Adicionar Conta", "updateAccount": "Atualizar Conta", diff --git a/web/src/locales/ru.json b/web/src/locales/ru.json index 0b774db..4b22f48 100644 --- a/web/src/locales/ru.json +++ b/web/src/locales/ru.json @@ -163,6 +163,7 @@ "emailPlaceholder": "например, john.doe@example.com", "namePlaceholder": "например, john.doe", "optional": "Необязательно", + "nameDescription": "Имя пользователя для IMAP-подключения. Оставьте это поле пустым, если вы используете свой полный адрес электронной почты в качестве имени пользователя для подключения.", "emailCannotBeModified": "Адрес электронной почты нельзя изменить при редактировании.", "addAccount": "Добавить аккаунт", "updateAccount": "Обновить аккаунт", diff --git a/web/src/locales/sv.json b/web/src/locales/sv.json index 75e5c3f..a46f355 100644 --- a/web/src/locales/sv.json +++ b/web/src/locales/sv.json @@ -163,6 +163,7 @@ "emailPlaceholder": "t.ex. sven.svensson@exempel.se", "namePlaceholder": "t.ex. sven.svensson", "optional": "Valfritt", + "nameDescription": "IMAP-anslutningsanvändarnamn. Lämna detta fält tomt om du använder din fullständiga e-postadress som anslutningsanvändarnamn.", "emailCannotBeModified": "Kontots e-postadress kan inte ändras vid redigering.", "addAccount": "Lägg till konto", "updateAccount": "Uppdatera konto", diff --git a/web/src/locales/zh-tw.json b/web/src/locales/zh-tw.json index 8e31c29..9e6fd38 100644 --- a/web/src/locales/zh-tw.json +++ b/web/src/locales/zh-tw.json @@ -163,6 +163,7 @@ "emailPlaceholder": "例如:john.doe@example.com", "namePlaceholder": "例如:john.doe", "optional": "選填", + "nameDescription": "IMAP 連線使用者名稱。如果您使用完整的電子郵件地址作為連線使用者名稱,請將此欄位留空。", "emailCannotBeModified": "編輯時無法修改電子郵件帳號地址。", "addAccount": "新增帳號", "updateAccount": "更新帳號", diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index 07695a9..5a949ed 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -163,6 +163,7 @@ "emailPlaceholder": "例如:john.doe@example.com", "namePlaceholder": "例如:john.doe", "optional": "可选", + "nameDescription": "IMAP 连接用户名。如果您使用完整的电子邮件地址作为连接用户名,请将此字段留空。", "emailCannotBeModified": "编辑时无法修改邮箱账户地址。", "addAccount": "添加账户", "updateAccount": "更新账户",