Draft: Full UUID support

Merged Ruben De Smet requested to merge uuid into master

Mixed UUID and E164 addresses lead to unreceivable messages and corrupted sessions: a received message would trigger the creation of a UUID record, and sending a message would create a parallel E164 record. This set of patches aims to fix this bug.

This therefore fixes #80 (closed)

  • Use the strongly typed ServiceAddress in libsignal-service, merge upstream.
  • Database migrations #39 (closed) !101 (merged)
    • Add a column to store the source UUID. A full database schema clean-up is only planned by %v1.0.0: cleaned and refactored, but this means we also need to:
    • Clean-up the database schema a bit, to support and use the pure auto-generated schema.rs.
    • Consider making a custom UUID type in SQLite that simply encapsulates a TEXT, for even better type checking. #276 (closed)
    • Create some dummy data in an integration test to check whether migrations actually work.
      • Messages in groups (both sending and receiving)
      • Messages in 1:1 sessions (both sending and receiving)
  • Force-migration of UUID
    • The whoami-call, to update the local UUID config (!63 (merged))
    • Profile fetching on existing sessions
    • On sending a message, fill the whole SenderAddress struct
  • Ensure all sessions get correctly deleted on EndSession #114 (closed)
  • We can at once solve https://gitlab.com/rubdos/whisperfish/-/issues/74 (patch out the quirks) by storing e164 sessions quirked, but storing new UUID sessions un-quirked.
Edited by Ruben De Smet