Commit Graph

154 Commits

Author SHA1 Message Date
JC Brand
9aca32ad97 Handle errors when sending encrypted groupchat messages
updates #1180
2018-12-21 06:29:21 +01:00
JC Brand
d051085626 Only clear textarea once message was sent
This now requires `sendMessage` to return a boolean to indicate success.
Disable the textarea while message is being sent.
2018-12-21 05:58:22 +01:00
JC Brand
85dab7367b Use pubsub#access_model to publish keys and devices publically 2018-12-21 04:35:28 +01:00
JC Brand
9c05ca9a09 Add test for sending/receiving MUC OMEMO messages
While adding support for MUCs, I refactored converse-omemo somewhat to move functions
out of `overrides` and to use async/await

Updates #1180
2018-12-20 21:51:16 +01:00
JC Brand
f64fdb8088 Render the OMEMO lock icon in MUC toolbars as well
updates #1180
2018-12-20 21:51:16 +01:00
JC Brand
c8d78d744b Fix typo and formatting in user-facing strings 2018-12-19 05:50:06 +01:00
JC Brand
d5485d09ae Always render the OMEMO lock icon
When OMEMO isn't possible, render it as grey.

This change makes OMEMO for MUCs easier, since there I anticipate that
OMEMO support might change dynamically based on who enters/exits the
room.

updates #1180
2018-12-14 11:25:57 +01:00
JC Brand
79bfb45639 Use async/await in MAM code and tests 2018-12-06 13:10:33 +01:00
JC Brand
cd63afcaad Add space following question mark 2018-11-22 09:09:14 +01:00
Christoph Scholz
da5ca0b585 implement XEP-0184: Message Delivery Receipts 2018-11-13 17:13:35 +01:00
JC Brand
3b60ced39c Add a button for regenerating your OMEMO device bundle 2018-11-12 20:29:55 +01:00
JC Brand
fa4c555c44 Use async/await instead of explicit Promise 2018-11-12 14:45:57 +01:00
JC Brand
affafc746c Bugfix. Make sure _devices_promise is a Promise 2018-11-12 12:04:25 +01:00
JC Brand
461ebc0aea Use async/await instead of explicit promises 2018-11-09 17:37:14 +01:00
JC Brand
6904f9a897 Use es2015 modules instead of UMD 2018-10-23 12:25:58 +02:00
cmrd Senya
8ba8eb02fa Update main converse.js package to use @converse/headless
* Update moved dependencies references to @converse/headless
* Remove unused webpack resolve aliases
2018-10-22 12:44:38 +02:00
JC Brand
c8dc7b63b2 Disable OMEMO when the current device is not trusted.
updates #1242
2018-10-18 07:47:25 +02:00
JC Brand
bb78d8519f Use async function instead of explicit promises 2018-10-18 07:03:42 +02:00
JC Brand
029fb6d60b Make sure we have a device to publish before doing so 2018-10-18 00:17:21 +02:00
JC Brand
94a1852b4f Use async function instead of explicit promises 2018-10-17 23:58:11 +02:00
JC Brand
a5a600bade Fixes #1193 Properly handle OMEMO messages without body tag 2018-10-15 23:47:22 +02:00
JC Brand
79b8ed7177 New release 4.0.2 2018-10-02 22:51:01 +02:00
JC Brand
dbfd460125 Don't include additionalData when en/decrypting with crypto.subtle
Otherwise compatibility with Conversations is broken.
Unfortunately this means that OMEMO won't work on Edge, because it
for some reason requires the additionalData.

References:
* https://github.com/conversejs/converse.js/issues/1187#issuecomment-426276243
* https://stackoverflow.com/questions/42933162/web-crypto-api-using-microsoft-edge-38-14393-0-0/42950731

