Skip to content

fix: Encrypt broadcast list in PGP-contacts migration #6858

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: link2xt/pgp-contacts
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 27 additions & 23 deletions src/sql/migrations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1598,8 +1598,30 @@ fn migrate_pgp_contacts(
orphaned_contacts.remove(m);
}
};
let retain_autocrypt_pgp_contacts = || {
old_members
.iter()
.map(|original| {
(
*original,
autocrypt_pgp_contacts
.get(original)
// TODO it's unclear whether we want to do this:
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Btw, can we retain address contacts in encrypted groups, but just send messages to PGP contacts? Then if we learn the contact's key later, the problem goes away. We still can add some info message and anyway, sending a message doesn't guarantee its receipt even for a PGP contact

// We could also make the group unencrypted
// if any peerstate is reset.
// Also, right now, if we have no key at all,
// the member will be silently removed from the group;
// maybe we should at least post an info message?
.or_else(|| {
autocrypt_pgp_contacts_with_reset_peerstate.get(original)
})
.copied(),
)
})
.collect::<Vec<(u32, Option<u32>)>>()
};

let old_and_new_members = match typ {
let old_and_new_members: Vec<(u32, Option<u32>)> = match typ {
// 1:1 chats retain:
// - email-contact if peerstate is in the "reset" state,
// or if there is no PGP-contact that has the right email address.
Expand Down Expand Up @@ -1646,36 +1668,18 @@ fn migrate_pgp_contacts(
})
.collect()
} else {
old_members
.iter()
.map(|original| {
(
*original,
autocrypt_pgp_contacts
.get(original)
// TODO it's unclear whether we want to do this:
// We could also make the group unencrypted
// if any peerstate is reset.
// Also, right now, if we have no key at all,
// the member will be silently removed from the group;
// maybe we should at least post an info message?
.or_else(|| {
autocrypt_pgp_contacts_with_reset_peerstate
.get(original)
})
.copied(),
)
})
.collect()
retain_autocrypt_pgp_contacts()
}
}

// Mailinglist | Broadcast list
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"Broadcast list" should be moved down

140 | 160 => {
140 => {
keep_email_contacts("Mailinglist/Broadcast");
continue;
}

160 => retain_autocrypt_pgp_contacts(),

_ => {
warn!(context, "Invalid chat type {typ}");
continue;
Expand Down
Loading