Skip to content

[Tracking issue] End-to-End encrypted Broadcast Channels #6884

Open
@Hocuri

Description

@Hocuri

Here I will collect all information around implementing broadcast channels, similar to the ones known from Telegram/WhatsApp. As oppsosed to Telegram/WhatsApp, channels will be end-to-end encrypted in Delta Chat. Some other features known from Telegram/WhatsApp will be missing.

Implementation

Show broadcast channels in their own, proper "Channel" chat

I checked all checkboxes which I implemented in a PR, even if it's not merged yet.

Core work (#6901):

  • Add new chat type InBroadcastChannel and OutBroadcastChannel for incoming / outgoing channels, where the former is similar to a Mailinglist and the latter is similar to a Broadcast (which is removed)
    • Consideration for naming: InChannel/OutChannel (without "broadcast") would be shorter, but less greppable because we already have a lot of occurences of channel in the code. Consistently calling them BcChannel/bc_channel in the code would be both short and greppable, but a bit arcane when reading it at first. Opinions are welcome; if I hear none, I'll keep with BroadcastChannel.
  • api: Add create_broadcast_channel(), deprecate create_broadcast_list() (or create_channel() / create_bc_channel() if we decide to switch)
    • Adjust code comments to match the new behavior.
  • ASK Desktop developers what they use is_broadcast field for, and whether it should be true for both outgoing & incoming channels (or look it up myself)
    • I added is_out_broadcast_channel, and deprecated is_broadcast, for now
  • When the user changes the broadcast channel name, immediately show this change on receiving devices
  • Allow to change brodacast channel avatar, and immediately apply it on the receiving device
  • Make it possible to block InBroadcastChannel
  • Make it possible to set the avatar of an OutgoingChannel, and apply it on the receiving side
  • DECIDE whether we still want to use the broadcast icon as the default icon or whether we want to use the letter-in-a-circle
    • We decided to use the letter-in-a-circle for now, because it's easier to implement, and I need to stay in the time plan
  • chat.rs: Return an error if the user tries to modify a InBroadcastChannel
  • Add automated regression tests
  • Grep for broadcast and see whether there is any other work I need to do
  • Bug: Don't show ~ in front of the sender's same in broadcast lists

UI work (deltachat/deltachat-android#3783):

  • Rename "broadcast list" to "channel" or "broadcast channel" both in UI and code (depending on whether it's important to be concise in the particular place). There are new stock strings in which broadcast_list is replaced with channel
  • Adapt to the new chat types InBroadcastChannel and OutBroadcastChannel for incoming / outgoing channels, where the former is similar to a Mailinglist and the latter is similar to a Broadcast (which was removed)
  • Adapt to the new create_broadcast_channel() API

UI Testing:

  • Creating a channel
  • Adding/removing members from a channel
  • Set a channel avatar, and check that receivers see it after sending a message
  • Change the channel name, and check that receivers see it after sending a message
  • On the receiving side of a channel, check that it's not possible to send a message
  • On the receiving side of a channel, check that it's possible to block the chat
  • On the sending side of a channel, check that it's possible to add and remove members, and that the shown texts are correct (e.g. "Remove X from Channel?" instead of "Remove X from Chat?")
  • Both on the receiving and sending side of a channel:
    • In that chat, open the 3-dots menu, and check that things look fine
    • In the chat, check that the subtitle is correct
    • Open the profile page for a channel, and check that things look fine
    • Check that ephemeral messages actually disappear

Symmetrically encrypt broadcast channels

Channels need to be symmetrically encrypted, because if we encrypted them asymetrically, like we do for all other messages:

  • with some technical expertise, it would be possible to find out who the other recipients are
  • when there are a lot of recipients, the messages would be very big.

This will need a lot of work (like new QR codes) which I'll write about later.

  • Talk to some PGP experts that the general idea is fine

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions