mirror of
https://github.com/chatmail/core.git
synced 2026-08-11 01:32:47 +03:00
Make sure that we can have multiple addresses in the future
This commit is contained in:
18
src/qr.rs
18
src/qr.rs
@@ -56,8 +56,8 @@ pub enum Qr {
|
||||
/// Fingerprint of the contact key as scanned from the QR code.
|
||||
fingerprint: Fingerprint,
|
||||
|
||||
/// The inviter's address.
|
||||
addr: ContactAddress,
|
||||
/// The inviter's addresses.
|
||||
addrs: Vec<String>,
|
||||
|
||||
/// Invite number.
|
||||
invitenumber: String,
|
||||
@@ -83,8 +83,8 @@ pub enum Qr {
|
||||
/// Fingerprint of the contact key as scanned from the QR code.
|
||||
fingerprint: Fingerprint,
|
||||
|
||||
/// The inviter's address.
|
||||
addr: ContactAddress,
|
||||
/// The inviter's addresses.
|
||||
addrs: Vec<String>,
|
||||
|
||||
/// Invite number.
|
||||
invitenumber: String,
|
||||
@@ -114,8 +114,8 @@ pub enum Qr {
|
||||
/// Fingerprint of the contact's key as scanned from the QR code.
|
||||
fingerprint: Fingerprint,
|
||||
|
||||
/// The inviter's address.
|
||||
addr: ContactAddress,
|
||||
/// The inviter's addresses.
|
||||
addrs: Vec<String>,
|
||||
|
||||
/// Invite number.
|
||||
invitenumber: String,
|
||||
@@ -572,7 +572,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result<Qr> {
|
||||
grpid,
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs: vec![addr.to_string()],
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
@@ -609,7 +609,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result<Qr> {
|
||||
grpid,
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs: vec![addr.to_string()],
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
@@ -635,7 +635,7 @@ async fn decode_openpgp(context: &Context, qr: &str) -> Result<Qr> {
|
||||
Ok(Qr::AskVerifyContact {
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs: vec![addr.to_string()],
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
|
||||
@@ -741,7 +741,7 @@ pub(crate) async fn handle_securejoin_handshake(
|
||||
async fn insert_into_smtp(
|
||||
context: &Context,
|
||||
rfc724_mid: &str,
|
||||
recipient: &str,
|
||||
recipients: &str,
|
||||
rendered_message: String,
|
||||
msg_id: MsgId,
|
||||
) -> Result<(), Error> {
|
||||
@@ -750,7 +750,7 @@ async fn insert_into_smtp(
|
||||
.execute(
|
||||
"INSERT INTO smtp (rfc724_mid, recipients, mime, msg_id)
|
||||
VALUES (?1, ?2, ?3, ?4)",
|
||||
(&rfc724_mid, &recipient, &rendered_message, msg_id),
|
||||
(&rfc724_mid, &recipients, &rendered_message, msg_id),
|
||||
)
|
||||
.await?;
|
||||
Ok(())
|
||||
|
||||
@@ -69,8 +69,10 @@ pub(super) async fn start_protocol(context: &Context, invite: QrInvite) -> Resul
|
||||
.await?;
|
||||
let has_up_to_date_key = if let Some(public_key_bytes) = public_key_bytes {
|
||||
let public_key = SignedPublicKey::from_slice(&public_key_bytes)?;
|
||||
let addrs = addresses_from_public_key(&public_key);
|
||||
addrs.is_some_and(|addrs| addrs.iter().any(|a| a == invite.addr()))
|
||||
let addrs_in_key = addresses_from_public_key(&public_key);
|
||||
// The key is up to date if it contains all the addresses from the QR code:
|
||||
addrs_in_key
|
||||
.is_some_and(|addrs_in_key| invite.addrs().iter().all(|a| addrs_in_key.contains(a)))
|
||||
} else {
|
||||
false
|
||||
};
|
||||
@@ -319,7 +321,7 @@ pub(crate) async fn send_handshake_message(
|
||||
if invite.is_v3() && matches!(step, BobHandshakeMsg::Request) {
|
||||
// Send a minimal symmetrically-encrypted vc-request-pubkey message
|
||||
let rfc724_mid = create_outgoing_rfc724_mid();
|
||||
let recipient = invite.addr();
|
||||
let recipients = invite.addrs().join(" ");
|
||||
let alice_fp = invite.fingerprint().hex();
|
||||
let auth = invite.authcode();
|
||||
let shared_secret = format!("securejoin/{alice_fp}/{auth}");
|
||||
@@ -335,7 +337,7 @@ pub(crate) async fn send_handshake_message(
|
||||
.await?;
|
||||
|
||||
let msg_id = message::insert_tombstone(context, &rfc724_mid).await?;
|
||||
insert_into_smtp(context, &rfc724_mid, recipient, rendered_message, msg_id).await?;
|
||||
insert_into_smtp(context, &rfc724_mid, &recipients, rendered_message, msg_id).await?;
|
||||
context.scheduler.interrupt_smtp().await;
|
||||
} else {
|
||||
let mut msg = Message {
|
||||
|
||||
@@ -18,7 +18,8 @@ pub enum QrInvite {
|
||||
Contact {
|
||||
contact_id: ContactId,
|
||||
fingerprint: Fingerprint,
|
||||
addr: String,
|
||||
#[serde(default)]
|
||||
addrs: Vec<String>,
|
||||
invitenumber: String,
|
||||
authcode: String,
|
||||
#[serde(default)]
|
||||
@@ -27,7 +28,8 @@ pub enum QrInvite {
|
||||
Group {
|
||||
contact_id: ContactId,
|
||||
fingerprint: Fingerprint,
|
||||
addr: String,
|
||||
#[serde(default)]
|
||||
addrs: Vec<String>,
|
||||
name: String,
|
||||
grpid: String,
|
||||
invitenumber: String,
|
||||
@@ -38,7 +40,8 @@ pub enum QrInvite {
|
||||
Broadcast {
|
||||
contact_id: ContactId,
|
||||
fingerprint: Fingerprint,
|
||||
addr: String,
|
||||
#[serde(default)]
|
||||
addrs: Vec<String>,
|
||||
name: String,
|
||||
grpid: String,
|
||||
invitenumber: String,
|
||||
@@ -96,11 +99,11 @@ impl QrInvite {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn addr(&self) -> &str {
|
||||
pub(crate) fn addrs(&self) -> &Vec<String> {
|
||||
match self {
|
||||
QrInvite::Contact { addr, .. } => addr,
|
||||
QrInvite::Group { addr, .. } => addr,
|
||||
QrInvite::Broadcast { addr, .. } => addr,
|
||||
QrInvite::Contact { addrs, .. } => addrs,
|
||||
QrInvite::Group { addrs, .. } => addrs,
|
||||
QrInvite::Broadcast { addrs, .. } => addrs,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,14 +116,14 @@ impl TryFrom<Qr> for QrInvite {
|
||||
Qr::AskVerifyContact {
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs,
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
} => Ok(QrInvite::Contact {
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr: addr.to_string(),
|
||||
addrs,
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
@@ -130,14 +133,14 @@ impl TryFrom<Qr> for QrInvite {
|
||||
grpid,
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs,
|
||||
invitenumber,
|
||||
authcode,
|
||||
is_v3,
|
||||
} => Ok(QrInvite::Group {
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr: addr.to_string(),
|
||||
addrs,
|
||||
name: grpname,
|
||||
grpid,
|
||||
invitenumber,
|
||||
@@ -149,7 +152,7 @@ impl TryFrom<Qr> for QrInvite {
|
||||
grpid,
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr,
|
||||
addrs,
|
||||
authcode,
|
||||
invitenumber,
|
||||
is_v3,
|
||||
@@ -158,7 +161,7 @@ impl TryFrom<Qr> for QrInvite {
|
||||
grpid,
|
||||
contact_id,
|
||||
fingerprint,
|
||||
addr: addr.to_string(),
|
||||
addrs,
|
||||
authcode,
|
||||
invitenumber,
|
||||
is_v3,
|
||||
|
||||
Reference in New Issue
Block a user