Commit Graph

838 Commits (8dc098093d95946a8d38a617765c4fbae21be598)

Author SHA1 Message Date
lilia a66195a98f Fix messages stuck in pending state
The unset function, and the series of events/callbacks triggered by its
use, are not as similar to the set/save functions as previously
anticipated, leading to flux in the state of the 'pending' attribute.

Fixes #283

// FREEBIE
10 years ago
lilia 3cbe4f1f46 remove unused argument 10 years ago
lilia 8745424d3a Fix outgoing identity key conflict handling
// FREEBIE
10 years ago
lilia 9f021a9d7f Update notification code to new avatar format 10 years ago
lilia 66ae3689c1 Fix decrypt error handling
This rejection-handler was resolving its promise rather than allowing
the rejection to bubble up.
10 years ago
lilia f8ae5556d9 Fix standalone registration 10 years ago
lilia 6a98fc8278 Reload contacts when resetting a recipients input
Fixes #272

// FREEBIE
10 years ago
lilia f5f4c128f9 Fix tests, let templating handle html escaping
Note: as a Chrome app, we're also protected from xss by the content
security policy.

// FREEBIE
10 years ago
adambar fcc873ffca Trim the message before sending - disable sending whitespace characters only 10 years ago
adambar c20c59add0 Include Ctrl+Enter as one the shortcuts that insert line break instead of submitting the message 10 years ago
adambar 86f7b7adf5 Allow line breaks in messages. Closes issue #291
Line breaks can now be insterted into message box using Shift+Enter or Alt+Enter. Messages with new lines are properly displayed in the conversation view (but only there, to keep inbox clean). The template was modified to allow HTML, but the message itself is sanitized before new line handling is run.
10 years ago
adambar 52857f09ea Fix for conversation & inbox windows closing callbacks never called.
As discussed in similar issue there: https://github.com/GoogleChrome/chromedeveditor/issues/1023 - it is not possible to add onClosed event listener on an 'abstract' current window property, it needs to be set on the particular window instance instead.

Before that change, the clean up function was never actually called, because the listener was never properly attached. That was probably the reason of existence for "panel isn't actually open ... and so we try again." code that was executed if the previous window wasn't cleaned up properly (so actually every time). This code is no longer needed, I guess, as the windows are now cleaned up properly.
10 years ago
lilia 5242108e15 Fix group update avatar handling
The avatar handler was being added to the list of promises too late,
so we were storing the raw avatar protobuf (Long id, bytes key) rather
than the downloaded/decrypted attachment data.

Fixes #280
10 years ago
lilia 5e6145aa46 Mark conversation read on window focus event
Fixes #282

// FREEBIE
10 years ago
lilia 29360fea5c Fixes #275 default group image 10 years ago
lilia feb5e5b068 Display gray # instead of colored + for no-name contacts
For consistency with android.
10 years ago
lilia 4c40861728 Fix reinstalls
Delay saving of new account info until we confirm with the server.
Explicitly delete old account info beforehand.

// FREEBIE
10 years ago
lilia db31835f68 Handle group sync for existing groups
// FREEBIE
10 years ago
lilia 5925c2fe84 Support for group sync
Protocol and handling is all analogous to contact sync: Multiple
GroupDetails structs are packed into a single attachment blob and parsed
on our end. We don't display the synced groups in the conversation list
until a new message is sent to one of them.

// FREEBIE
10 years ago
lilia 3dd8056487 Add error dialog for too many devices 10 years ago
lilia f126e3b21b Work on auth error handling / reinstall 10 years ago
lilia ef8a977f38 Sort contacts by name ignoring case 10 years ago
lilia 2f935dfd5e Add contact sync request protocol 10 years ago
lilia f32ff58953 Add support for device name 10 years ago
lilia 7d568b5092 Fixup auto-expand
* Fix a css bug preventing bottom bar from sticking to the bottom.
* Resize discussion container as a function of the overall window
  height. The previous difference-based method gives the wrong result
  when the window height changes but the bottom-bar height stays the
  same.

