Commit Graph

2172 Commits (cea42bde7d3d36ae4794c7926bd96ce979f10082)

Author SHA1 Message Date
Scott Nonnenberg cea42bde7d
Encryption support for backup and restore
Also moved to the _ prefix in backup.js for all private methods exported
for testing.
7 years ago
Scott Nonnenberg 6d8f4b7b6e
Backup: zipped messages.json, flat attachments dir
Backup creates, in a target directory:
  - An attachments folder, with all attachments, each named for their
    parent message's id - a GUID. If there is more than one attachment
    in a given message,  each attachment beyond the first will end with
    '-N', zero-indexed.
  - A file named messages.zip. It contains exactly what went to disk in
    the original export code, but zipped up.

Export is now only 'light,' and in this new messages.zip format.

Import supports both the new format and the old format. If the target
directory has a messages.zip file, we'll treat it as the new format.

Next up: Encrypting attachments and the messages.zip!
7 years ago
Scott Nonnenberg 153a22f46b
Exclude unnecessary data in export: profiles, replayable errors 7 years ago
Scott Nonnenberg c0c758d459
Backup: All exports are now 'light' exports 7 years ago
Scott Nonnenberg e583434366
Refactor: Move Backup under window.Signal 7 years ago
Scott Nonnenberg 186268a1b1
Remove strange eslint-generated triple-parens 7 years ago
Scott Nonnenberg 81e94c5aa3
Refactor backup.js to use async/await 7 years ago
Scott Nonnenberg c01b343bd4
Code formatting updates for backup.js 7 years ago
Daniel Gasienica c88381efe3 Use `async` / `await` to improve readability 7 years ago
Daniel Gasienica 2642844c27 Rewrite migration 17 without `idb`
We ran into issues when doing async operations inside of an IndexedDB
`onupgradeneeded` handler. The errors were ‘The transaction is not active’ or
‘Transaction has finished’. The following documentation confirmed that
transactions are committed/terminated when control returns to the event loop:

Spec
- https://www.w3.org/TR/IndexedDB/#transaction-lifetime-concept
- https://www.w3.org/TR/IndexedDB/#upgrade-transaction-construct

Stack Overflow
- https://stackoverflow.com/a/11059085
- https://stackoverflow.com/a/27338944

Since the initial database migration is so critical, I decided to avoid `idb`
with promise support for IndexedDB for now, but will reconsider using it for
other tasks in the future to improve readability of IndexedDB code.
7 years ago
Daniel Gasienica db2941cbb0 Measure duration of migration 7 years ago
Daniel Gasienica a619d48fac Update schema version history 7 years ago
Daniel Gasienica 0e20e8e2ea Use `Errors.toLogFormat` 7 years ago
Daniel Gasienica cd3aee962d Upgrade message schema before sending 7 years ago
Daniel Gasienica a5edbf8328 Initialize schema as first step in `upgradeSchema` 7 years ago
Daniel Gasienica 5d927b73e6 Use `while` loop for IDB cursor iteration
Previously, I messily combined promises and callbacks because I thought we
were affected by the microtask issue:
https://github.com/gasi/idb#iteratecursor--iteratekeycursor

ESLint’s `more/no-then` encouraged me to revisit this and it works as expected.
7 years ago
Daniel Gasienica a76a6098c4 Simplify log statement 7 years ago
Daniel Gasienica dbdf6fd880 Run version 17 migration upon startup 7 years ago
Daniel Gasienica 182e6ffe10 Add version 17 migration 7 years ago
Daniel Gasienica 752c8f97e6 🎨 Format ternaries 7 years ago
Daniel Gasienica 8dfaa5619f Prefix private functions with underscore 7 years ago
Daniel Gasienica ed336d31d7 Move schema versioning from `Attachment` to `Message` 7 years ago
Daniel Gasienica b9e9f5e19a 🎨 `withInheritedSchemaVersion` to `inheritSchemaVersion` 7 years ago
Daniel Gasienica df693ade7c Allow `Attachment.fileName` to be `null` 7 years ago
Daniel Gasienica c81ce1dc92 Fix log line 7 years ago
Daniel Gasienica c27746b79e Add `Message.withInheritedSchemaVersion` 7 years ago
Daniel Gasienica e9e46464c2 Add `SchemaVersion` type 7 years ago
Daniel Gasienica add4b11df3 Skip invalid attachments and make function sync 7 years ago
Daniel Gasienica 3dfc823716 Add `Attachment.removeSchemaVersion` 7 years ago
Scott Nonnenberg 256b87aa7a
Refactor newly-added ClearDataView in settings_view.js 7 years ago
Scott Nonnenberg b01b939d15
Clear conversation list when the conversations collection resets 7 years ago
Scott Nonnenberg c760fe29ac
Fix broken storeNames.forEach, since it's not an array 7 years ago
Scott Nonnenberg a728c9efbf
Remove all mention of obsolete safety-number-approval setting 7 years ago
Scott Nonnenberg 26c273618a
Refactor: db tasks to database.js, log delete to modules/logs.js 7 years ago
Scott Nonnenberg 3527740598
Format updates to js/database.js 7 years ago
Scott Nonnenberg 3a151393c5
Move wrapDeferred from background.js to preload.js
It's necessary anywhere that will have to deal with Deferreds.
7 years ago
Scott Nonnenberg 12d9d41548
Move to better database deletion call; clears in-memory caches 7 years ago
Scott Nonnenberg c81d3f5c0b
Allow ConversationController.load() to be called more than once 7 years ago
Scott Nonnenberg 383e02edc4
New section in settings screen, full-screen 'are you sure?' 7 years ago
Scott Nonnenberg 198f356792
Return number (not id) in getNumber, remove unnecessary comment 7 years ago
Scott Nonnenberg 9acb189650
Remove config after unlink, clear db when linked with new number 7 years ago
Daniel Gasienica 8a1bff0fad Remove unused `require` 7 years ago
Daniel Gasienica 43b47fd349 Avoid `ensure-error` for privacy reasons
Example:

```
> node
> const nonError = {foo: 'i-am-private'};
undefined

// before
> util.inspect(nonError);
'{ foo: \'i-am-private\' }'

// after
> nonError.toString()
'[object Object]'
>
```
7 years ago
Daniel Gasienica ea07915e6b Escape special characters in file path 7 years ago
Daniel Gasienica 44b81f68dd Remove privacy redaction from `Errors.toLogFormat` 7 years ago
Daniel Gasienica 49e0850fb2 Extract `Privacy` module
Centralizes how we redact sensitive information.
7 years ago
Daniel Gasienica 0c317c5498 Redact all private information from logs 7 years ago
Daniel Gasienica 0e2f8a8a06 Extract `Errors.redactSensitivePaths` 7 years ago
Daniel Gasienica 33bbb12626 Use `Errors.toLogFormat` in `backgrounds.js` 7 years ago
Daniel Gasienica 3dffdc3f0b Rename `Errors` to `GlobalErrors` for clarity 7 years ago