mirror of
https://github.com/chatmail/core.git
synced 2026-04-18 22:16:30 +03:00
fix: Lowercase address in add_transport() (#6805)
This commit is contained in:
@@ -489,7 +489,7 @@ impl CommandApi {
|
|||||||
param: EnteredLoginParam,
|
param: EnteredLoginParam,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let ctx = self.get_context(account_id).await?;
|
let ctx = self.get_context(account_id).await?;
|
||||||
ctx.add_or_update_transport(¶m.try_into()?).await
|
ctx.add_or_update_transport(&mut param.try_into()?).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Deprecated 2025-04. Alias for [Self::add_or_update_transport()].
|
/// Deprecated 2025-04. Alias for [Self::add_or_update_transport()].
|
||||||
|
|||||||
@@ -115,6 +115,12 @@ class Account:
|
|||||||
"""Add a new transport."""
|
"""Add a new transport."""
|
||||||
yield self._rpc.add_or_update_transport.future(self.id, params)
|
yield self._rpc.add_or_update_transport.future(self.id, params)
|
||||||
|
|
||||||
|
@futuremethod
|
||||||
|
def list_transports(self):
|
||||||
|
"""Returns the list of all email accounts that are used as a transport in the current profile."""
|
||||||
|
transports = yield self._rpc.list_transports.future(self.id)
|
||||||
|
return transports
|
||||||
|
|
||||||
def bring_online(self):
|
def bring_online(self):
|
||||||
"""Start I/O and wait until IMAP becomes IDLE."""
|
"""Start I/O and wait until IMAP becomes IDLE."""
|
||||||
self.start_io()
|
self.start_io()
|
||||||
|
|||||||
@@ -74,6 +74,29 @@ def test_configure_starttls(acfactory) -> None:
|
|||||||
assert account.is_configured()
|
assert account.is_configured()
|
||||||
|
|
||||||
|
|
||||||
|
def test_lowercase_address(acfactory) -> None:
|
||||||
|
addr, password = acfactory.get_credentials()
|
||||||
|
addr_upper = addr.upper()
|
||||||
|
account = acfactory.get_unconfigured_account()
|
||||||
|
account.add_or_update_transport(
|
||||||
|
{
|
||||||
|
"addr": addr_upper,
|
||||||
|
"password": password,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
assert account.is_configured()
|
||||||
|
assert addr_upper != addr
|
||||||
|
assert account.get_config("configured_addr") == addr
|
||||||
|
assert account.list_transports()[0]["addr"] == addr
|
||||||
|
|
||||||
|
for param in [
|
||||||
|
account.get_info()["used_account_settings"],
|
||||||
|
account.get_info()["entered_account_settings"],
|
||||||
|
]:
|
||||||
|
assert addr in param
|
||||||
|
assert addr_upper not in param
|
||||||
|
|
||||||
|
|
||||||
def test_configure_ip(acfactory) -> None:
|
def test_configure_ip(acfactory) -> None:
|
||||||
addr, password = acfactory.get_credentials()
|
addr, password = acfactory.get_credentials()
|
||||||
account = acfactory.get_unconfigured_account()
|
account = acfactory.get_unconfigured_account()
|
||||||
@@ -115,7 +138,7 @@ def test_list_transports(acfactory) -> None:
|
|||||||
"imapUser": addr,
|
"imapUser": addr,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
transports = account._rpc.list_transports(account.id)
|
transports = account.list_transports()
|
||||||
assert len(transports) == 1
|
assert len(transports) == 1
|
||||||
params = transports[0]
|
params = transports[0]
|
||||||
assert params["addr"] == addr
|
assert params["addr"] == addr
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ pub(crate) mod server_params;
|
|||||||
use anyhow::{bail, ensure, format_err, Context as _, Result};
|
use anyhow::{bail, ensure, format_err, Context as _, Result};
|
||||||
use auto_mozilla::moz_autoconfigure;
|
use auto_mozilla::moz_autoconfigure;
|
||||||
use auto_outlook::outlk_autodiscover;
|
use auto_outlook::outlk_autodiscover;
|
||||||
use deltachat_contact_tools::EmailAddress;
|
use deltachat_contact_tools::{addr_normalize, EmailAddress};
|
||||||
use futures::FutureExt;
|
use futures::FutureExt;
|
||||||
use futures_lite::FutureExt as _;
|
use futures_lite::FutureExt as _;
|
||||||
use percent_encoding::utf8_percent_encode;
|
use percent_encoding::utf8_percent_encode;
|
||||||
@@ -70,9 +70,9 @@ impl Context {
|
|||||||
/// Deprecated since 2025-02; use `add_transport_from_qr()`
|
/// Deprecated since 2025-02; use `add_transport_from_qr()`
|
||||||
/// or `add_or_update_transport()` instead.
|
/// or `add_or_update_transport()` instead.
|
||||||
pub async fn configure(&self) -> Result<()> {
|
pub async fn configure(&self) -> Result<()> {
|
||||||
let param = EnteredLoginParam::load(self).await?;
|
let mut param = EnteredLoginParam::load(self).await?;
|
||||||
|
|
||||||
self.add_transport_inner(¶m).await
|
self.add_transport_inner(&mut param).await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configures a new email account using the provided parameters
|
/// Configures a new email account using the provided parameters
|
||||||
@@ -104,7 +104,7 @@ impl Context {
|
|||||||
/// from a server encoded in a QR code.
|
/// from a server encoded in a QR code.
|
||||||
/// - [Self::list_transports()] to get a list of all configured transports.
|
/// - [Self::list_transports()] to get a list of all configured transports.
|
||||||
/// - [Self::delete_transport()] to remove a transport.
|
/// - [Self::delete_transport()] to remove a transport.
|
||||||
pub async fn add_or_update_transport(&self, param: &EnteredLoginParam) -> Result<()> {
|
pub async fn add_or_update_transport(&self, param: &mut EnteredLoginParam) -> Result<()> {
|
||||||
self.stop_io().await;
|
self.stop_io().await;
|
||||||
let result = self.add_transport_inner(param).await;
|
let result = self.add_transport_inner(param).await;
|
||||||
if result.is_err() {
|
if result.is_err() {
|
||||||
@@ -117,7 +117,7 @@ impl Context {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn add_transport_inner(&self, param: &EnteredLoginParam) -> Result<()> {
|
async fn add_transport_inner(&self, param: &mut EnteredLoginParam) -> Result<()> {
|
||||||
ensure!(
|
ensure!(
|
||||||
!self.scheduler.is_running().await,
|
!self.scheduler.is_running().await,
|
||||||
"cannot configure, already running"
|
"cannot configure, already running"
|
||||||
@@ -126,6 +126,7 @@ impl Context {
|
|||||||
self.sql.is_open().await,
|
self.sql.is_open().await,
|
||||||
"cannot configure, database not opened."
|
"cannot configure, database not opened."
|
||||||
);
|
);
|
||||||
|
param.addr = addr_normalize(¶m.addr);
|
||||||
let old_addr = self.get_config(Config::ConfiguredAddr).await?;
|
let old_addr = self.get_config(Config::ConfiguredAddr).await?;
|
||||||
if self.is_configured().await? && !addr_cmp(&old_addr.unwrap_or_default(), ¶m.addr) {
|
if self.is_configured().await? && !addr_cmp(&old_addr.unwrap_or_default(), ¶m.addr) {
|
||||||
bail!("Changing your email address is not supported right now. Check back in a few months!");
|
bail!("Changing your email address is not supported right now. Check back in a few months!");
|
||||||
|
|||||||
Reference in New Issue
Block a user