// FREEBIE
10 years ago
adambar b80706089c Fix for potential memory leaks 10 years ago
adambar 9c563cf080 Fix for message box auto-sizing behavior on resize; menu z-index fix 10 years ago
adambar da1abd75bf Remove message textarea resize handle; fix resizing after submit 10 years ago
adambar 07ac0ae9cc 239 Auto-expand message area when typing 10 years ago
lilia e26b9bfbc7 Default avatar support
Fixes #264

Implement the equivalent of java's String.hashCode on the conversation model.
Change avatar template and attributes. Use css classes for colors.
10 years ago
lilia 8dc4e34aaf Bug and test fixes for contact sync
Closes #135

// FREEBIE
10 years ago
lilia 6a5f923cac Don't set attributes redundantly
By the time we get here, these should have already been set in
background.js.

// FREEBIE
10 years ago
lilia b0603bc91a Wrap message receiver for minimum api exposure
Initializing a message receiver opens the socket and starts listening
right away rather than requiring a separate call to connect. The only
other publicly accessible method is to query the socket status.

// FREEBIE
10 years ago
lilia 18433419c9 PushMessageContent is now DataMessage 10 years ago
lilia 316838cfe9 Add tests and bug fixes for ContactBuffer 10 years ago
lilia 290283f810 Conversations do not require timestamps
Synced contacts will not include timestamps
10 years ago
lilia 228ffe901d Update json formatting for legacy message requests
Legacy DataMessages are sent using the `body` field, new Content
messages are sent using the `content` field.

// FREEBIE
10 years ago
lilia a833d62a71 Implement sync protocol changes
Update protobuf definitions and refactor message receive and decrypt
codepath to support new protocol, including various flavors of sync
messages (sent messages, contacts, and groups).

Also cleans up background.js and lets libtextsecure internalize
textsecure.processDecrypted and ensure that it is called before handing
DataMessages off to the application.

The Envelope structure now has a generic content field and a
legacyMessage field for backwards compatibility. We'll send outgoing
messages as legacy messages, and sync messages as "content" while
continuing to support both legacy and non-legacy messages on the receive
side until old clients have a chance to transition.
10 years ago
lilia 757bcd4e50 Reset recipient typeahead after selecting a recipient 10 years ago
lilia e9e875766f Group update recipient typeahead excludes exisiting members
Fixes #199

// FREEBIE
10 years ago
lilia 694f801676 Stop hiding inbox instead of closing
This behavior was intended to help keep the websocket alive, but keeping
the inbox window around can cause some stale frontend state. Also we now
have a keepalive alarm to check for new messages once a minute.
10 years ago
lilia 72f16b94ff Polish group update ux
* Show the members list as static elements
* Style the search results as a drop down, mirroring android ux

Fixes #248 // FREEBIE
10 years ago
lilia 23db5802cf Support custom placeholder on recipients input 10 years ago
lilia 9795b26bc1 Supress change event on avatarUrl initialization 10 years ago
lilia ac401c78b3 Fix socket status indicator
It was not correctly reporting the status after a background page reload.
10 years ago
lilia 363c436b33 Handle single-error rejections when sending messages
We can not assume that we will get back an error array.

Closes #258 // FREEBIE
10 years ago
lilia 6e1a41e9cf Update inbox when group avatars change 10 years ago
lilia 583fb98cce Support late-addition of default image to file input
Fixes #256

// FREEBIE
10 years ago
lilia 061d57c95a Fix string vs number comparison
Fix bug in device storage causing duplicate device messages after a 410.
10 years ago
lilia a9549e2e0f Fix 410 handling
We need to close the existing session with an old registrationId.
10 years ago
lilia 7d08e1132d Fix close session 10 years ago
lilia f4a206b266 Scale and crop avatars to 256 square thumbnails.
Fixes #213 // FREEBIE
10 years ago
lilia cdb7fcfbad Pass windows around to let file inputs work 10 years ago
lilia 3d1df790a5 Update the window title when a group title or contact name changes 10 years ago
lilia d26c13b155 Add openInbox link to conversation menu. Fixes #246 10 years ago
lilia 9d688cb761 List views persist sroll offset by percentage
Fixes #188
10 years ago
lilia 590deef063 Decrease auto-scaling size
For better consistency with Android, autoscale images such that the
largest dimension is 1280. Related: #242
10 years ago
lilia a66c879426 Update inbox after destroying a conversation
Fixes #247

