Rather than throw an error, just log call messages and drop them. This way we
distinguish them from incorrectly encoded content messages or new types of
messages we don't support yet, and don't insert unnecessary red flags and
stacktraces in debug logs.
// FREEBIE
We can't run our tests in a standalone server anymore, so no need for
connect.
Similarly, sauce labs is no longer necessary because all of our tests
are run locally inside of Electron.
FREEBIE
- Logging is available in main process as well as renderer process, and
entries all go to one set of rotating files. Log entries in the
renderer process go to DevTools as well as the console. Entries from
the main process only show up in the console.
- We save three days of logs, one day per file in %userData%/logs
- The 'debug' object store is deleted in a new database migration
- Timestamps and level included in the new log we generate for publish
as well as the devtools
- The bunyan API is exposed via windows.log (providing the ability to
log at different levels, and save objects instead of just text), so we
can move our code to it over time.
FREEBIE
Fix extended periods of not receiving messages on Linux (#1497)
Fix crash on non-file drag/drop events (#1498)
Dev:
- yarn install now builds electron dependencies automatically
(#1491)
- Docs are refreshed for the new world of Electron (#1491)
- Update our release scripts to match changes in electron-builder
(#1484)
- Additional logging when we can't decrypt a user's profile (#1483)
- Remove images/emoji directory (#1485)
FREEBIE
ConversationView responds to drag/drop events by forwarding them to its file
input. The file input stops propagation and handles the event only if the data
transfer is type file. This means that any other data type (text, img, etc...)
causes an recursive loop of event propagation, eventually resulting in logging a
"RangeError: Maximum call stack size exceeded".
Fix by only forwarding files to the file input.
// FREEBIE
Found a number of 'Illegal buffer' errors in an Electron log submitted
today. As far as I can tell, these same profiles are succeedig for me,
so it's time to collect more data.
FREEBIE
Update to Emojiset 4.0 (#1482)
Fix unthemed Submit Debug Log dialog (#1479)
Additional logging to help track down socket disconnect problems
(#1469)
Dismiss loading screen if we have network problems (#1466)
Setup:
On network error during setup, show error screen instead of hanging
(#1472)
Allow user to setup new install with pre-profiles mobile device
(#1470)
Ensure that we stay pinned to Windows taskbar on upgrade (#1473)
Ensure we are in the right category on Linux (#1473)
Ensure that we Heavye the right icon in the GNOME taskbar (#1473)
Transifex config specific to electron, updated translations (#1478)
CI:
Bypass often-corrupt node_modules/.bin/grunt.cmd on windows (#1481)
AppVeyor: Reduce build output due to xcopy of all emoji files
(c2c9cd0aa2)
FREEBIE
* Upgrade emoji deps and move to node_modules
Add support for Emoji 3.0 and switch from bower to yarn for managing emoji
dependencies.
// FREEBIE
* Delete old emoji deps
// FREEBIE
* Don't copy emoji on windows
It is no longer necessary since the symlinked image dir is gone.
// FREEBIE
* Update emoji test
// FREEBIE
* Fix emoji tests; remove all overrides of emoji-js functions
FREEBIE
* Add transifex config to git
So we can pull different translation resources from different branches.
// FREEBIE
* Pull the electron strings from transifex
* Update translations
* Update electron-builder and config, grunt-exec, and spellchecker
electron-builder is a major update: ^18.8.1 -> ^19.27.3
Fixes#1463, where we lose the user's decision to pin to taskbar
The other three are all minor changes, but it's generally good to stay
up to date.
FREEBIE
* Add category for our Linux build target
Fixes#1460, though the recommended list of categories doesn't seem to
match what is shown in Linux Mint. Hopefully it understands that
what was previously 'Networking' should now be 'Internet'
Standard list:
https://standards.freedesktop.org/menu-spec/latest/apa.html
FREEBIE
* Add StartupWMClass to .desktop file so GNOME can find running app
Fixes#1432
FREEBIE
Contact profiles support - display avatars and names (#1453)
Audio notes can now be recorded on Windows (#1456)
When window is snap-positioned on windows, no longer automatically
re-position window (#1455)
Ensure that our sound setting applies for all notification types (#1445)
Fix loading screen hang with application is unlinked (#1440)
Fix error dialog on initial load (#1440)
Based on https://github.com/WhisperSystems/Signal-Desktop/releases/tag/v0.43.3
FREEBIE
* Add AES-GCM encryption for profiles
With tests.
* Add profileKey to DataMessage protobuf
// FREEBIE
* Decrypt and save profile names
// FREEBIE
* Save incoming profile keys
* Move pad/unpad to crypto module
// FREEBIE
* Support fetching avatars from the cdn
// FREEBIE
* Translate failed authentication errors
When AES-GCM authentication fails, webcrypto returns a very generic error. The
same error is thrown for invalid length inputs, but our earlier checks in
decryptProfile should rule out those failure modes and leave us safe to assume
that we either had bad ciphertext or the wrong key.
// FREEBIE
* Handle profile avatars (wip) and log decrypt errors
// FREEBIE
* Display profile avatars
Synced contact avatars will still override profile avatars.
* Display profile names in convo list
Only if we don't have a synced contact name.
// FREEBIE
* Make cdn url an environment config
Use different ones for staging and production
// FREEBIE
* Display profile name in conversation header
* Display profile name in group messages
* Update conversation header if profile avatar changes
// FREEBIE
* Style profile names small with ~
* Save profileKeys from contact sync messages
// FREEBIE
* Save profile keys from provisioning messages
For standalone accounts, generate a random profile key.
// FREEBIE
* Special case for one-time sync of our profile key
Android will use a contact sync message to sync a profile key from Android
clients who have just upgraded and generated their profile key. Normally we
should receive this data in a provisioning message.
// FREEBIE
* Infer profile sharing from synced data messages
* Populate profile keys on outgoing messages
Requires that `profileSharing` be set on the conversation.
// FREEBIE
* Support for the profile key update flag
When receiving a message with this flag, don't init a message record, just
process the profile key and move on.
// FREEBIE
* Display profile names in group member list
* Refresh contact's profile on profile key changes
// FREEBIE
* Catch errors on profile save
// FREEBIE
* Save our own synced contact info
Don't return early if we get a contact sync for our own number
// FREEBIE
This adds a new copy:deps task into the overall default task, and it
needs to be run before running the product for the first time, and after
upgrading audio-related deps.
FREEBIE
When clicking on a notification in Windows when a window had been stuck
to one side of the screen using Snap, the window would be repositioned.
Fixes#1453
FREEBIE
This removes our custom notification sound in favor of the system sound, and
ensures that the system sound is disabled if the user unchecks the audio
notification option.
// FREEBIE
* main.js: check for truthiness of mainwindow, not === null
FREEBIE
* background.js: Connect to websocket even if we are unlinked
We know registration isn't done, but it has been done before. So instead
of sitting tight, we connect to the socket to start everything up and
attempt to the websocket once more.
FREEBIE
Rebased on v0.42.3, with two additional changes.
Certificate pinning via node XMLHttpRequest implementation (#1394)
Import: Wait until db writes resolve before saying we're done (#1401)
FREEBIE
* Add certificate pinning on https service requests
Make https requests to the server using node apis instead of browser apis, so we
can specify our own CA list, which contains only our own CA.
This protects us from MITM by a rogue CA.
As a bonus, this let's us drop the use of non-standard ports and just use good
ol' default 443 all the time, at least for http requests.
// FREEBIE
* Make certificateAuthorities an option on requests
Modify node-based xhr implementation based on driverdan/node-XMLHttpRequest,
adding support for setting certificate authorities on each request.
This allows us to pin our master CA for requests to the server and cdn but not
to the s3 attachment server, for instance. Also fix an exception when sending
binary data in a request: it is submitted as an array buffer, and must be
converted to a node Buffer since we are now using a node based request api.
// FREEBIE
* Import node-based xhr implementation
Add a copy of https://github.com/driverdan/node-XMLHttpRequest@86ff70e, and
expose it to the renderer in the preload script.
In later commits this module will be extended to support custom certificate
authorities.
// FREEBIE
* Support "arraybuffer" responseType on requests
When fetching attachments, we want the result as binary data rather than a utf8
string. This lets our node-based XMLHttpRequest honor the responseType property
if it is set on the xhr.
Note that naively using the raw `.buffer` from a node Buffer won't work, since
it is a reuseable backing buffer that is often much larger than the actual
content defined by the Buffer's offset and length.
Instead, we'll prepare a return buffer based on the response's content length
header, and incrementally write chunks of data into it as they arrive.
// FREEBIE
* Switch to self-signed server endpoint
* Log more error info on failed requests
With the node-based xhr, relevant error info are stored in statusText and
responseText when a request fails.
// FREEBIE
* Add node-based websocket w/ support for custom CA
// FREEBIE
* Support handling array buffers instead of blobs
Our node-based websocket calls onmessage with an arraybuffer instead of a blob.
For robustness (on the off chance we switch or update the socket implementation
agian) I've kept the machinery for converting blobs to array buffers.
// FREEBIE
* Destroy all wacky server ports
// FREEBIE