Fixes #1187
2018-10-02 22:07:16 +02:00
JC Brand
e05b7e9de3 OMEMO fixes for Edge. 2018-09-25 13:21:48 +02:00
JC Brand
cfcab80147 Don't inform of unencryptable OMEMO messages unless in debug mode 2018-09-07 15:23:16 +02:00
JC Brand
5f16babebd Fix failing OMEMO test and simplify by using async/await 2018-09-02 14:27:05 +02:00
JC Brand
6f13676ee1 Show OMEMO error messages only in debug mode 2018-08-31 21:33:46 +02:00
JC Brand
1d5cf8eb7c Fix AES-GCM encryption/decryption so that it works with Conversations
Fixes #497
2018-08-31 21:13:33 +02:00
JC Brand
c2184ce8e1 Always create a new session 2018-08-31 18:44:24 +02:00
JC Brand
fc6982ce08 Merge branch 'omemo-debug' 2018-08-31 18:39:01 +02:00
JC Brand
bd1fd7eef1 Key should be AES-128, not AES-256 2018-08-31 18:33:03 +02:00
JC Brand
c2f1b2543f Pass array buffer to libsignal decrypt 2018-08-31 18:24:08 +02:00
JC Brand
c8211085fd Pass array buffer to libsignal encrypt/decrypt methods 2018-08-31 18:10:09 +02:00
JC Brand
6a061b4525 Use raw key format and not jwk. Set correct key size. 2018-08-31 17:15:03 +02:00
JC Brand
ed9afe9afb Only include key and not whole payload from libsignal 2018-08-31 13:57:49 +02:00
JC Brand
34541d6410 Add check before resetting 2018-08-30 13:39:33 +02:00
JC Brand
1dc1c1f98a Properly generate and render fingerprints 2018-08-27 21:02:31 +02:00
JC Brand
3e7c8655ad Add a <store> hint to OMEMO messages.
updates #497
2018-08-27 16:44:19 +02:00
JC Brand
15a4bcd11e Add method to generate missing prekeys
When receiving a PreKeySignalMessage, then a prekey has been chosen and
should now be removed from the list of available prekeys in the bundle,
so that a different device doesn't choose it as well.

AFAICT, libsignal removes the prekey, so it's then up to us to
regenerate it and republish our bundle.

updates #497
2018-08-27 16:43:58 +02:00
JC Brand
ea5144c7e5 Refactor the OMEMOStore to not duplicate prekeys
Before these changes, prekeys were stored in two places, one place that
converse-omemo accessed and one that libsignal accessed and when
libsignal deleted a prekey the other store wasn't updated.

Now we let the methods called by libsignal store/remove prekeys (and the
signed_prekey) in the same place as used by the code in converse-omemo.
2018-08-25 23:22:18 +02:00
JC Brand
7959855891 Move publishBundle to OMEMOStore
updates #497
2018-08-24 16:32:40 +02:00
JC Brand
d784e4a73a Show an icon to indicate that a message is encrypted
updates #497
2018-08-24 16:26:54 +02:00
JC Brand
3eb5e93f81 Finally able to send a message and decrypt it on the other side
Updates #497
2018-08-24 14:40:48 +02:00
JC Brand
2dd5976f65 Fix bugs in the OMEMO store and in the decrypt method.
Updates #497
2018-08-24 13:17:32 +02:00
JC Brand
9e56858aae Remove unnecessary promise wrapper 2018-08-24 10:51:59 +02:00
JC Brand
7bb7f8f4dc Can now successfully send an encrypted stanza
updates #497
2018-08-23 14:03:16 +02:00
JC Brand
c1123fd6a0 Used wrong registration id and identity key when building a session
updates #497
2018-08-23 14:03:12 +02:00
JC Brand
058905134e Serialize all array buffers to base64 before storing
Array Buffers can't be JSON serialized as is.