// FREEBIE
10 years ago
lilia 3e73282a64 Fix key verification screen 10 years ago
lilia e2eff893d4 Fix 'Delete messages'
Replaces window.confirm with generic promise-based confirmation dialog
functionality available to all views.

// FREEBIE
10 years ago
lilia 8a17953468 Display sent_at timestamps instead of received_at 10 years ago
lilia 3e39271220 Render messages light blue until finished sending // Fixes #219 10 years ago
lilia 405e67c758 Merge inbox and panel controllers
These collections should always be operating with the same model
instances, so let the inbox reset it self from the same in-memory
cache of conversation models used by the conversation windows.
10 years ago
lilia 53a9ab4834 Fix bugs with handling large image attachments
* Avoid infinite loop scaling too-big images
* Don't crash if no file is selected
* Fix file size toast

Fixes #242

// FREEBIE
10 years ago
lilia 585c82aee8 Fix the build 10 years ago
lilia 3eafefe18e Don't display notifications for open windows.
Just update and draw attention to them.

Fixes #238

// FREEBIE
10 years ago
lilia d8f17f9631 Fixes #240
Delete files attached via chrome.fileSystem

// FREEBIE
10 years ago
lilia 9882190bde Wake up once a minute to check for messages
If all the application windows are closed (and not merely hidden), the
background page will go inactive and there's nothing we can do to stop
it. However, we can ask chrome to trigger an alarm once per minute,
which will spin up the background page and check for new messages.

This will effectively keep us alive as long as chrome has open windows
or is running in the background, subject to chrome settings'
Advanced -> System -> Continue running background apps
10 years ago
lilia fa3e1ee94f Window ids should be strings
A warning is issued when a non-string window id was passed to
extension.windows.focus.
10 years ago
lilia 7bf1d41184 Render conversation titles 10 years ago
lilia bc4d31cf72 Fix for inbox sometimes not reappearing
Apparently focusing an app window does not implicitly unhide it.

// FREEBIE
10 years ago
lilia d0a529351c Fix sending messages with no attachments 10 years ago
lilia a5e80e8a5a Really close conversation windows
Only the inbox should hide when closed.
10 years ago
lilia 5d3a2a4cc8 Fix file inputs
As a chrome app we are obligated to use the fileSystem api, and must do
so via the window in which we want to open the dialog.
10 years ago
lilia 39d11d8eb3 Apply custom chrome to conversation windows 10 years ago
lilia 95f8e3921c Keep inbox window open, but allow it to be hidden
As a chrome packaged app, we have to keep at least one window open in
order to maintain our websocket connection in the background page.

This change replaces the system window frame with custom buttons in the
inbox header, such that the 'close' button merely hides the window
rather than unloading it.

Fixes #237
FREEBIE
10 years ago
lilia b83ce7a015 Delay conversation creation til post-decrypt 10 years ago
lilia 12eb553a3f Draw attention to windows on new messages 10 years ago
lilia 0b31823989 Wait for storage on launch 10 years ago
lilia 08878b3dc8 Update inbox after sending a message
Also change the event name to reflect how its being used, and stop
passing the message object around since it is not being used.

// FREEBIE
10 years ago
lilia e9d7864f75 Set conversation type when creating from sync message
When a conversation is created as the result of a sync message, and it
is not a group, we need to set its type to private.

