Skip to content

Commit dfb79de

Browse files
committed
fix: Lowercase address in add_transport()
1 parent 1379821 commit dfb79de

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

deltachat-jsonrpc/src/api.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -485,7 +485,7 @@ impl CommandApi {
485485
/// - [Self::delete_transport()] to remove a transport.
486486
async fn add_transport(&self, account_id: u32, param: EnteredLoginParam) -> Result<()> {
487487
let ctx = self.get_context(account_id).await?;
488-
ctx.add_transport(&param.try_into()?).await
488+
ctx.add_transport(&mut param.try_into()?).await
489489
}
490490

491491
/// Adds a new email account as a transport

deltachat-rpc-client/src/deltachat_rpc_client/account.py

+6
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,12 @@ def add_transport(self, params):
115115
"""Add a new transport."""
116116
yield self._rpc.add_transport.future(self.id, params)
117117

118+
@futuremethod
119+
def list_transports(self):
120+
"""Add a new transport."""
121+
transports = yield self._rpc.list_transports.future(self.id)
122+
return transports
123+
118124
def bring_online(self):
119125
"""Start I/O and wait until IMAP becomes IDLE."""
120126
self.start_io()

deltachat-rpc-client/tests/test_something.py

+24-1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,29 @@ def test_configure_starttls(acfactory) -> None:
7474
assert account.is_configured()
7575

7676

77+
def test_lowercase_address(acfactory) -> None:
78+
addr, password = acfactory.get_credentials()
79+
addr_upper = addr.upper()
80+
account = acfactory.get_unconfigured_account()
81+
account.add_transport(
82+
{
83+
"addr": addr_upper,
84+
"password": password,
85+
},
86+
)
87+
assert account.is_configured()
88+
assert addr_upper != addr
89+
assert account.get_config("configured_addr") == addr
90+
assert account.list_transports()[0]["addr"] == addr
91+
92+
for param in [
93+
account.get_info()["used_account_settings"],
94+
account.get_info()["entered_account_settings"],
95+
]:
96+
assert addr in param
97+
assert addr_upper not in param
98+
99+
77100
def test_configure_ip(acfactory) -> None:
78101
addr, password = acfactory.get_credentials()
79102
account = acfactory.get_unconfigured_account()
@@ -115,7 +138,7 @@ def test_list_transports(acfactory) -> None:
115138
"imapUser": addr,
116139
},
117140
)
118-
transports = account._rpc.list_transports(account.id)
141+
transports = account.list_transports()
119142
assert len(transports) == 1
120143
params = transports[0]
121144
assert params["addr"] == addr

src/configure.rs

+7-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub(crate) mod server_params;
1616
use anyhow::{bail, ensure, format_err, Context as _, Result};
1717
use auto_mozilla::moz_autoconfigure;
1818
use auto_outlook::outlk_autodiscover;
19-
use deltachat_contact_tools::EmailAddress;
19+
use deltachat_contact_tools::{addr_normalize, EmailAddress};
2020
use futures::FutureExt;
2121
use futures_lite::FutureExt as _;
2222
use percent_encoding::utf8_percent_encode;
@@ -71,9 +71,9 @@ impl Context {
7171
/// Deprecated since 2025-02; use `add_transport_from_qr()`
7272
/// or `add_transport()` instead.
7373
pub async fn configure(&self) -> Result<()> {
74-
let param = EnteredLoginParam::load(self).await?;
74+
let mut param = EnteredLoginParam::load(self).await?;
7575

76-
self.add_transport_inner(&param).await
76+
self.add_transport_inner(&mut param).await
7777
}
7878

7979
/// Configures a new email account using the provided parameters
@@ -105,7 +105,7 @@ impl Context {
105105
/// from a server encoded in a QR code.
106106
/// - [Self::list_transports()] to get a list of all configured transports.
107107
/// - [Self::delete_transport()] to remove a transport.
108-
pub async fn add_transport(&self, param: &EnteredLoginParam) -> Result<()> {
108+
pub async fn add_transport(&self, param: &mut EnteredLoginParam) -> Result<()> {
109109
self.stop_io().await;
110110
let result = self.add_transport_inner(param).await;
111111
if result.is_err() {
@@ -118,7 +118,7 @@ impl Context {
118118
Ok(())
119119
}
120120

121-
async fn add_transport_inner(&self, param: &EnteredLoginParam) -> Result<()> {
121+
async fn add_transport_inner(&self, param: &mut EnteredLoginParam) -> Result<()> {
122122
ensure!(
123123
!self.scheduler.is_running().await,
124124
"cannot configure, already running"
@@ -127,6 +127,7 @@ impl Context {
127127
self.sql.is_open().await,
128128
"cannot configure, database not opened."
129129
);
130+
param.addr = addr_normalize(&param.addr);
130131
let old_addr = self.get_config(Config::ConfiguredAddr).await?;
131132
if self.is_configured().await? && !addr_cmp(&old_addr.unwrap_or_default(), &param.addr) {
132133
bail!("Changing your email address is not supported right now. Check back in a few months!");
@@ -465,6 +466,7 @@ async fn configure(ctx: &Context, param: &EnteredLoginParam) -> Result<Option<&'
465466
let update_device_chats_handle = task::spawn(async move { ctx2.update_device_chats().await });
466467

467468
let configured_param = get_configured_param(ctx, param).await?;
469+
468470
let proxy_config = ProxyConfig::load(ctx).await?;
469471
let strict_tls = configured_param.strict_tls(proxy_config.is_some());
470472

0 commit comments

Comments
 (0)