updates #497
2018-08-23 14:03:09 +02:00
JC Brand
d4ccf20e7f Update modals when devices get added
updates #497
2018-08-23 14:03:06 +02:00
JC Brand
b17579501f Provide error output to user when encrypted message can't be sent
updates #497
2018-08-23 14:03:00 +02:00
JC Brand
7692a46e17 Nonsencical to wrap a promise in try/catch 2018-08-23 14:02:53 +02:00
JC Brand
069d4a9fae Remove unnecessary promise wrapper
updates #497
2018-08-23 14:02:50 +02:00
JC Brand
fd639e2da6 Remove the active flag for devices.
Instead of setting `active` to `false`, we remove the device entirely
(unless its the current device).

Doing it this way means more fetching of bundles for devices that
disappear and then reappear from a user's devicelist.

However, there might be caching invalidation concerns with just reusing
a cached bundle for a device id that disappeared and then reappears.

Additionally this change simplifies the showing of a contact's device
fingerprints in the modal, since we don't have to take active/inactive
into consideration.

updates #497
2018-08-23 14:02:43 +02:00
JC Brand
781ad3d643 Update to use _converse.config 2018-08-23 09:49:51 +02:00
JC Brand
76a2192afa Singleton models need an id attribute via its getter
Setting it on the model itself is not sufficient and then causes
changes which should be type `update` become type `create`, causing
multiple versions of the model... resulting in chaos.
2018-08-22 23:39:42 +02:00
JC Brand
f01b6c29c8 Collections shouldn't have id attributes
Otherwise the collection's items aren't fetched but it's own properties.
The way to persistently remove items from a collection is to destroy
them, NOT to call `remove`.
2018-08-22 19:26:38 +02:00
JC Brand
5ded22207b identity_key should be stored as base64, not array buffer 2018-08-22 18:32:31 +02:00
JC Brand
fa0e7aeff5 Updated so that own device is properly created and published
Based on live testing. Updated tests accordingly.
2018-08-22 18:16:36 +02:00
JC Brand
75bd24c19e Update device lists in modals if devices get removed 2018-08-22 14:33:09 +02:00
JC Brand
21a04d9de5 Avoid unnecessary promise-wrapping 2018-08-22 14:33:08 +02:00
JC Brand
de077ba9af Various small fixes while trying to get it to work 2018-08-22 14:33:08 +02:00
JC Brand
24d86c7edd Wrap in try/catch, otherwise handler gets removed upon error 2018-08-22 14:33:08 +02:00
JC Brand
235b24d1d4 Bugfixes.
- Use sizzle xmlns selector (which doesn't work with `querySelector`)
- PEP Subscription didn't have `+` before `notify`
2018-08-22 14:33:08 +02:00
JC Brand
3ec426e11d Don't render OMEMO stuff in profile modal if OMEMO's not enabled 2018-08-21 18:03:34 +02:00
JC Brand
a06d2c494a Implement own device removal via stanza 2018-08-21 17:35:17 +02:00
JC Brand
26e936583f Add devices section to own profile modal
Allow for devices to be removed.
2018-08-21 09:28:16 +02:00
JC Brand
8cc69ee5fb No need for a toJSON call, it's already an object 2018-08-20 11:17:26 +02:00
JC Brand
7d1db66056 Less explicit Promise declarations.
It's usually not necessary to wrap a promise inside another one, instead
the original promise can just be returned.
2018-08-20 11:16:06 +02:00
JC Brand
e7f211bacf Avoid an unnecessary promise and create message as soon as possible
under non-OMEMO circumstances. Otherwise, when messages are fetched in
bulk via MAM, then a message referring to a previous one (e.g.
a correction) may be processed before the message being referred to has
been created.
2018-08-19 10:32:43 +02:00
JC Brand
9a7f56db7d Fix format of stanza that queries for devices. 2018-08-19 10:09:43 +02:00
JC Brand
4ed43854bd Bugfix. Items need to go inside the list 2018-08-18 18:25:52 +02:00
JC Brand
c4ac73cc88 prekey id must be an int. 2018-08-18 18:24:29 +02:00
JC Brand
2884549bb3 Test decryption of incoming OMEMO message
updates #497
2018-08-04 23:49:01 +02:00
JC Brand
713f49453f Working example of AES-GCM encryption and decryption
with key import and export.

updates #497
2018-08-04 21:32:08 +02:00
JC Brand
f2c283c907 More work on decrypting messages 2018-08-04 19:41:06 +02:00
JC Brand
be0eaecff9 Parse incoming OMEMO encrypted messages 2018-08-04 09:26:23 +02:00
JC Brand
bb1fdd843a Use ternary operator to make more compact 2018-08-04 09:07:59 +02:00
JC Brand
e774e9d1af Test that own devices (from other clients) get included
when sending out encrypted messages.

updates #497
2018-07-28 16:36:56 +02:00
JC Brand
a3593dbc7d Implement and test sending of encrypted messages
updates #497
2018-07-28 15:37:36 +02:00
JC Brand
bcd6845756 Show fingerprints in the user details modal
updates #497
2018-07-25 11:33:16 +02:00
JC Brand
114e46dfab Fix broken test and refactor slightly. updates #497 2018-07-22 10:33:57 +02:00
JC Brand
b80a77a21c Include signedPreKeySignature in published bundle
updates #497
2018-07-21 21:53:31 +02:00
JC Brand
118a84f111 Bugfix. Make sure outgoing messages all have unique ids 2018-07-01 12:01:07 +02:00
JC Brand
648c0387dd Refactor message sending
so that we don't have to always wait for stanza creation.
We only need to wait when OMEMO is active, so we keep the waiting
contained to that usecase.
2018-07-01 11:45:58 +02:00
JC Brand
6785eff4a7 Merge branch 'master' into converse-omemo 2018-07-01 11:44:04 +02:00
JC Brand
d484320c09 Test that bundles can be updated via PEP
Fix bugs in the process

udpates #497
2018-05-23 12:51:01 +02:00
JC Brand
ddd0ef8e20 Test that device lists can get updated via PEP
Fix various bugs in the process.

updates #497
2018-05-23 12:51:01 +02:00
JC Brand
41db49ffca Initial code for handling a bundle update via PEP
udpates #497
2018-05-23 12:51:01 +02:00
JC Brand
839210f87c Fetch and parse bundles, then generate sessions for them
udpates #497
2018-05-23 12:51:01 +02:00
JC Brand
5b9f81099b More OMEMO work
- Implement storage interface required by libsignal
- Add some skeleton code for building sessions and sending encrypted messages

updates #497
2018-05-23 12:51:01 +02:00
JC Brand
f906761dc0 Initial work on sending a different stanza for OMEMO messages
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
a99e7a317e Change lock icon when clicking the toggle
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
61dcebbbf6 When generating a device id, check whether it already exists
and if so, generate a new one.

To do so we have to change the order of events.

1. first we fetch our device list
2. then we generate our bundle info (if necessary)
3. then we update our device list (if necessary)
4. then we publish our bundle

updates #497
2018-05-23 12:51:01 +02:00
JC Brand
fd3bb570cd Add an omemo_active flag on the chatbox
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
9645641505 Add own device to the server-stored devicelist
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
281865d9b1 Based on feedback from @iNPUTmice, no need to check for PEP support
Since you can still start OMEMO sessions with contacts without it, they
just can't create sessions with you.
2018-05-23 12:51:01 +02:00
JC Brand
09eb1731b5 Add code to generate and publish our bundle and update the test
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
6042c233bc Add test that the OMEMO toolbar button renders
Fix and improve accordingly. updates #497
2018-05-23 12:51:01 +02:00
JC Brand
2f149a0ea2 Fetch devices upon devicelist creation
updates #497
2018-05-23 12:51:01 +02:00
JC Brand
0c50808b65 Add missing declaration and don't run OTR tests
Add 3rd party dependencies

updates #497
2018-05-23 12:51:01 +02:00