// FREEBIE
10 years ago
lilia 7e8b1319a5 Ignore sync contexts on messages not from ourselves
But process the rest of the message normally.
10 years ago
lilia fdd2eb0d3e Make conversation windows taller 10 years ago
lilia 1b83932a29 Update open conversations on sync messages 10 years ago
lilia 090cc84452 Do not include destination on group sync messages 10 years ago
lilia 1ed0ef5bc3 Process group updates before sync delivery receipts
Because we need to know the group members to find early-arrival
receipts.
10 years ago
lilia 654373d743 Fix null conversationId on group sync messages 10 years ago
lilia 65a6068003 Fix for out-of-order message/receipt arrival
In a multi device world, it's possible to receive a receipt for a sync
message before the sync message actually arrives. In this case we need
to keep the receipt around and the process it when the message shows up.
10 years ago
lilia c4fa2cb935 Fix sync message timestamps 10 years ago
lilia d1bcafad65 Update libaxolotl 10 years ago
lilia 16e9f03d8f Check for registration when launched 10 years ago
lilia f6a326577d Crash fixes for chromium
My current version of chromium inexplicably exposes a crippled version
of chrome.browserAction even though we are now a packaged app and should
not have that functionality exposed to us anymore. This results in some
errors to the tune of "property 'foo' of undefined".

It also doesn't support the innerBounds property for window creation,
only the older (deprecated) bounds property.
10 years ago
lilia 029c9754f0 Fix tests 10 years ago
lilia 5a7ab54ee6 Fix registration page
Also make it accessible by providing a mode argument to the install
function. Previously developers could just edit the url but we no longer
have the address bar as an app window, so now they must close the
default installer and run the following from the background page
console: `extension.install('standalone')`.

In the production build, this should result in an error since it is not
supported / the register page is not included there.
10 years ago
lilia 7afd0a02e8 Convert beforeunload listeners 10 years ago
lilia 002ff45312 Adapt window management to chrome app window api
Appify tabs, windows, browserAction

Port the extension.windows.focus function to new window api and
generalize its error handling in the case where the requested window
does not exist. An error will be passed to the callback.

Port extension.browserAction and rename it to the more generic
extension.onLaunched.

Use of the id option when opening a window ensures that attempting to
open a duplicate window merely focuses the existing window.

Finally, after registration, close the options window and open the
inbox.

Port extension.remove
10 years ago
lilia ddbaf87741 Load notifications script from background page 10 years ago
lilia f90f6328dd Don't resolve the background page til storage is ready 10 years ago
lilia 704c6ce779 Signaling key is now an array buffer 10 years ago
lilia 3f37cd21a9 Remove remaining traces of localStorage
Add window.storage to the background page, which loads all data from the
'items' store in indexeddb, caching them in memory for synchronous
access, then override textsecure storage to use that in memory store.
10 years ago
lilia a3c5b0959f Port textsecure.storage.impl to indexeddb 10 years ago
lilia d230df5622 Move local identitykey and registrationid to indexeddb 10 years ago
lilia fe1d78b5fa Load protobufs asynchronously. Fixes #223 10 years ago
lilia b8c5bc293c App windows cannot be refreshed 10 years ago
lilia 76e170686a Make getBackground async 10 years ago
lilia 7799bef86c Tweak key conflict error messages
Be generic, because sometimes it's not TextSecure, but Signal.
10 years ago
lilia 915612114b Remove general get/put/remove methods from AxolotlStore 10 years ago
lilia d0e262d7cb AxolotlStore stores groups in indexeddb 10 years ago
lilia 359b4a15a2 Move group storage to axolotl store
Add async get/put/removeGroup to axolotl store and let libtextsecure
use it for group state storage.
10 years ago
lilia 748f32022a Fix up refreshGroup 10 years ago
lilia f774047935 Make libtextsecure group storage asynchronous 10 years ago
lilia c26c6fc317 Store sessions by encodedNumber
Storing multiple sessions in a single indexeddb record is prone to
clobbering data due to races between requests to update multiple device
sessions for the same number, since you have to read the current state
of the device->session map and update it. Splitting the records up makes
it so that those updates can be made in parallel. Selecting all the
sessions for a given number can still be done efficiently thanks to
indexeddb range queries.
10 years ago
lilia 37c496f4f0 Close the provisioning socket 10 years ago
lilia 43d6efcd9e Don't save device objects to disk
Generate them from session and identity data. Save/delete pending prekey
data in an in-memory store and attach it to outgoing device objects.
10 years ago
lilia f18795a253 Add removeSession 10 years ago
lilia f413f03a6b Add getDeviceIds to axolotlstore
And add tests for getDeviceIds and removeAllSessions
10 years ago
lilia 121671c99f Store identity keys in indexeddb
Let device storage request them from axolotl store rather than storing a
copy.
10 years ago
lilia 7eda48f755 Move Session Storage to indexedDB 10 years ago
lilia 20ebc3f890 Move identity key storage functions to axolotl store 10 years ago
lilia f38b18ef63 Move Session storage to axolotlstore 10 years ago
lilia 9de1572ba6 Convert all storage.devices methods to be asynchronous 10 years ago
lilia 71715c95bc Async remove identity 10 years ago
lilia 26f1aa4db5 Async putSessionsForDevice 10 years ago
lilia 666f6baaca Async getSessionsForNumber 10 years ago
lilia 9e7d8c0a08 Rename textsecure.api and make it internal-only 10 years ago
lilia 45a61780af Fixup refreshPreKeys and call it whenever a prekey is deleted 10 years ago
lilia 7d0aeac8cb Use a worker to facilitate key generation 10 years ago
lilia f465bdddbf Add textsecure.AccountManager
This class should be used for account registration and for refreshing
prekeys for your account.
10 years ago
lilia a960acacc6 Add textsecure.refreshKeys
This helper checks the server for the number of remaining prekeys, then
generates more if there are fewer than 10 remaining.

// FREEBIE
10 years ago
lilia 96eafc7750 Integrate libaxolotl async storage changes
* Session records are now opaque strings, so treat them that way:
  - no more cross checking identity key and session records
  - Move hasOpenSession to axolotl wrapper
  - Remote registration ids must be fetched async'ly via protocol wrapper
* Implement async AxolotlStore using textsecure.storage
* Add some db stores and move prekeys and signed keys to indexeddb
* Add storage tests
* Rename identityKey storage key from libaxolotl25519KeyidentityKey to
  simply identityKey, since it's no longer hardcoded in libaxolotl
* Rework registration and key-generation, keeping logic in libtextsecure
  and rendering in options.js.
* Remove key_worker since workers are handled at the libaxolotl level
  now
10 years ago
lilia 8304aa903a Update libaxololt to a087b9e746e67995f16e077183cc0 10 years ago
lilia 2ff954d2f8 Fix api.js 10 years ago
lilia cc6a44f35d Fix tests 10 years ago
lilia da34b8e0f8 Rename textsecure.websocket and make it internal-only 10 years ago
lilia 89c24cd2fa Move throwHumanError to api.js
It is only used there.
10 years ago
lilia 36b1e87214 Add textsecure.MessageReceiver
Encapsulate the websocket resources and socket setup process in a
friendly OO class. The MessageReceiver constructor expects an instance
of EventTarget on which to fire message events asynchronously. The
provider of the EventTarget can then add/remove listeners as desired.
10 years ago
lilia bf2bf4cfd9 Remove redirect to index from registration.done() 10 years ago
lilia 6f3de68834 Move browserAction call 10 years ago
lilia 37e09da1cc Remove unsued argument from getDeviceObject
Last usage of the `returnIdentityKey` argument was removed in 8b9a16852.
10 years ago
lilia bdecf5cc44 Generate key_worker.js
Instead of calling importScripts, which is prone to relative path
issues, generate the worker script with everything it needs included.
10 years ago
lilia 7af42a27c5 Fix registerKeys using array indices for key ids
preKeys is an array whose indices may or may not be keyId-based. Since
we have an inline keyId property, use that instead.
10 years ago
lilia 00989962d8 Rename worker script file 10 years ago
lilia de65f9e6bd Add missing resolve 10 years ago
Patrick Connolly b5d724ffc3 Replaced frontend getString calls broken in d3c158f.
Closes #224
10 years ago
lilia 90c742d57c More error logging 10 years ago
lilia 25224da12e Fix unsafe eval warning on registration page 10 years ago
lilia 23feeecbcf Wrap libts, don't leak into global namespace 10 years ago
lilia c51773ab0e More helpful error logging 10 years ago
lilia 319332bb6f Add missing semicolon
:[
10 years ago
lilia 5d4298697c Use view.$ shorthand for scoped jquery searches
Wish I'd noticed that one earlier. http://backbonejs.org/#View-dollar
10 years ago