Jon Chambers
e9119da040
Retire the (unused!) binary message format
2022-07-28 09:59:00 -04:00
Chris Eager
a6f9409a39
Remove dynamic configuration feature flags; add `DynamicMessagePersisterConfiguration`
2022-07-27 14:19:10 -07:00
Chris Eager
41a113e22c
Stop queue persistence attempt if items aren’t removed from cache
2022-07-27 14:19:10 -07:00
Ravi Khadiwala
36050f580e
Handle duplicate device ids more gracefully
2022-07-27 11:15:32 -05:00
Jon Chambers
dce391a248
Add support for setting PNI-associated registration IDs and identity keys when changing numbers
2022-07-26 15:19:27 -04:00
Jon Chambers
1ba00a66eb
Pass the reason for displacement to presence displacement listeners
2022-07-13 15:30:03 -04:00
Jon Chambers
1dd7d33e23
Simplify `Device` entity
2022-07-13 13:55:20 -04:00
Jon Chambers
e200548e35
Introduce an account change validator
2022-07-13 12:24:39 -04:00
Jon Chambers
fdf7b69996
Remove a temporary workaround for incorrect envelope types from iOS clients
2022-07-13 11:30:52 -04:00
Jon Chambers
92d36b725f
Allow presence keys to expire if not periodically renewed
2022-07-13 11:28:55 -04:00
Ravi Khadiwala
a45d95905e
Be permissive in account-create accept-language
...
Currently, if we fail to parse a user's accept-language in account
creation, creation will fail. While it's a suboptimal experience to get
a verify code in the wrong language, it might be better than not being
able to sign up at all.
2022-07-13 11:22:31 -04:00
Ehren Kret
0fdfdabf2a
merge GroupController into CertificateController
2022-07-01 13:04:24 -05:00
Jon Chambers
a25e967978
Remove spurious mocking
2022-07-01 12:26:22 -05:00
Jon Chambers
38e30c7513
Allow callers to get an expiring profile key credential
2022-07-01 12:26:22 -05:00
Jon Chambers
e38e5fa17d
Allow callers to request a combined group auth credential
2022-07-01 12:26:22 -05:00
Ehren Kret
bf6d3aa324
Fix batching issue that was causing duplication in large queries
2022-06-20 12:41:10 -05:00
Ehren Kret
023ccc6563
Add a unit test for the batch identity check endpoint
2022-06-20 12:32:31 -05:00
Ehren Kret
da49db5b9e
Move batch identity checks off the common fork join pool
2022-06-20 11:07:33 -05:00
Ravi Khadiwala
327eb0219d
Bypass account registration captcha on test devices
2022-06-13 15:01:46 -07:00
gram-signal
a853748303
Revert "Update ChangeNumber to allow reset of registration IDs."
...
This reverts commit 7001ad1445
.
2022-06-09 11:51:50 -06:00
gram-signal
7001ad1445
Update ChangeNumber to allow reset of registration IDs.
2022-06-02 16:37:32 -06:00
Ravi Khadiwala
5cfb133f79
Use redis for abusive hosts autoblock
...
Also delete postgres dependencies that we no longer need
2022-05-31 10:08:10 -05:00
Ehren Kret
5df24edebf
Remove all unused imports remaining in project
2022-05-25 17:15:20 -05:00
Ehren Kret
f5a2efb57c
Clarify hidden static method call
2022-05-25 16:51:12 -05:00
Jon Chambers
cf89e2215c
Fully delete already-expired accounts
2022-05-25 14:19:04 -04:00
Jon Chambers
a4ca1ef1a8
Move `AccountCleanerTest` out of the `test` package; reduce visibility of test-only fields
2022-05-25 14:19:04 -04:00
Fedor Indutny
d31ddb72f3
Optimize message deletion by skipping lookup
2022-05-18 13:02:21 -07:00
Chris Eager
0445adcac3
Conclude `ReportMessageManager` ACI migration
2022-05-11 11:26:24 -07:00
gram-signal
06dd4c5026
Derive username from ACI for CDS{H,I} ( #989 )
...
* Derive username from ACI for CDS{H,I}
* Update sample YAML.
2022-05-02 08:41:38 -06:00
Ehren Kret
391c800bf5
Add gift configuration to subscription controller
2022-04-29 10:14:39 -05:00
Ehren Kret
d94c171d63
Use new style switch statement
2022-04-19 13:35:26 -05:00
Ehren Kret
9e66f8ac11
Add gift badges device capability
2022-04-19 10:33:54 -05:00
gram-signal
473ecbdf2d
Allow primary to set and provide new signed prekeys for linked devices ( #950 )
2022-04-15 12:39:47 -06:00
Chris Eager
7b3703506b
Remove number from `ReportMessageManager#store`
2022-04-13 16:41:32 -04:00
Jon Chambers
5816f76bbe
Add support for getting (limited) profiles by phone number identifier
2022-04-13 16:27:57 -04:00
Jon Chambers
3dc0d0bb92
Revert "Revert "Replace curve25519-java with libsignal-server""
...
This reverts commit c06a5ac96c
.
2022-03-29 12:24:45 -04:00
Jon Chambers
2bb8f92af1
Revert "Revert "Replace zkgroup with libsignal-server""
...
This reverts commit fa3a9570d6
.
2022-03-29 12:24:45 -04:00
Chris Eager
77fd01bd9f
Accept source ACI at `/v1/messages/report`
2022-03-25 14:27:09 -07:00
Jon Chambers
fa3a9570d6
Revert "Replace zkgroup with libsignal-server"
...
This reverts commit 86a09b16ff
.
2022-03-24 12:11:46 -04:00
Jon Chambers
c06a5ac96c
Revert "Replace curve25519-java with libsignal-server"
...
This reverts commit 06a57ef811
.
2022-03-24 12:11:46 -04:00
Jon Chambers
33467b42da
Remove a deprecated/unused field
2022-03-24 10:50:49 -04:00
Jon Chambers
53f17c2baa
Drop the legacy message and relay fields from message entities
2022-03-24 10:50:49 -04:00
Jordan Rose
06a57ef811
Replace curve25519-java with libsignal-server
...
These APIs stemmed from a common source long ago, so there's not much
to change!
2022-03-24 10:50:18 -04:00
Jordan Rose
86a09b16ff
Replace zkgroup with libsignal-server
2022-03-24 10:50:18 -04:00
Ravi Khadiwala
c70d7535b9
Make TURN configuration dynamic
...
Also enables conditionally including more TURN servers for gradual
rollouts
2022-03-23 14:38:02 -05:00
Jon Chambers
2a832d36d7
Remove AcceptNumericOnlineFlagRequestFilter
2022-03-23 14:31:01 -05:00
gram-signal
1578c89475
Only allow primary device to update identity key.
2022-03-22 14:39:04 -06:00
Jon Chambers
f75e616397
Introduce a listener pattern for reported messages
2022-03-22 09:56:27 -04:00
Jon Chambers
c048074c31
Tag captcha attempt metrics with UA platform
2022-03-16 15:00:04 -04:00
Ravi Khadiwala
5a88ff0811
Use the async dynamo client to batch uak updates
2022-03-14 14:02:16 -05:00
Chris Eager
fef37f739b
Remove unused classes and methods
2022-03-10 11:08:38 -05:00
Ravi Khadiwala
1571f14815
Add a feature flag to disable account normalization
2022-03-09 14:03:21 -06:00
Ravi Khadiwala
9cb098ad8a
Add a top-level uak to existing items
...
Items wirtten before we started storing the uak at
the top level only store the uak in the
account blob. The will be updated on account
crawl
2022-03-09 14:03:21 -06:00
Chris Eager
1395dcc0be
Make the enterprise client canonical
2022-03-04 11:44:17 -08:00
Chris Eager
2a68d9095d
Remove transitional and legacy client
2022-03-04 11:44:17 -08:00
Jon Chambers
fe86e15d80
Remove PNI repair code
2022-03-03 10:25:11 -05:00
Jon Chambers
179b4a69eb
Clear one-time pre-keys when PNIs are assigned
2022-03-03 10:24:54 -05:00
Chris Eager
eee6307789
Move score floor to dynamic configuration, add distribution summary
2022-03-02 15:18:33 -08:00
Chris Eager
9fc5002619
Add stories capability
2022-03-02 15:16:21 -08:00
Ravi Khadiwala
faa6ae284a
Add uak as a top level attribute
2022-03-02 10:41:09 -06:00
Dimitris Apostolou
93d06e3f4d
Fix typos
2022-03-01 14:14:52 -08:00
Chris Eager
935e268dec
Parameterize sitekey
2022-03-01 10:40:42 -08:00
Jon Chambers
3a1c716c73
Remove an unused rate limiter
2022-02-25 13:50:17 -08:00
Chris Eager
f3457502a6
Support different v2 captcha actions
2022-02-25 13:49:47 -08:00
Ravi Khadiwala
d3cd1d1b15
Use GetLatestConfiguration in config manager
...
Use StartConfigurationSession/GetLatestConfiguration instead of
GetConfiguration since the latter has been deprecated
2022-02-23 15:36:33 -06:00
Ravi Khadiwala
f5a75c6319
Simplify RateLimitExceeded with no retry-duration
...
- Avoid passing negative durations in error cases
- Drop unused message
- Return a duration for a bad forwarded-for
2022-02-23 15:25:24 -06:00
Ravi Khadiwala
ae3a5c5f5e
Return a Retry-After on rate-limited responses
...
Previously, only endpoints throwing a RetryLaterException would include
a Retry-After header in the 413 response. Now, by default, all
RateLimitExceededExceptions will be marshalled into a 413 with a
Retry-After included if possible.
2022-02-23 15:25:24 -06:00
Chris Eager
288cbf4a80
Clean up null-ability of incoming message entity fields
2022-02-17 13:23:48 -08:00
Chris Eager
73fa3c3fe4
Add test for content length validation
2022-02-17 13:23:48 -08:00
Chris Eager
579eb85175
Reject invalid envelope types
2022-02-17 13:23:48 -08:00
Ravi Khadiwala
baaae6cd9f
Add `@NotNull` to controller args where appropriate
...
Notably, `@Valid` doesn't imply `@NotNull`
2022-02-10 11:57:04 -06:00
Chris Eager
ed398aa7b9
Add `DeviceCapabilities.pni`
2022-02-09 15:56:01 -08:00
Jordan Rose
41bf2b2c42
Add a binary format for incoming messages
...
The existing, general incoming message endpoint accepts messages as
JSON strings containing base64 data, along with all the metadata as
other JSON keys. That's not very efficient, and we don't make use of
that full generality anyway. This commit introduces a new binary
format that supports everything we're using from the old format (with
the help of some query parameters like multi-recipient messages).
2022-02-07 16:05:03 -08:00
Chris Eager
639d634426
Restore displaced UUID from deleted accounts table when present
2022-01-31 13:01:36 -08:00
Jon Chambers
05e7c98620
Return an `AccountIdentityResponse` when changing phone numbers
2022-01-26 14:44:53 -05:00
Jon Chambers
1f1d618dea
Rename `AccountCreationResult` to `AccountIdentityResponse` (since it's not just for account creation any more)
2022-01-26 14:44:53 -05:00
Jon Chambers
b18117ef89
Add tests for unidentified access when requesting profiles
2022-01-25 14:07:44 -05:00
Jon Chambers
f69db11f42
Drop some unused dynamic configuration properties
2022-01-21 18:46:37 -05:00
Chris Eager
96a680dcf0
Remove displaced account from directory when changing numbers
2022-01-21 18:46:11 -05:00
Jon Chambers
c612663490
Handle `null` `AccountAttributes` when verifying linked devices
2022-01-14 14:47:46 -05:00
Jordan Rose
146655e997
Add a "sameAvatar" flag to CreateProfileRequest
...
If sameAvatar is set (and "avatar" is also set), the avatar field for
a profile will be copied from the existing profile. This saves S3
churn and client bandwidth.
2022-01-04 13:57:41 -08:00
Chris Eager
bb27dd0c3b
Migrate from `Object[]` parameters to `Stream<Arguments>`
2022-01-03 15:10:02 -08:00
Chris Eager
d7a3c12bbe
Drop unused DynamoDB class rules
2022-01-03 15:10:02 -08:00
Chris Eager
a1e84f5a88
Migrate service tests to JUnit 5
2022-01-03 15:10:02 -08:00
Chris Eager
b758737907
Migrate remaining JUnit 4 Redis cluster tests to `RedisClusterExtension`
...
* Increase redis cluster initialization wait to 10 seconds
* Move to JUnit 5 `Assumptions`
2022-01-03 14:59:39 -08:00
Chris Eager
3e777df86c
Timeout `sendNextMessagePage` after 5 minutes
2021-12-20 11:31:11 -08:00
Chris Eager
278b4e810d
Add (failing) test for send message timeouts
2021-12-20 11:31:11 -08:00
Jon Chambers
5baa51d547
Migrate challenge-issuing configuration into the abusive message filter module
2021-12-16 12:22:19 -05:00
Jon Chambers
616db337e1
Remove an old rate limiting feature flag
2021-12-16 12:22:19 -05:00
Jon Chambers
3895871462
Repair missing PNIs in JSON blobs on account load
2021-12-16 11:17:51 -05:00
Jon Chambers
a87b84fbe2
Return an empty response if somebody requests a profile key credential with a non-existent version
2021-12-16 10:30:55 -05:00
Jon Chambers
e611a70ba4
Remove usernames from profile responses
2021-12-15 15:53:47 -05:00
Jon Chambers
66845d7080
Refactor: separate the various types of profile responses
2021-12-15 15:53:47 -05:00
Jon Chambers
4ea7278c6f
Remove unversioned profile properties from `Account` entities
2021-12-15 15:53:47 -05:00
Jon Chambers
2b2e26f14b
Remove deprecated, unversioned profile setters
2021-12-15 15:53:47 -05:00
Chris Eager
0ce87153e5
Remove second database for `AbusiveHostRules`
2021-12-08 16:03:02 -08:00
Chris Eager
dba1711e8d
Convert `AbusiveHostRule` to a record
2021-12-08 14:43:21 -08:00
Chris Eager
a70b057e1c
Add second (migration) database to `AbusiveHostRules`
2021-12-08 12:46:05 -08:00
Ehren Kret
3df143dd3d
Switch to zonky test embedded postgres and use postgres 11.13.0
2021-12-03 16:07:07 -05:00
Jon Chambers
d0ad580c7d
Add (failing!) tests for getting a profile key credentials for somebody else
2021-12-03 16:06:26 -05:00
Jon Chambers
20a71b7df2
Add tests for generating profile key credentials
2021-12-03 12:16:13 -05:00
Chris Eager
31e5058b15
Make temporary iOS envelope type adaptation a little wider
2021-12-03 12:06:31 -05:00
Jon Chambers
14cff958e9
Migrate challenge-issuing rate limiters to the abusive message filter
2021-12-03 11:52:58 -05:00
Jon Chambers
9628f147f1
Separate statically- and dynamically-configured rate limiters
2021-12-03 11:01:15 -05:00
Chris Eager
13e346d4eb
Distinguish local vs remote in `ClientPresenceManager#disconnectPresence`
2021-12-02 14:32:42 -08:00
Jon Chambers
401953313a
Remove all vestiges of the relational account database
2021-12-02 12:46:43 -05:00
Chris Eager
4d2403d619
Use `assertTimeoutPreemptively` instead of `assertTimeout`
2021-12-02 12:17:08 -05:00
Jon Chambers
c5f261305d
Store destination UUIDs when persisting messages to DynamoDB
2021-12-02 12:17:08 -05:00
Jon Chambers
394f58f6cc
Add a (failing!) check for destination UUIDs
2021-12-02 12:17:08 -05:00
Jon Chambers
674bf1b0e0
Drop a myserious empty test
2021-12-02 12:17:08 -05:00
Jon Chambers
e23a1fac50
Remove old Postgres-backed remote config machinery
2021-12-02 12:16:43 -05:00
Jon Chambers
efb410444b
Introduce a username validator
2021-12-02 12:02:29 -05:00
Jon Chambers
23bc11f3b6
Introduce a DynamoDB-backed remote config store
2021-12-02 11:13:07 -05:00
Jon Chambers
4eb7dde1c8
Migrate RemoteConfigsTest to Junit 5
2021-12-02 11:13:07 -05:00
Jon Chambers
064861b930
Consolidate profiles store tests and discard `ProfilesStore` interface
2021-12-02 10:49:54 -05:00
Jon Chambers
afa910bbd7
Drop relational profiles store
2021-12-02 10:49:54 -05:00
Jon Chambers
6aceb24fd2
Drop profile migration tools
2021-12-02 10:49:54 -05:00
Jon Chambers
d94e86781f
Migrate username storage from a relational database to DynamoDB
2021-12-01 16:50:18 -05:00
Jon Chambers
f7ff8e3837
Add a (failing!) test for deleting, then resetting profiles
2021-12-01 11:59:18 -05:00
Jon Chambers
048e17c62b
Use a memoizing supplier instead of a looping thread to cache remote config entries
2021-11-30 16:35:42 -07:00
Jon Chambers
d89b4f7e95
Compare versioned profiles synchronously; log a subset of mismatches for further investigation
2021-11-30 16:35:29 -07:00
Jon Chambers
65b49b2d9c
Use a "for each" strategy in profile migration methods
2021-11-24 16:54:30 -05:00
Jon Chambers
9e7010f185
Migrate profiles from a relational database to DynamoDB
2021-11-24 14:48:41 -05:00
Jon Chambers
3bb8e5bb00
Set a TTL for `Account` entries in the general cache
2021-11-24 14:47:36 -05:00
Jon Chambers
ebf24fb125
Add a (failing!) test for clients omitting badges in profile update requests
2021-11-24 13:47:39 -05:00
Jon Chambers
6919354520
Fix a counting bug with reported messages
2021-11-23 17:28:39 -05:00
Jon Chambers
a42fe9bfb0
Add crawler names to log messages
2021-11-23 16:22:09 -05:00
Jon Chambers
c910fa406d
Migrate reserved usernames from a relational database to DynamoDB
2021-11-23 16:21:03 -05:00
Jon Chambers
71dd0890de
Restore an accidentally-removed PNI consistency check
2021-11-23 10:53:40 -05:00
Jon Chambers
067aee6664
Remove unused properties from `OutgoingMessageEntity`
2021-11-22 15:43:09 -05:00
Jon Chambers
138a2ebbd0
Drop transactional logic from phone number identifier migration
2021-11-22 15:32:24 -05:00
Jon Chambers
296f6a7a88
Make phone number identifiers non-optional
2021-11-22 15:32:24 -05:00
Jon Chambers
069ffa9921
Drop PNI migration tools
2021-11-22 15:32:24 -05:00
Jon Chambers
0bbd34d060
Use text blocks where possible
2021-11-22 15:30:31 -05:00
Ehren Kret
caba110266
Revert "Revert "Remove transparent SVG for badging""
...
This reverts commit 0fdb23c1e9
.
2021-11-18 10:23:09 -06:00
Ehren Kret
0fdb23c1e9
Revert "Remove transparent SVG for badging"
...
This reverts commit 13a84f0c72
.
2021-11-18 10:09:34 -06:00
Ehren Kret
13a84f0c72
Remove transparent SVG for badging
2021-11-18 10:04:42 -06:00
Ehren Kret
7ea43a728d
Set boost description from configuration
2021-11-16 17:21:57 -06:00
Chris Eager
71b38356b1
Update to Mockito 4.0.0
2021-11-16 15:56:35 -07:00
Jon Chambers
f89a20dbc7
Allow callers to set/retrieve keys by ACI or PNI
2021-11-16 15:08:10 -05:00
Jon Chambers
3a4c5a2bfb
Store and retrieve one-time pre-keys by UUID
2021-11-16 15:08:10 -05:00
Jon Chambers
5e1334e8de
s/KeysDynamoDb/Keys/
2021-11-16 15:08:10 -05:00
Jon Chambers
fa6e3d3690
Allow clients to request PNI-based group credentials
2021-11-16 15:08:10 -05:00
Jon Chambers
9383e7716b
Resolve `CertificateControllerTest` warnings and recommendations
2021-11-16 15:08:10 -05:00
Jon Chambers
cfe34fbf0f
Allow unsealed-sender messages to be addressed by PNI
2021-11-16 15:08:10 -05:00
Jon Chambers
975f753c2b
Add an endpoint for testing whether an account with a given ACI or PNI exists
2021-11-16 15:08:10 -05:00
Jon Chambers
e6237480f8
Require that unidentified access keys be exactly 16 bytes
2021-11-16 15:08:10 -05:00
Chris Eager
26f876a2cb
Check service configurations in verify phase
2021-11-16 11:43:07 -07:00
Jon Chambers
ab9e6ac48a
Revert "Replace zkgroup with libsignal-client"
...
This reverts commit 73ea6e4251
.
2021-11-16 11:35:10 -05:00
Jon Chambers
c1d6c04ab2
Revert "Replace curve25519-java with libsignal-client"
...
This reverts commit 0011b8925b
.
2021-11-16 11:35:10 -05:00
Jon Chambers
888cec3d56
Introduce a filter for correcting numeric "online" flags
2021-11-16 10:15:14 -05:00
Jon Chambers
1461bcc2c2
Correct envelope types for certain iOS builds
2021-11-16 10:15:14 -05:00
Jon Chambers
11f1cf80bd
Move `MessageControllerTest` out of the `tests` sub-package to expose package-private elements from the class under test
2021-11-16 10:15:14 -05:00
Jordan Rose
c675cc8b26
Test the response code for invalid serialized zkgroup objects
...
Test by Jon, making sure this is consistent even without up-front size
checking.
2021-11-16 09:52:38 -05:00
Jordan Rose
0011b8925b
Replace curve25519-java with libsignal-client
...
These APIs stemmed from a common source long ago, so there's not much
to change!
2021-11-16 09:52:38 -05:00
Jordan Rose
73ea6e4251
Replace zkgroup with libsignal-client
2021-11-16 09:52:38 -05:00
Jon Chambers
2015ba77ca
Switch to a disallowed prefix model instead of a disallowed country code model
2021-11-15 15:44:55 -05:00
Jon Chambers
cbdec0cb22
Remove legacy push latency measurement pathways
2021-11-11 15:44:07 -05:00
Chris Eager
de6e9d31c9
Add dedicated crawler for directory reconciler
2021-11-11 13:38:13 -07:00
Jon Chambers
f0a6be32fc
Add a crawler to assign PNIs to existing accounts
2021-11-10 11:15:05 -05:00
Jon Chambers
aaa2a6eef1
Break down push latency metrics by VOIP/not-VOIP and optionally by client version
2021-11-10 10:35:41 -05:00
Jon Chambers
b1f56c3324
Resolve formatting complaints
2021-11-10 10:15:14 -05:00
Jon Chambers
da5c0ae4b6
Enable Payments Beta for more country codes
2021-11-10 10:15:14 -05:00
Jon Chambers
1e1394560d
Check length of cancellation reason list before getting reason codes
2021-11-09 11:42:44 -05:00
Jon Chambers
bae0196bcf
Tolerate null UUID attribute values
2021-11-09 11:00:27 -05:00
Jon Chambers
3398955c1a
Add basic support for phone number identifiers
2021-11-09 10:23:08 -05:00
Chris Eager
0a4392f700
Streamline `ExternalServiceCredentialsGenerator` construction
2021-11-08 14:30:52 -07:00
Chris Eager
eb86986cf4
Add /v2/directory/auth endpoint
2021-11-08 14:30:52 -07:00
Ehren Kret
99b1f48e0e
Copy badges from existing account on re-reg
2021-11-04 18:00:47 -05:00
Jon Chambers
c931103712
Remove unused utility classes
2021-11-01 10:51:47 -04:00
Ehren Kret
a52c91a665
Add names to subscription levels
2021-10-28 14:48:44 -07:00
Ehren Kret
94bf3a3902
Extract logic for created header controlled resource bundles
2021-10-28 14:26:53 -07:00
Ehren Kret
090d722b61
Add method to retrieve receipt credentials for a boost payment
2021-10-25 14:54:40 -07:00
Ehren Kret
72b52965b9
Expand definition of badge SVGs
2021-10-25 10:28:02 -07:00
Jon Chambers
ae7077c643
Refresh accounts from storage when checking for device state changes after requests
2021-10-22 14:02:28 -04:00
Jon Chambers
534c577f59
Enforce phone number normalization when creating accounts or changing numbers
2021-10-22 14:01:54 -04:00
Jon Chambers
7762afc497
Add a method for verifying that numbers are normalized in addition to being dialable
2021-10-22 14:01:54 -04:00
Jon Chambers
a3fe4b9980
Update/parameterize ValidNumberTest
2021-10-22 14:01:54 -04:00
Ehren Kret
07cd69ab34
Add endpoint for fetching boost amounts
2021-10-21 13:56:35 -05:00
Jon Chambers
3b764bed7a
Make `DynamicConfigurationManager` generic
2021-10-19 11:52:29 -04:00
Jon Chambers
c91d5c2fdb
Count reported messages per sender
2021-10-19 11:47:54 -04:00
Ehren Kret
c0837104cd
Bring badge configuration into levels information
2021-10-14 11:35:18 -05:00
Jon Chambers
fe21d014f7
Remove legacy rate-limiting tools
2021-10-14 11:43:18 -04:00
Jon Chambers
c379a3d297
Remove deprecated counters
2021-10-14 10:52:20 -04:00
Jon Chambers
eedeaaecee
Update rate-limiting for requests matching specific criteria
2021-10-14 10:42:16 -04:00
Ehren Kret
64eeb1e361
Move to using collections for sprites and svgs for badges
2021-10-13 23:25:39 -05:00
Ehren Kret
5f2656710c
Update badge configuration to new style
2021-10-13 22:58:57 -05:00
Ehren Kret
1af53f2612
Simplify getLevels API
2021-10-13 13:28:31 -05:00
Ehren Kret
bbde93a3c7
Enable unwrapping of CompletionStage
2021-10-13 11:46:20 -05:00
Ehren Kret
b01b76d78f
First pass at subscriptions API
...
This is an incomplete first pass at building the subscriptions API. More API endpoints are still to be added along with controller tests.
2021-10-12 21:23:20 -05:00
Jon Chambers
3c1705994d
Count accounts with non-normalized phone numbers
2021-10-11 10:13:08 -04:00
Chris Eager
d2bc3c7360
Add dynamic configuration to disable directory reconciler
2021-10-04 14:38:47 -07:00
Jon Chambers
9734433f00
Use the default `SecureRandom` algorithm for tests
2021-10-04 11:37:32 -04:00
Ehren Kret
5bd08800bb
Remove public modifier from test class
2021-10-01 14:27:07 -05:00
Ehren Kret
3032415141
Add receipt redemption API to chat server
2021-10-01 12:44:47 -05:00
Jon Chambers
ba58a95a0f
Add support for changing phone numbers
2021-10-01 10:15:33 -04:00
Jon Chambers
aa4bd92fee
Lazy-load scripts; fall back to `eval` if `evalsha` returns `NOSCRIPT`
2021-09-29 16:08:17 -04:00
Jon Chambers
2383aaaa3d
Update ClusterLuaScript formatting
2021-09-29 16:08:17 -04:00
Jon Chambers
8359ef73f4
Cycle all connected websockets on any device or account enabled state change
2021-09-29 14:18:35 -04:00
Jon Chambers
e333cbd94d
Close websockets on account deletion
2021-09-29 14:11:16 -04:00
Chris Eager
5189cbe5c7
apply editorconfig formatting
2021-09-29 10:31:39 -07:00
Chris Eager
3e5087e60b
Remove obsolete ephemeral queue handling
2021-09-29 10:31:39 -07:00
Ehren Kret
559026933d
Add low and high detail svgs to badges
2021-09-27 17:00:09 -05:00
Ehren Kret
7864405efd
Remove single URL in favor of density based sprite sheets
2021-09-27 16:50:18 -05:00
Ehren Kret
041aed2d72
Remove zkgroup enabled flag
...
The last remnants of a time before zkgroup have been swept away.
2021-09-23 09:24:06 -05:00
Jon Chambers
98e41f9a37
Improve Redis exception handling
2021-09-22 10:31:39 -04:00
Chris Eager
6a71d369e2
More Accounts cleanup
...
* Remove `AccountStore`
* Clean up `AccountsDynamoDb#delete`
* Rename `AccountsDynamoDb` → `Accounts`
* Remove unused configuration
* Move Accounts scan page size to static configuration
* Remove disabled tests and related methods
2021-09-21 15:25:16 -07:00
Ehren Kret
df5498e1c0
Add test for self badge fetching
2021-09-20 16:42:38 -05:00
Ehren Kret
44bc90e5ab
Return a badge with additional properties when fetching your own profile
2021-09-20 16:42:38 -05:00
Ehren Kret
17e8b77e88
Add unit test for setting badges
2021-09-20 16:41:09 -05:00
Ehren Kret
8011935a3b
Fix compilation issues created by constructor changes
2021-09-20 16:41:09 -05:00
Ehren Kret
537d61d5bd
Add badges to CreateProfileRequest
...
This will permit users to set the order and visibility of badges on
their profile.
2021-09-20 16:41:09 -05:00
Jon Chambers
09519ae942
Only retry websocket sending if the client is still connected
2021-09-20 14:24:07 -04:00
Chris Eager
2a67b2e610
Remove Accounts Postgres
2021-09-20 11:10:24 -07:00
Chris Eager
8161f55a82
Add dynamic configuration for setting Dynamo as primary
2021-09-17 13:28:45 -07:00
Chris Eager
ecee189ad8
Add `AccountDatabaseCrawler.dedicatedDynamoMigrationCrawler`
2021-09-17 11:27:20 -07:00
Jon Chambers
c2ba8ab562
Identify receipt destinations by UUID instead of e164
2021-09-16 10:47:03 -04:00
Chris Eager
83e0a19561
Migrate `MessagesDynamoDbRule` to `MessagesDynamoDbExtension`
2021-09-16 10:46:37 -04:00
Jon Chambers
6a5d475198
Add a "refresh websocket on number change" provider
2021-09-16 10:37:34 -04:00
Jon Chambers
49ccbba2e3
Generalize the "watch for websockets that need to be refreshed" listener
2021-09-16 10:37:34 -04:00
Ehren Kret
fb1f99da87
Add a method to enable a badge for all accounts
2021-09-16 09:28:21 -05:00
Ehren Kret
08c6a8c2e5
Add category to badges
2021-09-16 09:28:21 -05:00
Ehren Kret
ce3835e176
Rename id to name in the configuration
2021-09-16 09:28:21 -05:00
Ehren Kret
39f6eadbb9
Add test for add and remove badges
2021-09-16 09:28:21 -05:00
Ehren Kret
8a8e6e7b49
Rename name to id in the stored badge information and expose id in the profile endpoint
2021-09-16 09:28:21 -05:00
Ehren Kret
98a31d1474
Switch ProfileController to the actual badge converter
2021-09-16 09:28:21 -05:00
Ehren Kret
5b25e38e41
Ensure badges are in ordered collections
2021-09-15 16:20:15 -05:00
Chris Eager
2fb400280b
Remove unused parameter from `deleteMessageByDestinationAndGuid`
2021-09-15 10:14:08 -07:00
Ehren Kret
79ad09524e
Implement the ProfileBadgeConverter interface
2021-09-15 10:32:20 -05:00
Graeme Connell
6304c84cdb
Add ContactDiscoveryWriterTest based on mock.
2021-09-13 15:20:21 -06:00
Chris Eager
a51a7a0901
Add `MigrationMismatchedAccounts` to `AccountsManager`
2021-09-13 13:54:19 -07:00
Chris Eager
372e131e25
Update `PaymentsControllerTest`
2021-09-13 09:58:42 -07:00
Sophiah Ho
cd66a1ceb7
fix merge issue after 2021 Aug 15 commit d1735c7e57
( #137 )
2021-09-13 09:39:11 -07:00
Sophiah Ho
feb59deb28
Use BigDecimal instead of Double for currency rate calculations ( #134 )
...
use BigDecimal instead of double for accuracy
2021-09-10 16:15:57 -05:00
Chris Eager
49489a6021
Re-check mismatched accounts after a delay, to avoid false positives from concurrent requests
2021-09-10 11:31:44 -07:00
Chris Eager
8cd93d68e4
Add MetricsUtil
2021-09-10 11:31:44 -07:00
Chris Eager
b91a69d8b3
Add asynchronous chunk pre-read to `AccountDatabaseCrawler`
2021-09-10 11:14:11 -07:00
Chris Eager
23a076a204
Update `Account#getNextDeviceId` to not reuse disable device’s IDs
2021-09-10 10:48:48 -07:00
Chris Eager
016141a05d
Add `DevicesHelper`
2021-09-10 10:48:48 -07:00
Graeme Connell
a064b25a14
Fix CDS writer to use AccountsManager.
2021-09-10 11:36:06 -06:00
Ehren Kret
bd40e32f3b
Send acceptable languages instead of request into the profile badge converter
2021-09-10 10:53:04 -05:00
Chris Eager
539b62a829
Add request event listener that handles device.isEnabled changes
2021-09-08 13:11:09 -07:00
Ehren Kret
fc1465c05d
Wire up stored account badges to the profile endpoints
2021-09-07 15:51:29 -05:00
Graeme Connell
2059bb5ef8
Update test to handle read-then-write in ContactDiscoveryWriter.
2021-09-07 13:41:47 -06:00
Graeme Connell
b4aabd799b
Canonical discoverability writing.
2021-09-07 13:41:47 -06:00
Jon Chambers
92f035bc2a
Add a "change number" device/account capability
2021-09-07 15:07:30 -04:00
Jon Chambers
d1735c7e57
Retire `AmbiguousIdentifier`
2021-08-27 13:40:46 -04:00
Jon Chambers
a9339b7037
Update to Pushy 0.15.0
2021-08-27 11:52:29 -04:00
Chris Eager
aeb9f67266
Migrate MessageSenderTest to JUnit 5
2021-08-25 12:25:10 -05:00
Chris Eager
e08c5a412e
Insert ephemeral messages in the standard cache queue
2021-08-25 12:25:10 -05:00
Chris Eager
dadf43b93e
Consolidate directory reconciliation on v3 endpoints
2021-08-19 14:18:38 -05:00
Chris Eager
a398e2269c
Update `AccountsManager` mismatch comparison
2021-08-19 14:08:48 -05:00
Chris Eager
5c68d83a93
Add integration test for re-registration with and without Dynamo DB
2021-08-19 14:05:21 -05:00
Chris Eager
27844fe692
Add JUnit 5 RedisClusterExtension
2021-08-13 12:07:04 -05:00
Ehren Kret
d13741fbd5
Change from using parallel streams to using an ExecutorService
2021-08-12 12:05:01 -05:00
Ehren Kret
a46045d987
Remove unused methods that delete messages by sender and timestamp
2021-08-11 17:30:39 -05:00
Ehren Kret
662c905b80
Remove deprecated delete messages endpoint
...
DELETE /v1/messages/{source}/{timestamp} has been deprecated a long
time and has minimal usage each day at this point. Dropping support
for this endpoint to improve message cache storage flexibility.
2021-08-11 16:17:44 -05:00
Chris Eager
31022aeb79
Use refreshing `AuthenticatedAccount` for `@Auth`
2021-08-11 14:52:25 -05:00
Chris Eager
b3e6a50dee
Send 508 status code for legacy clients that produce rate limit challenges
2021-08-11 11:57:30 -05:00
Chris Eager
d29764d11f
Only process updates for enabled devices in PushFeedbackProcessor
2021-08-11 11:54:42 -05:00
Ehren Kret
f58a320223
Remove unused method from MessagesCache
2021-08-10 10:02:04 -05:00
Chris Eager
3e01bc1174
Add metric for content-length header distribution
2021-08-06 14:41:16 -05:00
Jon Chambers
73c368ea86
Use UUIDs instead of e164s to associate accounts with push notifications.
2021-08-04 14:38:28 -04:00
Jon Chambers
a680639718
Use UUIDs as rate limiter keys.
2021-08-04 14:15:21 -04:00
Jon Chambers
bcb89924b4
Simplify optimistic write logic
2021-08-03 11:54:26 -04:00
Ehren Kret
33fb7a72de
Use RecaptchaClient interface
2021-08-02 13:14:44 -05:00
Ehren Kret
2aaddd721f
Rename existing captcha client
2021-08-02 13:14:44 -05:00
Chris Eager
d45659ac76
Reduce contention when updating `device.lastSeen`
2021-08-02 11:26:15 -05:00
Jon Chambers
13a07dc6cd
Drop the active user counter.
2021-07-29 15:40:27 -04:00
Chris Eager
51b7a8d868
Add excluded E164s configuration to pre-registration experiment
2021-07-29 14:16:40 -05:00
Chris Eager
df9c0051c9
Reconcile inactive and undiscoverable accounts when using v3 endpoints
2021-07-29 10:56:44 -05:00
Jon Chambers
331ff83cd5
Drop legacy PIN-based registration lock plumbing
2021-07-29 11:51:14 -04:00
Chris Eager
5400abb065
Better support unhandled exception logging on websocket requests
2021-07-28 14:06:09 -05:00
Jon Chambers
f47fefb73e
Lock accounts for the duration of deletion operations.
2021-07-27 13:12:39 -04:00
Jon Chambers
1a1eab4ec0
Also clear profiles on re-registration.
2021-07-27 13:05:54 -04:00
Jon Chambers
3a966ef345
Reuse account UUIDs when registering an account with a recently-deleted e164.
2021-07-27 13:05:54 -04:00
Jon Chambers
be20c04cd8
Identify accounts for which to delete keys by UUID.
2021-07-27 13:05:54 -04:00
Jon Chambers
d09dcc90fe
Add methods for getting, clearing, locking recently-deleted account records.
2021-07-27 13:05:54 -04:00
Chris Eager
13447df1e0
Update validation for NotNull items in IncomingMessagesList
2021-07-27 10:39:30 -04:00
Jon Chambers
3608c5bfb0
Wait for outstanding requests to be resolved before shutting down the directory queue.
2021-07-27 10:36:53 -04:00
Jon Chambers
34dbff6786
Switch to an async SQS client.
2021-07-27 10:36:53 -04:00
Jon Chambers
a6066bfc2f
Migrate DirectoryQueueTest to JUnit 5.
2021-07-27 10:36:53 -04:00
Jon Chambers
8579190cdf
Consolidate account creation/directory updates into `AccountsManager`
2021-07-27 10:27:47 -04:00
Chris Eager
317a551bdb
Migrate MetricsRequestEventListenerTest to JUnit 5
2021-07-26 12:06:29 -05:00
Chris Eager
27e9271473
Add request path and user agent to unhandled exception logging
2021-07-26 12:06:29 -05:00
Chris Eager
696340f780
Migrate DeviceControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
86ddcbaa08
Migrate CertificateControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
2144d2a8d8
Migrate AttachmentControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
f7af861b31
Migrate SecureStorageControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
208a09b3ae
Migrate RemoteConfigControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
831023e41d
Migrate PaymentsControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
ff627793d6
Migrate DirectoryControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Chris Eager
f971c76a99
Migrate StickerControllerTest to JUnit 5
2021-07-26 11:18:17 -05:00
Jon Chambers
12be7d49c2
Clear one-time pre-keys on re-registration.
2021-07-19 10:05:01 -04:00
Jon Chambers
14863b575e
Clear one-time pre-keys when a device is unlinked.
2021-07-19 10:05:01 -04:00
Jon Chambers
32a95f96ff
Add a pessimistic locking system for operations on recently-deleted account records
2021-07-16 16:52:58 -04:00
Chris Eager
01ef855157
Return a non-stale account from base authenticator when last seen is updated
2021-07-16 16:52:58 -04:00
Chris Eager
817866caf3
Use fresh accounts to update in PushFeedbackProcessor
2021-07-16 16:52:58 -04:00
Chris Eager
158d65c6a7
Add optimistic locking to account updates
2021-07-16 16:52:58 -04:00
realturner
62022c7de1
Migrate AppConfig to SDK v2 to detect and use web identify token
2021-07-16 16:48:33 -04:00
Chris Eager
a824b5575d
Add dynamic configuration for using DynamoDB in AccountsDatabaseCrawler
2021-07-06 13:01:24 -05:00
Jon Chambers
78819d5382
Remove expiration logic when checking token validity.
...
The data store will no longer return tokens that have expired, and we no longer need to check for expiration in application space.
2021-07-06 11:03:49 -04:00
Jon Chambers
d128bc782a
Retire Postgres-backed pending account/device tables.
2021-07-06 11:03:49 -04:00
Chris Eager
530b2a310f
Ensure active future is always completed
2021-07-02 15:05:11 -05:00
Chris Eager
43be72d076
Add test for ManagedPeriodicWork; fix shutdown not awaiting active execution
2021-07-02 15:05:11 -05:00
Chris Eager
c22ea78672
Add crawler to process migration retry accounts
2021-07-02 15:05:11 -05:00
Chris Eager
abaed821ec
Add additional case to unit test
2021-07-02 15:05:11 -05:00
Chris Eager
819d59cd79
Update reconciliation crawler to use secondary index
2021-07-02 15:05:11 -05:00
Chris Eager
eac48a6617
Don’t delete accounts after reconciling
2021-07-02 15:05:11 -05:00
Chris Eager
a315c9be92
Add DeletedAccounts DynamoDB table
2021-07-02 15:05:11 -05:00
Chris Eager
26bc5973b5
Clear message queue before and after removing a device
2021-07-02 10:48:42 -05:00
Jon Chambers
7395489bac
Add tests for pending account/device managers.
2021-07-02 11:30:13 -04:00
Jon Chambers
e3afcae7d3
Gather data to verify safety of retiring legacy reglock system.
2021-07-01 10:58:47 -04:00
Jon Chambers
d2d39baede
Add a DynamoDB-backed stored verification code store.
2021-07-01 10:50:52 -04:00
Jon Chambers
111f5ba024
Use java.time classes for stored verification code expiration; add tests.
2021-07-01 10:50:52 -04:00
Jon Chambers
ce3fb7fa99
Extract a common base class for verification code store tests.
2021-07-01 10:50:52 -04:00
Jon Chambers
fc421d3f21
Introduce a common interface for verification code stores.
2021-07-01 10:50:52 -04:00
Jon Chambers
71bea759c6
Consolidate StoredVerificationCode constructors.
2021-07-01 10:50:52 -04:00
Graeme Connell
5d5c63e6d4
Update profile controller to S3 AWSv2.
2021-06-30 13:09:18 -06:00
Graeme Connell
42ff3f8432
Switch SQS to Amazon SDKv2.
2021-06-30 12:46:12 -06:00
Ehren Kret
7883352b74
Match random capability generation in test
2021-06-21 17:32:31 -05:00
Ehren Kret
982d122d18
Match random capability generation in test
2021-06-21 17:32:31 -05:00
Ehren Kret
d8d94407c6
Create announcement group capability
2021-06-21 17:32:31 -05:00
Jon Chambers
411f7298f2
Enforce validation constraints for dynamic configuration objects.
2021-06-04 12:34:48 -04:00
Graeme Connell
c545cff1b3
Switch DynamoDB to AWSv2.
...
Switch from using com.amazonaws.services.dynamodbv2 to using
software.amazon.awssdk.services.dynamodb for all current DynamoDB uses.
2021-06-03 13:37:10 -06:00
Jon Chambers
117de2382d
Verify that API consumers can skip/clear VOIP tokens.
2021-06-02 16:50:49 -05:00
Jon Chambers
25e7036451
Send a payload with mutable content for non-VOIP topics.
2021-06-02 16:50:49 -05:00
Jon Chambers
3131bd3dd9
Allow iOS callers to specify whether they're providing a VOIP token for preauth.
2021-06-02 16:50:49 -05:00
Ehren Kret
164fc40990
Rename receipt type and add new client-to-client plaintext type for decryption error receipts
2021-05-28 11:33:44 -05:00
Chris Eager
3e61b5c49d
Add call chain and mismatch check for push token timestamp
2021-05-27 11:10:58 -05:00
Chris Eager
5ee093f87c
Add mismatch for signed pre-key; remove mismatch for migration version
2021-05-26 10:58:23 -05:00
Chris Eager
67067f1d2d
Remove last-seen and registration lock comparisons
2021-05-25 10:47:57 -05:00
Ehren Kret
417d48c452
Block downgrading sender key support
...
Disallow linking an additional device to an account that has already
upgraded to having sender key support where the linked device does not
have sender key support. This should prompt the person attempting to
link the older application to upgrade in order to complete the linking
process.
2021-05-25 10:30:26 -05:00
Chris Eager
215621a9b0
Remove temporary adaptation for nested `IncomingMessage.online`
2021-05-24 11:36:15 -05:00
Graeme Connell
c10b64c367
Simplify S3ObjectMonitor API, try-with-resource.
2021-05-21 14:50:15 -06:00
Graeme Connell
722055c8b5
Switch S3ObjectMonitor to AWSv2 SDK.
2021-05-21 14:50:15 -06:00
Jon Chambers
94ac3f6cc8
Return Optional.empty() for present-but-not-routed IPs.
2021-05-18 17:43:30 -04:00
Jon Chambers
b89de860d3
Add support for getting country codes for ASNs.
2021-05-18 17:43:30 -04:00
Jon Chambers
f8c623074b
Introduce an ASN-to-IP manager.
2021-05-18 17:43:30 -04:00
Jon Chambers
1160af9522
Add a utility class for associating IP addresses with ASNs.
2021-05-18 17:43:30 -04:00
Jon Chambers
3056ea8cbc
More clearly separate concerns for explicitly getting monitored objects.
2021-05-18 17:00:30 -04:00
Jon Chambers
28e3b23e8c
Add an "excessively large object" safeguard.
2021-05-18 17:00:30 -04:00
Jon Chambers
fbaf4a09e2
Use the S3 object monitor to retrieve Tor exit node lists.
2021-05-18 17:00:30 -04:00
Jon Chambers
cfa8cbedc1
Introduce an S3 object monitor.
2021-05-18 17:00:30 -04:00
Ehren Kret
0cd3640f13
Add more tests
2021-05-18 13:09:40 -05:00
Ehren Kret
1a604d8c79
Add unit test to readU16
2021-05-18 13:09:40 -05:00
Chris Eager
d252e579f4
Get more detailzed serialization mismatches
2021-05-17 15:42:54 -05:00
Chris Eager
282f39141e
Add additional tests for AccountStore#create
2021-05-17 15:42:17 -05:00
Chris Eager
00c9023e74
Include server GUID when sending messages over websocket
2021-05-14 17:10:15 -05:00
Chris Eager
2a3ea13c9e
Classify DynamoDB mismatches in AccountsManager
2021-05-14 15:57:47 -05:00
Chris Eager
df01be2dca
Don’t throw exceptions from ReportMessageManager#store()
2021-05-13 18:33:02 -05:00
Chris Eager
e320626c6e
Add report message API
2021-05-13 17:19:34 -05:00
Ehren Kret
bfd2c32d4e
Add sender key capability
2021-05-12 18:15:25 -05:00
Ehren Kret
e9a3d52d7f
Add an optional description to the payment intent request
2021-05-12 18:14:33 -05:00
Jon Chambers
d45154f2aa
Measure captcha challenge success rates.
2021-05-12 12:20:53 -05:00
Chris Eager
760462f8fb
Add configuration for regional SMS verification text
2021-05-12 12:20:46 -05:00
Jon Chambers
46110d4d65
Add client challenges for prekey and message rate limiters
2021-05-11 16:21:32 -05:00
Ehren Kret
17047513c3
Create stripe api endpoint for apple pay donations
2021-05-11 10:03:04 -05:00
Jon Chambers
350de1c759
Add a simple utility class for testing if an IP belongs to a Tor exit node.
2021-05-06 11:57:18 -04:00
Jon Chambers
8fdbcbef44
Send directory updates in batches.
2021-05-04 15:18:43 -04:00
Chris Eager
fac4538f6f
Migrate rate limiters to rate limiter cluster
2021-05-03 10:57:34 -05:00
Chris Eager
4f6b132449
Add secondaryCacheCluster to RateLimiter
2021-04-30 15:26:17 -05:00
Ehren Kret
e4dbb8efe7
Fix deserialization for Duration in dynamic config
2021-04-28 15:57:23 -05:00
Jon Chambers
59e401f41e
Use a MIME Base64 decoder for attachment signing keys.
2021-04-26 18:53:15 -04:00
Jon Chambers
6196856a7c
Use the JDK-provided Base64 encoder/decoder.
2021-04-26 18:17:03 -04:00
Jon Chambers
0e8d4f9a61
Drop Bouncy Castle as a dependency.
2021-04-26 17:58:19 -04:00
Chris Eager
5ee56b022c
Add CustomFriendlyName parameter to Twilio Verify requests
2021-04-26 14:31:52 -05:00
Chris Eager
6c37b658ac
Migrate VoiceVerificationControllerTest to JUnit 5
2021-04-26 14:31:52 -05:00
Chris Eager
1f53900345
Migrate VoiceVerificationController to Util#findBestLocale
2021-04-26 14:31:52 -05:00
Chris Eager
deece33a0d
Fix parameterized testWhoAmI
2021-04-26 14:31:52 -05:00
Chris Eager
13053da97f
Add Twilio Verify experiment to AccountController
2021-04-26 14:31:52 -05:00
Chris Eager
4c019aef15
Migrate PendingAccountsTest to JUnit 5
2021-04-26 14:31:52 -05:00
Chris Eager
bab5e5769b
Add TwilioVerifyExperimentEnrollmentManager
2021-04-26 14:31:52 -05:00
Chris Eager
76cbf734ad
Add TwilioVerifySender to TwilioSmsSender
2021-04-26 14:31:52 -05:00
Chris Eager
17ba630014
Add TwilioVerifySender
2021-04-26 14:31:52 -05:00
Chris Eager
f190462879
Fully implement unsealed sender cardinality rate limiter
2021-04-23 11:45:53 -05:00
Chris Eager
6c6f073bc2
Pass re-migration account in test
2021-04-22 17:11:10 -05:00
Chris Eager
abafa2ccac
Include ATTR_MIGRATION_VERSION in update()
2021-04-21 14:13:13 -05:00
Chris Eager
5974328d9c
Ensure accounts are deleted after batch migration; store migration failures for later processing
2021-04-21 11:13:07 -05:00
Chris Eager
a472774734
Add threadpoool to increase Accounts → Dynamo migration throughput
2021-04-21 11:13:07 -05:00
Chris Eager
166d203e8e
Don’t PUT unmigrated accounts in update()
2021-04-21 11:13:07 -05:00
Chris Eager
f2a1a65a45
Migrate MessageControllerTest to JUnit 5
2021-04-20 13:00:29 -05:00
Jon Chambers
52478e7de0
Test the account crawler against a real redis cluster.
2021-04-20 13:58:27 -04:00
Chris Eager
59bbd0c43c
Add Accounts DynamoDB
...
* Add additional test cases to AccountsTest
* Migrate AccountsManagerTest to JUnit 5
* Add AccountsDynamoDbConfiguration
* Add Account.dynamoDbMigrationversion
* Add DynamicAccountsDynamoDbMigrationConfiguration
* Add AccountsDynamoDb to AccountsManager
* Add AccountsDynamoDbMigrator
2021-04-16 14:24:24 -05:00
Andrew Bissell
1f24c913a6
add unit tests for SmsSender
2021-04-08 09:17:47 -04:00
Jon Chambers
2cb788ceb7
Delete secure backups when deleting accounts.
2021-04-01 11:30:48 -04:00
Jon Chambers
257fef9734
Add a secure backup service client.
2021-04-01 11:30:48 -04:00
Jon Chambers
ab4e94edab
Revert "Revert "Delete data in the storage service when deleting accounts.""
...
This reverts commit 91fc0fd623
.
2021-03-30 17:17:32 -04:00
Chris Eager
ad6c271f9d
Add dynamic configuration for signup captcha by country code
2021-03-30 10:22:02 -05:00
Chris Eager
91bd061110
Migrate deprecated Lettuce method and enum usages
2021-03-29 14:51:26 -05:00
Ehren Kret
3745a0b81d
Update from 684 to 776 for payment address length to account for signature
2021-03-27 00:45:47 -05:00
Jon Chambers
7e29ed1cc7
Block attempts to set wallet addresses from unsupported countries.
2021-03-26 12:21:11 -04:00
Jon Chambers
5965f0fd22
Add a dynamically-configured list of allowed country codes for payments.
2021-03-26 12:21:11 -04:00
Jon Chambers
a816aa0186
Revert "Add a storage client method for checking wheter a user has a stored manifest."
...
This reverts commit 8b6012f8a8
.
2021-03-22 10:32:38 -04:00
Jon Chambers
089b6b1644
Retry attempts to get messages after a delay; close connections after a finite number of retries.
2021-03-22 10:32:25 -04:00
Chris Eager
e5ae0572c5
Add android-2021-03 verification format
2021-03-18 12:49:50 -05:00
Chris Eager
63dac3bd9f
Migrate AccountControllerTest to JUnit 5
2021-03-18 12:45:20 -05:00
Jon Chambers
0bc1369e04
Work through the full list of supported locales when choosing a language for voice verification.
2021-03-18 13:29:09 -04:00
Jon Chambers
ca2f7d2eed
Parse locale strings when sending voice verification codes.
2021-03-18 13:29:09 -04:00
Jon Chambers
8b6012f8a8
Add a storage client method for checking wheter a user has a stored manifest.
2021-03-18 12:43:12 -04:00
Chris Eager
ad838b4827
Add isEnrolled(e164, experiment) for pre-registration experiments
2021-03-16 13:09:10 -05:00
Chris Eager
25f603efc9
Add DynamicPreRegistrationExperimentEnrollmentConfiguration
2021-03-16 13:09:10 -05:00
Chris Eager
b5bd16c6a9
Migrate DynamicConfigurationTest to JUnit 5
2021-03-16 13:09:10 -05:00
Chris Eager
14bfa83bb8
Migrate ExperimentEnrollmentManagerTest to JUnit 5
2021-03-16 13:09:10 -05:00
Chris Eager
5dc8086968
Migrate Twilio numbers from static to dynamic configuration
2021-03-16 12:53:51 -05:00
Jon Chambers
efe7f2e4c1
Remove vestiges of per-country sender ID logic/configuration.
2021-03-10 14:58:46 -05:00
Jon Chambers
fb2fc2335a
Require messaging service IDs; remove fallback-to-random-number logic.
2021-03-10 14:58:46 -05:00
Jon Chambers
345e116699
Place our trust in a Twilio message service.
2021-03-10 14:58:46 -05:00
Jon Chambers
e50a1c0646
Revert "Turn off alphanumeric sender ID for all countries."
...
This reverts commit 3bf0188e7f
.
2021-03-10 14:58:46 -05:00
Jon Chambers
3cdc58200a
Copy headers from the initial websocket upgrade request into subsequent resource requests.
2021-03-10 14:54:11 -05:00
Jon Chambers
a1434524a4
Allow the storage service client to trust the Signal CA root.
2021-03-10 10:53:33 -05:00
Jon Chambers
07886a9722
Introduce a utility class for working with forwarding chains in HTTP headers.
2021-03-10 10:37:10 -05:00
Jon Chambers
fde1b49729
Introduce a set of gauges for various network statistics as reported by `nstat`.
2021-03-09 11:45:53 -05:00
Jon Chambers
af2a8548c3
Use Durations everywhere, drop unused constructors, and add tests.
2021-03-05 12:47:36 -05:00
Jon Chambers
f57a4171ba
Gather IP-based metrics for international, unsealed-sender messages.
2021-03-05 11:54:01 -05:00
Jon Chambers
eb6fe11da1
Add tools to decline messages from senders meeting specific conditions
2021-02-24 18:09:26 -05:00
Jon Chambers
5354104128
Only apply unsealed sender rate limits to targeted country codes.
2021-02-23 14:17:16 -05:00
Ehren Kret
b5ade5dc12
Only return payment address from latest profile ( #408 )
...
* Only return payment address from latest profile
* Rename `currentVersionedProfile` to `currentProfileVersion`
* Change return type to Optional
* Update service/src/main/java/org/whispersystems/textsecuregcm/controllers/ProfileController.java
Co-authored-by: Jon Chambers <63609320+jon-signal@users.noreply.github.com>
* Fix broken test
Co-authored-by: Jon Chambers <63609320+jon-signal@users.noreply.github.com>
2021-02-23 12:29:47 -06:00
Jon Chambers
06ca5f14fc
Record the age of accounts that send unsealed-sender messages.
2021-02-23 12:16:45 -05:00
Chris Eager
f85c6bf828
Demonstrate JUnit 5 works by migrating an existing test
2021-02-19 13:30:44 -06:00
Ehren Kret
93f845610d
Remove payments list from Account
2021-02-19 13:18:30 -06:00
Chris Eager
aa8525385a
Temporarily support `IncomingMessage.online` ( #404 )
...
iOS versions prior to 5.5.0.7 send `online` on `IncomingMessage`, rather
than on the top-level entity. This adds a temporary server-side adaptation,
to prevent client-side issues, like persistent typing indicators.
2021-02-18 12:21:16 -06:00
Ehren Kret
142376f360
Add payment address to the versioned profile
2021-02-16 16:12:50 -06:00
Moxie Marlinspike
2dbab70c8c
Create utility endpoint for currency conversion
2021-02-16 11:57:34 -08:00
Jon Chambers
5f49772ca6
Control enforcement of unsealed sender rate limits via dynamic configuration.
2021-02-12 15:43:05 -05:00
Jon Chambers
ff448950ed
Collapse the feature flag system into the dynamic config system.
2021-02-12 15:23:34 -05:00
Jon Chambers
ad32555cc9
Drop the old push scheduler Redis singleton.
2021-02-11 14:01:11 -05:00
Ehren Kret
be8a1acca9
Remove message database from the codebase ( #395 )
...
* Remove message database from the codebase
* Remove unused ExperimentEnrollmentManager in test
* Be more stylish
2021-02-11 10:50:03 -06:00
Jon Chambers
e0ed8fa0b8
Introduce a hyper-log-log-based cardinality rate limiter
2021-02-11 10:36:26 -05:00
Jon Chambers
dcbf285fae
Un-ignore message controller tests.
2021-02-11 10:14:48 -05:00
Jon Chambers
71510a8199
Decommission the old directory cache.
2021-02-10 11:02:11 -05:00
Jon Chambers
2f105ed0a4
Add support for remote client deprecation
2021-02-09 12:24:44 -05:00
Jon Chambers
6c0de89de8
Remove scary message-throttling feature flags.
2021-02-08 11:55:01 -05:00
Jon Chambers
aa99e202b4
Clarify behavioral contract of the pre-key store
2021-02-08 11:45:57 -05:00
Jon Chambers
04728ea4bc
Drop the old Postgres-based pre-key store.
2021-02-08 11:40:43 -05:00
Ehren Kret
d09b36b1d5
Fix deprecated imports for Java6Assertions and Matchers
2021-02-08 09:45:33 -06:00
Ehren Kret
a5dd4f5fac
Remove signaling key from Device and AccountAttributes
2021-02-08 09:45:33 -06:00
Jon Chambers
3298db8683
Split traffic between the Postgres and Dynamo pre-key stores.
2021-02-04 15:18:53 -05:00
Jon Chambers
d4d9403829
Add a Dynamo-backed key store.
2021-02-04 15:18:53 -05:00
Moxie Marlinspike
5e1a572bd8
Track impact of unsealed sender rate limits ( #374 )
2021-02-03 08:58:47 -08:00
Ehren Kret
0dcb4b645c
Build Dynamo DB backed Message Store ( #358 )
...
* Work in progress...
* Finish first pass draft of MessagesDynamoDb
* Use begins_with everywhere for destination device id
* Remove now unused methods
* First basic test built
* Add another test case
* Remove comment
* Verify more of the message contents
* Ensure all methods are tested
* Integrate MessagesDynamoDb into the MessagesManager
This change plugs the MessagesDynamoDb class into the live serving
flow in MessagesManager.
Tests are not yet as comprehensive for this big a change as they
should be, but they now compile and pass so checkpointing here with a
commit.
* Put DynamoDB before RDBS when deleting specific messages
* Extract method
* Make aws sdk version into a property
* Rename clientBuilder
* Discard messages with no GUID
* Unify batching logic into one function
* Comment on the source of the value in this constant
* Inline method
* Variable name swizzle
* Add timers to all public methods
* Add missing return statements
* Reject messages that are too large with response code 413
* Add configuration to control dynamo DB timeouts
* Set server timestamp from the ReceiptSender
* Change to shorter key names to optimize IOPS
* Fix tests broken by changing column names
* Fix broken copyright template output
* Remove copyright template error text
* Add experiments to control use of dynamo and rds in message storage
* Specify instance profile credentials for the dynamic configuration manager
* Use property for aws sdk version
* Switch dynamo to instance profile credentials
* Add metrics to the batch write loop
* Use placeholders in logging
2021-02-03 10:03:19 -06:00
Jon Chambers
1a27c7eabc
Add a (failing) test for new Ivory Coast phone numbers.
2021-02-01 21:25:14 -05:00
Jon Chambers
408b959441
Require a push challenge when registering (or else require a captcha).
2021-02-01 20:44:21 -05:00
Jon Chambers
35fc98a188
Add an experiment enrollment manager.
2021-02-01 11:08:16 -05:00
Moxie Marlinspike
92f6a79e1f
Add a dynamic configuration manager
2021-02-01 11:01:58 -05:00
Jon Chambers
8f94ed68a3
Ignore expired devices when checking for GV1->GV2 migration capability.
2021-01-30 16:55:05 -05:00
Jon Chambers
92a0deffcf
Add more robust tests for about/emoji fields.
2021-01-27 10:34:13 -05:00
Jon Chambers
24ea6a9f1d
Revert "Temporarily disable registration abuse system"
...
This reverts commit 22ef058cb6
.
2021-01-25 14:58:27 -05:00
Jon Chambers
f10be893ce
Drop the old feature flag controller.
2021-01-25 14:55:57 -05:00
Jon Chambers
c606c1664f
Add admin tasks for listing, setting, and deleting feature flags.
2021-01-25 14:55:57 -05:00
Jon Chambers
225932b4c9
Add emojis/"about" text to profiles
2021-01-20 15:42:47 -05:00
Jon Chambers
6b850b9894
Allow (versioned) profile names up to 380 base64 characters long.
2021-01-20 11:08:10 -05:00
Jon Chambers
943a5d1036
Shard push scheduling cache
2021-01-19 15:50:12 -05:00
Jon Chambers
0a23ce870a
Allow message persisters to be disabled by a feature flag.
2021-01-17 11:13:12 -05:00
Jon Chambers
a57ce1dd17
Add machinery to allow a percentage of message sends to succeed.
2021-01-15 17:05:16 -05:00
Jon Chambers
81c1ba6eef
Respond to all "message send" attempts with HTTP/503.
2021-01-15 15:34:14 -05:00
Jon Chambers
9c53d818f4
Use separate clusters for message cache read/write operations.
2021-01-15 13:51:39 -05:00
Jon Chambers
e5a2c1ab10
Always return an empty list of prekeys.
2021-01-15 12:27:10 -05:00
Jon Chambers
67ed035b36
Retry serializable key transactions.
2021-01-13 17:38:29 -05:00
Jon Chambers
2e01da5ec1
Add a task to enable/disable accelerated crawling.
2021-01-11 19:29:18 -05:00
Jon Chambers
9412a7424c
Return HTTP/429 whenever somebody tries to get contacts from the old directory system.
2021-01-11 19:29:10 -05:00
Jon Chambers
f8cbb4f386
Temporarily suspend client version metrics to reduce load on our metric aggregator.
2021-01-11 14:04:44 -05:00
Ehren Kret
86ccaa52a5
Allow configuration of multiple directory account crawler listeners ( #325 )
...
* Allow configuration of multiple directory account crawler listeners
Only one should update the local redis directory. This one is marked
with replicationPrimary true. The others in the list only serve to
issue replication requests over to CDS replication load balancers.
* Update one more metric name
2021-01-10 17:11:02 -06:00
Jon Chambers
1b53f10091
Reload scripts across the whole cluster if one shard is missing the script.
2021-01-10 15:00:12 -05:00
Jon Chambers
bac268a21c
Don't send a reply to clients until messages are safely in a non-volatile store.
2021-01-10 13:03:40 -05:00
Moxie Marlinspike
22ef058cb6
Temporarily disable registration abuse system
2021-01-09 15:57:55 -05:00
Jon Chambers
9ee6419bc0
Publish directory updates to multiple SQS queues.
2021-01-08 18:07:18 -05:00
Jon Chambers
3bf0188e7f
Turn off alphanumeric sender ID for all countries.
2021-01-08 06:18:53 -05:00
Jon Chambers
91fc0fd623
Revert "Delete data in the storage service when deleting accounts."
...
This reverts commit ff1a721d5b
.
2021-01-08 06:18:39 -05:00
Jon Chambers
a4d0c17efd
Record OS versions for iOS requests.
2020-12-23 11:36:31 -05:00
Jon Chambers
ff1a721d5b
Delete data in the storage service when deleting accounts.
2020-12-23 11:35:38 -05:00
Jon Chambers
c870a1bbd5
Introduce a storage service client.
2020-12-23 11:35:38 -05:00
Jon Chambers
e551fd2c1b
Revert "Pause checks for GV1 migration when checking for capability downgrades."
...
This reverts commit e7745db36e
.
2020-12-10 17:02:41 -05:00
Jon Chambers
34a11c2338
Record OS versions for desktop and SDK versions for Android.
2020-12-10 17:02:05 -05:00
Jon Chambers
e524ff965d
Add a utility method for getting client platform tags from UA strings for metrics.
2020-12-10 17:01:46 -05:00
Jon Chambers
92fde83b3a
Discard oversized messages bound for desktop clients via websockets.
2020-12-07 15:03:35 -05:00
Ehren Kret
299b680013
Always include UUID in UD certificate ( #300 )
2020-12-01 08:56:55 -06:00
Ehren Kret
00a3e562dc
Force use of UCS-2 instead of GSM-7 for SMS to China ( #297 )
2020-11-20 14:41:48 -06:00
Jon Chambers
e7745db36e
Pause checks for GV1 migration when checking for capability downgrades.
2020-11-17 09:25:12 -05:00
Jon Chambers
474b879b16
Only notify CDS if an account attribute change actually changes an account's discoverability.
2020-11-16 10:54:12 -05:00
Jon Chambers
325e65db7f
Expand UA parsing tests to cover OS details in desktop strings.
2020-11-11 13:05:18 -05:00
Ehren Kret
604287244f
Update copyright statement on all source files
...
IntelliJ Copyright Profile used to automate this.
2020-11-04 11:55:35 -05:00
Ehren Kret
5587b7d469
Expose gv1-migration on profile endpoint
2020-10-28 13:00:57 -04:00
Ehren Kret
26870d134f
Set source UUID when delivering envelopes from message cache/db on websocket
2020-10-28 12:38:32 -04:00
Ehren Kret
c2db2d3cbd
Add GV1 Migration capability
2020-10-27 16:17:21 -04:00
Jon Chambers
05d9ec673e
Send push notifications if websockets close before all messages are delivered
2020-10-27 16:02:55 -04:00
Jon Chambers
96d3a69479
Use container-managed executors for APN/GCM senders.
2020-10-23 11:30:03 -04:00
Jon Chambers
23ca011ac1
Record account deletion reasons.
2020-10-20 19:00:34 -04:00
Jon Chambers
99f488d48f
Drop websocket connection names (unused for a while now).
2020-10-19 11:24:35 -04:00
Jon Chambers
05929871c9
Rename PushSender to MessageSender and add docs.
2020-10-19 11:24:35 -04:00
Jon Chambers
74b3daa70a
Collapse WebsocketSender into PushSender.
2020-10-19 11:24:35 -04:00
Jon Chambers
3a84775912
Log cluster topology change events, too.
2020-10-13 16:07:08 -04:00
Jon Chambers
a9d0aa136d
Add OS-reported metrics for cached/buffered memory.
2020-10-11 13:43:15 -04:00
Curt Brune
39c09733d3
Add /v1/payments/auth endpoint
2020-10-08 10:51:01 -04:00
Jon Chambers
e1c397993d
Require Android clients to support the gv2-3 capability
2020-10-06 16:49:49 -04:00
Jon Chambers
2b6811cb1b
Really delete old accounts instead of just removing their push channels.
2020-10-06 11:04:47 -04:00
Jon Chambers
c82496b972
Remove the "repair queue metadata" script.
2020-10-05 16:57:16 -04:00
Jon Chambers
bb087caddc
Don't panic if a queue exists, but is empty when repairing metadata.
2020-10-04 16:09:56 -04:00
Jon Chambers
5e3f8b9c2e
Disallow insertion of duplicate messages.
2020-10-04 15:34:14 -04:00
Jon Chambers
1ccfe928f7
Add a test to make sure that we don't double-insert messages with the same GUID.
2020-10-04 15:34:14 -04:00
Jon Chambers
952cfae4e6
Repair queue metadata before persisting queues.
2020-10-04 15:25:06 -04:00
Jon Chambers
02a2c3224f
Discard unused feature flag constants/mocking.
2020-10-04 10:48:42 -04:00
Jon Chambers
fc05529574
Let MessagePersister manage its own worker thread.
2020-10-03 11:43:34 -04:00
Jon Chambers
76665dd56e
Retry Redis commands that time out.
2020-10-01 17:17:07 -04:00
Jon Chambers
885fa6beae
Add tests for Device#isEnabled.
2020-10-01 12:54:35 -04:00
Jon Chambers
65cdd5fcbe
Drop the 365-day check when deciding if an account is enabled.
2020-10-01 12:54:35 -04:00
Jon Chambers
0c6f05f34a
Add a (failing!) test for sending a sealed-sender message after a non-sealed-sender message.
2020-10-01 11:06:43 -04:00
Jon Chambers
57d2ef8740
Return queues to the "to persist" list if something goes wrong during persistence.
2020-09-30 10:39:56 -04:00
Jon Chambers
a97e0982e3
Add an integration test for message persistence.
2020-09-30 10:39:56 -04:00
Jon Chambers
eaa2060d84
Fix an incorrect locking key and some previously-suppressed lock contention issues.
2020-09-30 10:39:56 -04:00
Jon Chambers
c7230ccbb0
Remove messages from the cache in bulk.
2020-09-29 10:58:02 -04:00
Jon Chambers
fc71ced660
Persist messages in batches.
2020-09-29 10:58:02 -04:00
Jon Chambers
599cd766e1
Let Dropwizard manage persister thread lifecycles.
2020-09-29 10:58:02 -04:00
Alan Evans
e64c8007c0
Detect GV2 capability in non-gcm Android devices
2020-09-28 15:54:10 -04:00
Jon Chambers
e6d4620af1
Only allow linking desktop clients if they support the third-generation GV2 capability.
2020-09-25 17:08:32 -04:00
Jon Chambers
656e6db846
Only consider desktop devices GV2-capable if they send the third-gen GV2 capability.
2020-09-25 17:08:32 -04:00
Jon Chambers
30474e3a2b
Add a test for message ordering.
2020-09-25 11:41:58 -04:00
Jon Chambers
a553eba574
Add an API endpoint for deleting accounts.
2020-09-25 11:39:17 -04:00
Jon Chambers
61f515670c
Add plumbing for deleting accounts and all associated data.
2020-09-25 11:39:17 -04:00
Jon Chambers
789af0f8a6
Add support for deleting keys associated with an account.
2020-09-25 11:39:17 -04:00
Jon Chambers
86fae58c96
Add support for deleting account entities from the database.
2020-09-25 11:39:17 -04:00
Jon Chambers
66a04ed730
Don't explicitly notify clients when messages get persisted.
2020-09-23 14:51:02 -04:00
Jon Chambers
7e14a0bc30
Drop pub/sub operations from WebsocketConnection.
2020-09-23 14:51:02 -04:00
Jon Chambers
77de0f86dc
Require desktop clients to send the new gv2-2 capability flag.
2020-09-23 12:05:58 -04:00
Jon Chambers
e9e18afb4a
Add a (failing) integration test demonstrating an infinite loop.
2020-09-22 10:21:33 -04:00
Jon Chambers
62c31eb202
Revert "Revert keyspace delivery for all messages"
...
This reverts commit 4dc49604b6
.
2020-09-22 10:21:33 -04:00
Jon Chambers
5986145282
Add a second-generation GV2 capability and ignore the old capability for iOS devices.
2020-09-21 18:57:53 -04:00
Jon Chambers
83f9eacac4
Refactor UserAgentTagUtil to parse UA strings with UserAgentUtil.
2020-09-21 12:24:08 -04:00
Jon Chambers
baab6b951b
Add a general utility class for parsing user-agent strings.
2020-09-21 12:24:08 -04:00
Jon Chambers
ebc3a251b7
Drop the UUID addressing capability flag entirely.
2020-09-14 15:36:29 -04:00
Jon Chambers
4dc49604b6
Revert keyspace delivery for all messages
...
* Revert "Send all messages via keyspace notifications when a feature flag is enabled."
This reverts commit fadcf62166
.
* Revert "Consolidate semaphore release logic."
This reverts commit c02b255766
.
* Revert "Represent stored message state as an enumeration rather than a collection of booleans."
This reverts commit 89788fa665
.
* Revert "Refactor: collapse state into semaphores/atomic booleans."
This reverts commit a052e2ee8f
.
* Revert "Refactor: move sendNextMessagePage into its own method."
This reverts commit 158e5004b7
.
* Revert "Avoid querying the database if we think all new messages are in the cache."
This reverts commit 6f9ff3be37
.
* Revert "Query for more stored messages if an update happens while we're already processing a batch."
This reverts commit f766c57743
.
* Revert "Only send the "queue cleared" message once per websocket session."
This reverts commit 8f53152c3e
.
* Revert "Let processStoredMessages handle requery logic."
This reverts commit 7bbc88d716
.
* Revert "Only allow one thread to process stored messages at a time."
This reverts commit 68256d2343
.
2020-09-14 15:35:10 -04:00
Jon Chambers
fadcf62166
Send all messages via keyspace notifications when a feature flag is enabled.
2020-09-11 13:12:17 -04:00
Jon Chambers
a052e2ee8f
Refactor: collapse state into semaphores/atomic booleans.
2020-09-11 13:12:17 -04:00
Jon Chambers
6f9ff3be37
Avoid querying the database if we think all new messages are in the cache.
2020-09-11 13:12:17 -04:00
Jon Chambers
f766c57743
Query for more stored messages if an update happens while we're already processing a batch.
2020-09-11 13:12:17 -04:00
Jon Chambers
8f53152c3e
Only send the "queue cleared" message once per websocket session.
2020-09-11 13:12:17 -04:00
Jon Chambers
7bbc88d716
Let processStoredMessages handle requery logic.
2020-09-11 13:12:17 -04:00
Jon Chambers
68256d2343
Only allow one thread to process stored messages at a time.
2020-09-11 13:12:17 -04:00
Ehren Kret
f88c440c48
Automatically retry when Twilio returns unreachable ( #190 )
...
* Parse and log the Twilio error code
* Automatically retry without sender ID when Twilio returns unreachable
* Remove attempt count and pass around whether or not sender id was used
2020-09-10 13:58:39 -05:00
Jon Chambers
2c6b646d87
Enforce no capability downgrade on device verification
2020-09-09 16:05:00 -04:00
Jon Chambers
e7572094b5
Require all enabled devices to support GV2.
2020-09-09 16:05:00 -04:00
Jon Chambers
fdef21a871
Record and listen for ephemeral messages in a separate queue.
2020-09-09 14:42:09 -04:00
Jon Chambers
d40cff8a99
Revert "Add a system for storing, retrieving, and notifying listeners about ephemeral (online) messages."
...
This reverts commit 06754d6158
.
2020-09-08 15:55:09 -04:00
Jon Chambers
06754d6158
Add a system for storing, retrieving, and notifying listeners about ephemeral (online) messages.
2020-09-08 11:14:42 -04:00
Jon Chambers
1d5087374e
Jettison UUID-or-E164 plumbing in favor of UUID-only.
2020-09-08 09:30:47 -04:00
Jon Chambers
8356264fe0
Rename RedisClusterMessagesCache and related classes to just MessagesCache.
2020-09-08 09:30:47 -04:00
Jon Chambers
18ecd748dd
Entirely discard the old message cache machinery.
2020-09-08 09:30:47 -04:00
Jon Chambers
5c04f2634a
Use a dedicated executor service for dispatching keyspace notifications.
2020-09-03 11:04:48 -04:00
Jon Chambers
81e8143a43
Rely solely on the clustered message cache.
2020-09-02 11:57:33 -04:00
Jon Chambers
8409986ef5
Mirror persistence operations from the new persister to the old persister.
2020-09-02 11:02:40 -04:00
Jon Chambers
2b50367d7f
Put message persisters behind feature flags.
2020-09-02 11:02:40 -04:00
Ehren Kret
5221828705
Increase maximum sticker size to 300 kibibytes
...
In preparation for animated stickers, allow stickers to be up to 300
kibibytes.
2020-09-01 10:55:26 -04:00
Jon Chambers
ce026e7ad0
Don't send contacts to CDS if they've opted out of discoverability. (SERVER-130)
2020-08-27 15:58:02 -04:00
Jon Chambers
58e3122dab
Add a discoverableByPhoneNumber account attribute. (SERVER-129)
2020-08-27 15:58:02 -04:00
Jon Chambers
32b18c9509
Add an endpoint for getting the current state of feature flags.
2020-08-27 13:18:12 -04:00
Jon Chambers
acf52ad8a3
Make feature flag manager tests use a real database to avoid over-mocking.
2020-08-27 13:18:12 -04:00
Jon Chambers
08dd493f98
Don't report exceptions as part of traffic metrics.
2020-08-27 13:17:57 -04:00
Jon Chambers
07bbe7dfb2
Return to an async model for push notification latency.
2020-08-27 10:51:44 -04:00
Jon Chambers
0aa1b80e3e
Add a command for persisting any detached messages in the old message cache.
2020-08-27 10:51:12 -04:00
Jon Chambers
5ac390281e
Add an abstract base class for Redis singleton tests.
2020-08-27 10:51:12 -04:00
Jon Chambers
ac465c5a18
Add a Lettuce-based Redis singleton client.
2020-08-27 10:51:12 -04:00
Jon Chambers
1ef3546822
Add support for server-side feature flags
2020-08-26 20:27:33 -04:00
Jon Chambers
e74ad2b555
Make RedisClusterMessagesCache a Managed class.
2020-08-25 10:58:01 -04:00
Jon Chambers
56b27ea785
Record experiment outcomes with timers instead of counters.
2020-08-25 10:57:44 -04:00
Jon Chambers
2d75f59d33
Add support for UUID-only delivery certificates. (SERVER-132)
2020-08-20 17:05:53 -04:00
Jon Chambers
34bf5112e0
Drop TimeProvider.
2020-08-20 15:40:24 -04:00
Jon Chambers
bfe18d1d28
Re-nerf the clustered message persister.
2020-08-20 15:38:09 -04:00
Jon Chambers
6a76afc20d
Add a test to make sure the persister is respecting persist delays.
2020-08-20 15:38:09 -04:00
Jon Chambers
9c469c2f96
Base persister tests on a real Redis cluster.
2020-08-20 15:38:09 -04:00
Jon Chambers
af34b43a8d
Reactivate the message notification experiment.
2020-08-19 11:39:05 -04:00
Jon Chambers
42ea7a9814
Revert Lettuce connection pooling.
2020-08-18 16:21:42 -04:00
Jon Chambers
d243b73678
Make Lettuce connection pools configurable. Double the default size.
2020-08-18 12:20:12 -04:00
Jon Chambers
dc28d063aa
Reactivate the explicit client presence experiment.
2020-08-17 11:34:27 -04:00
Jon Chambers
bb6045c1d0
Disarm the client presence manager experiment.
2020-08-15 20:23:05 -04:00
Jon Chambers
f1a74b5939
Disarm new message keyspace notifications.
2020-08-15 20:23:05 -04:00
Jon Chambers
6fb9038af1
Move to a synchronous, pooled connection model for Redis clusters.
2020-08-14 17:15:56 -04:00
Jon Chambers
27f721a1f5
Update to resilience4j 1.5.0.
2020-08-14 17:15:56 -04:00
Jon Chambers
5717dc294e
Combine the read/write breakers for Redis clusters.
2020-08-14 17:15:56 -04:00
Jon Chambers
ae0f8df11b
Break out FaultTolerantPubSubConnection as its own thing so different use cases can have their own subscription space.
2020-08-14 17:15:56 -04:00
Jon Chambers
77460ba502
Remove keyspace notification configuration checks because AWS doesn't support `CONFIG GET`.
2020-08-13 15:32:25 -04:00
Jon Chambers
8d3316ccd6
Listen for new messages via keyspace notifications.
2020-08-13 12:17:04 -04:00
Jon Chambers
2c29f831e8
Add an explicit client presence system.
2020-08-13 10:56:26 -04:00
Jon Chambers
9457325119
Add pub/sub affordances to FaultTolerantRedisCluster.
2020-08-13 10:56:26 -04:00
Jon Chambers
189f8afcc9
Warm up the test cluster before running tests to avoid transient startup jitters.
2020-08-13 10:56:26 -04:00
Jon Chambers
5fad8f74b1
Factor MessagePersister into its own class.
2020-08-11 15:50:22 -04:00
Jon Chambers
e35e34d2e0
Move operation-mirroring logic to MessagesManager.
2020-08-11 15:50:22 -04:00
Jon Chambers
31a215d4d6
Use "global." instead of "g." as the prefix for global config options.
2020-08-11 11:55:35 -04:00
Ehren Kret
b97158bf7b
Create global remote config controllable in the signal server configuration ( #127 )
...
* Add global config controller through file rather than database
* Do no permit attempting to set or delete global config entries
2020-08-10 16:31:15 -05:00
Jon Chambers
3286c5e174
Disable Redis persistence for tests.
2020-08-06 11:22:51 -04:00
Ehren Kret
4fa3a136ad
Remove arbitrary SMS and add a NANPA message service ( #123 )
...
* Remove arbitrary SMS code
This code has run its course and is no longer needed for now.
* Add elements to sample config that were left out
* Add a messaging service for NANPA
* Fixup sample config capitalization
2020-08-05 13:35:11 -05:00
Ehren Kret
57e1339230
Further restrict user agent pattern matching ( #120 )
...
* Further restrict user agent pattern matching
* Add static qualifier to method
2020-08-04 12:58:16 -05:00
Jon Chambers
0bc5566976
Mirror delete-after-persist operations to the clustered message cache.
2020-08-04 10:58:41 -04:00
Jon Chambers
ad97731d46
Reduce the maximum number of versions in play to 1,000.
2020-08-03 15:42:15 -04:00
Jon Chambers
40684a93a2
Restrict user-agent version matching to a more confined space.
2020-08-03 15:42:15 -04:00
Jon Chambers
f3b644ceb8
Update the push latency manager to use UUIDs and a Redis cluster.
2020-08-03 15:36:02 -04:00
Jon Chambers
901ba6e87f
Added a push latency manager.
2020-08-03 15:36:02 -04:00
Jon Chambers
76389bd584
Clear would-be-persisted messages from the cache cluster, but don't store them to the database.
2020-07-30 19:14:39 -04:00
Jon Chambers
7bf8650d59
Un-manage FaultTolerantRedisCluster so it shuts down at JVM shutdown instead of Jetty shutdown.
2020-07-30 18:37:38 -04:00
Jon Chambers
baf563e46d
Temporarily disarm the actual persisting part of the message persister.
2020-07-30 17:12:37 -04:00
Jon Chambers
beac73b6c8
Add a cluster-capable message persister
2020-07-30 11:39:14 -04:00
Jon Chambers
f9f93c77e2
Use UUIDs instead of phone numbers as account identifiers in clustered message cache
2020-07-30 11:39:14 -04:00
Jon Chambers
6fc1b4c6c0
Add a cluster-backed message cache.
2020-07-30 11:39:14 -04:00
Jon Chambers
639898ec07
Expand Experiment to deal with async suppliers and Optionals.
2020-07-30 11:39:14 -04:00
Jon Chambers
3d3790fdbc
Add binary execution methods to ClusterLuaScript.
2020-07-30 11:39:14 -04:00
Jon Chambers
69c8968cb0
Add byte-array-based methods to FaultTolerantRedisCluster.
2020-07-30 11:39:14 -04:00
Jon Chambers
7f8f2641f6
Simplify registration lock counting by avoiding inactive accounts.
2020-07-28 11:48:20 -04:00
Jon Chambers
022dbb606f
Count registration lock versions when crawling the account database.
2020-07-28 11:48:20 -04:00
Jon Chambers
eea073f882
Decommission the old cache.
2020-07-28 10:29:28 -04:00
Jon Chambers
fc1d88f5bb
Read exclusively from the cache cluster.
2020-07-27 15:11:40 -04:00
Ehren Kret
89bafea61f
Move SMS strings to configuration
2020-07-27 11:23:21 -05:00
Jon Chambers
0fbf31ec98
Clear each cluster node individually.
2020-07-22 11:12:21 -04:00
Jon Chambers
db9b7ca447
Fix slot assignment when building a cluster for tests.
2020-07-22 11:04:10 -04:00
Jon Chambers
eecc71c77f
Revert batch message storage. ( #95 )
2020-07-20 16:28:32 -04:00
Jon Chambers
215125de26
Update tests.
2020-07-20 10:30:29 -04:00
Jon Chambers
247d869a5c
De-randomize message tests to minimize flakiness.
2020-07-14 18:46:39 -04:00
Ehren Kret
b7e0e5a356
Create a strategy class to decide which sender id to use
...
The rules around selecting sender ids can get complicated with some
countries not supporting it and others requiring pre-registration that
may result in having a different sender id for that country than
others. This strategy class handles the logic of dealing with this
expanded configuration and applying the appropriate sender id or none
when it's not appropriate to do so at all.
2020-07-14 10:53:48 -05:00
Jon Chambers
c5d0d4acd0
Revert "Move rate limiter logic to Lua scripts"
...
This reverts commit b585c6676d
.
2020-07-09 12:30:25 -04:00
Jon Chambers
dcb11f7606
Log errors from experiments.
2020-07-07 15:17:25 -04:00
Jon Chambers
933ce42d5a
Test rate limiters against a real cluster.
2020-07-07 15:17:25 -04:00
Ehren Kret
e021286eee
Add configuration by country for sending from alpha IDs
2020-07-07 10:17:40 -05:00
Ehren Kret
0ee7a66033
Keep trying ports until you get one lower than 55535 ( #83 )
...
* Keep trying ports until you get one lower than 55535
* Rename method and change to do...while
* Limit attempts to 11,000 to find an open redis cluster port
2020-07-07 10:12:31 -05:00
Jon Chambers
42c797ee97
Set the default log level for tests to WARN.
2020-07-07 11:05:39 -04:00
Jon Chambers
b585c6676d
Move rate limiter logic to Lua scripts
2020-07-06 10:10:13 -04:00
Jon Chambers
f5ddb0f1f8
Test ClusterLuaScript against a real Redis cluster.
2020-07-02 18:58:30 -04:00
Ehren Kret
25a5a8db68
Set avatar to null on Account when request is false ( #78 )
2020-06-29 15:53:31 -05:00
Jon Chambers
a68d91b54c
Resolve some test flakiness by adding a deterministic "wait" mechanism. (SERVER-86)
2020-06-29 12:24:25 -04:00
Jon Chambers
bbf5e1fa78
Use the UA string from websocket upgrade requests if available.
2020-06-17 15:40:18 -04:00
Jon Chambers
6adcebb247
Return to just using counters instead of timers for measuring experiment outcomes.
2020-06-17 15:34:02 -04:00
Jon Chambers
a0bebca1e6
Extend Experiment to report more detail when results don't match.
2020-06-16 16:46:41 -04:00
Jon Chambers
c17cc07b73
Instrument BlockingThreadPoolExecutor.
2020-06-12 14:43:50 -04:00
Jon Chambers
9afc433db4
Record exceptions associated with server responses.
2020-06-11 22:08:07 -04:00
Jon Chambers
f701e3d834
Record distributions of timer values; stop recording error causes.
2020-06-11 11:50:36 -04:00
Jon Chambers
0671f05c05
Introduce experiment comparison methods for suppliers.
2020-06-11 11:50:36 -04:00
Jon Chambers
0713da7393
Record experiment results with a timer instead of a counter.
2020-06-11 11:50:36 -04:00
Jon Chambers
28c765bd9a
Add an in-app-context test for websocket metrics.
2020-06-09 15:45:32 -04:00
Jon Chambers
ec858b2d4c
Set a timeout for Redis cluster operations and shut down the cluster as part of service shutdown
2020-06-07 18:27:57 -04:00
Jon Chambers
52310b5dd9
Compare results of reads from old and new Redis caches.
2020-06-07 18:27:11 -04:00
Jon Chambers
c2a4a2778e
Introduce the Experiment class to compare results from parallel systems.
2020-06-07 18:27:11 -04:00
Jon Chambers
1388103919
Mirror writes to the cache cluster.
2020-06-06 20:37:48 -04:00
Jon Chambers
fe1054d58a
Introduce a Lettuce-based fault-tolerant Redis cluster accessor.
2020-06-06 20:37:48 -04:00
Jon Chambers
ba6ac778fc
Update to Pushy v0.14.1.
2020-06-05 12:21:56 -04:00
Jon Chambers
228ffcbfce
Differentiate between websocket and "boring" HTTP traffic.
2020-05-28 12:52:49 -04:00
Jon Chambers
06c82ee87d
Celebrate the diversity of UA strings when generating tags for metrics.
2020-05-27 19:35:42 -04:00
Jon Chambers
9ba5ee8043
Move UA tag extraction into its own utility class.
2020-05-27 19:35:42 -04:00
Ehren Kret
eede4e50ca
Use hashed UUID to spread last seen updates over a full day ( #40 )
2020-05-26 13:38:52 -07:00
Jon Chambers
aa10f63d9f
Add the timestamp using the `add` method.
2020-05-22 17:39:25 -04:00
Jon Chambers
a13c44d81a
Capture request-level metrics (path, status, client platform/version).
2020-05-20 17:48:19 -04:00
Ehren Kret
7da9e88c0b
Add hashKey to RemoteConfig
...
This allows the percentages for different entries in remote config to
be aligned so one remote config can be a subset of another.
2020-05-13 11:08:22 -07:00
Jon Chambers
1c73c91133
Report the number of days until the CDS CA cert expires as a metric so we can set an alarm.
2020-05-12 12:57:11 -04:00
Jon Chambers
001a9310c3
Support device transfers (SERVER-41, SERVER-42) ( #32 )
...
This change introduces a `transfer` device capability and account creation argument in support of the iOS device transfer effort.
2020-05-12 12:23:18 -04:00
Jon Chambers
acfbab5915
Update to Pushy v0.13.11.
2020-05-04 17:50:35 -04:00
Ehren Kret
48c324fe86
Use a static sequence of randomness in tests
...
The RemoteConfigControllerTest#testMath unit test would occassionally
fail because randomness doesn't necessarily group into expected ranges
over a finite trial count. This changes the test to use a predefined
PRNG sequence instead of one that varies with each test so that the
test will no long randomly fail.
2020-04-29 17:31:43 -07:00
Ehren Kret
0c495e7e72
Workaround lack of internal retry on transaction rollback
...
The get endpoint for key fetching can fail if the transaction cannot
complete because of simultaneous modification. Clients currently
receive 500 from this and retry if it happens, but this test case runs
into it without retrying and then complains that not all the threads
completed successfully. This workaround adds some retry attempts.
2020-04-29 17:10:13 -07:00
Ehren Kret
50ccfee201
Allow remote config to send non-boolean values
...
This version of remote config allows non-boolean values to be returned
to clients but unfortunately limits the configuration to only one
value or another. There is no way to configure more than two values
for the same key with this setup.
2020-04-29 10:51:10 -07:00
Moxie Marlinspike
95f0ce1816
Support for advertising payment addresses on profile
2020-04-22 12:32:53 -07:00
Moxie Marlinspike
1408ac77f9
Make storageCapable a boolean result rather than an auth token
2020-04-09 10:19:49 -07:00
Ehren Kret
7e97d10ae1
Fix account dropping new style registration locks
2020-04-06 09:27:23 -07:00
Ehren Kret
41286650cc
Create attachments V3 endpoint for CDN2 on GCP
...
In preparation for resumable uploads, this creates a separate
attachment authorization endpoint that creates a signed URL for
accessing GCP Storage through Signal's CDN2. This should allow Signal
clients to do byte-level resume of media uploads.
2020-04-02 10:20:42 -07:00
Moxie Marlinspike
3c8e7c6c10
Add storage capability and return KBS creds on rereg w/ storage set
2020-03-27 10:45:48 -07:00
Moxie Marlinspike
ac1153c7cf
Additional limits
2020-03-14 18:10:07 -07:00
Moxie Marlinspike
3b1672a4a7
Update zkgroups to 0.4.0
2020-03-14 16:30:13 -07:00
Moxie Marlinspike
e5746c19cf
Support for GV2 capability flag
2020-02-07 11:53:28 -08:00
Moxie Marlinspike
e399f9e851
Generate external creds for KBS based on UUID
2020-01-22 13:47:33 -08:00
Moxie Marlinspike
e4e20c2d25
Add support for UUID buckets in remote config
2020-01-22 11:28:08 -08:00
Moxie Marlinspike
08a70664f4
Support for getting/setting remote config variables
2020-01-21 13:38:58 -08:00
Moxie Marlinspike
75fc35ee4b
Parameterize access to zk operations
2020-01-21 11:29:08 -08:00
Moxie Marlinspike
ba3102d667
Support for versioned profiles
...
Includes support for issuing zkgroup auth credentials
2020-01-21 11:04:06 -08:00
Moxie Marlinspike
8a9fed64f2
Support for first/last profile name length
2020-01-13 18:55:04 -08:00
Moxie Marlinspike
71c7e30548
Increase max size for sticker manifest
2019-12-19 10:29:47 -08:00
Moxie Marlinspike
886db1a2c3
Bump max sticker count to 201
2019-12-18 17:08:51 -08:00
Moxie Marlinspike
b4c06db031
Make redis failures on write-back retrieve non-fatal
2019-11-20 12:36:22 -08:00
Moxie Marlinspike
2b987e6e93
Usernames can't start with numbers
2019-11-20 12:36:22 -08:00
Moxie Marlinspike
523134f24b
Username reservation table
2019-11-20 12:36:22 -08:00
Moxie Marlinspike
99c228dd6d
Support for setting and looking up usernames
2019-11-20 12:36:22 -08:00
Moxie Marlinspike
c623f70caa
Add support for capabilities
2019-11-14 13:36:40 -08:00
Jeffrey Griffin
f16b783378
return backup, not storage, credentials for reg lock
2019-11-05 10:36:33 -08:00
Brian Acton
be4b75932b
since onCrawlChunk() is now protected, we need to invoke timeAndProcessChunk() in our unit tests
2019-10-29 18:20:03 -07:00
Brian Acton
eddfacd0f4
add timers to the account crawler listeners
2019-10-25 21:30:48 -07:00
Jeffrey Griffin
69742839c0
uuid-based account crawler
2019-08-27 14:42:14 -07:00
Moxie Marlinspike
20b5f0e681
Reset cache index
2019-08-27 14:08:50 -07:00
Moxie Marlinspike
3803b8f284
Fix for jedis pool deadlock
...
1) Remove nested pool checkouts
2) Add a max wait so it won't block forever on deadlock
2019-08-27 14:02:42 -07:00
Jeffrey Griffin
cf78047830
revert to phone number-based account crawler
2019-08-26 14:00:15 -07:00
Moxie Marlinspike
79f2efdfd9
Make UUID in sealed sender certificate optional for buggy clients
2019-08-26 11:09:54 -07:00
Jeffrey Griffin
07822b371f
replicate uuids to contact discovery
2019-08-26 11:09:54 -07:00
Moxie Marlinspike
7a3a385569
Support for UUID based addressing
2019-08-26 11:09:54 -07:00
Moxie Marlinspike
10724fee04
Support for sticker pack uploads
2019-07-24 16:29:56 -07:00
Moxie Marlinspike
11902dec3c
Support for v2 registration lock
2019-07-11 18:15:14 -07:00
Moxie Marlinspike
4fdbe9b9ff
Support for push preauth
2019-07-11 18:15:10 -07:00
Moxie Marlinspike
a6e7e30177
Add requester to recaptcha validation
2019-07-11 17:31:34 -07:00
Moxie Marlinspike
5b69ff7e94
Break out keys database and accounts database
2019-06-19 17:16:37 -07:00
Moxie Marlinspike
bc0c6be4c5
We don't need to support disabled accounts for the signed PK API
2019-06-12 12:32:15 -07:00
Moxie Marlinspike
105a38a7db
Update gcm-sender-async to use jdk11 httpclient
2019-05-30 10:46:40 -07:00
Moxie Marlinspike
a029768d24
Reenable account cleaner
2019-05-10 10:42:42 -07:00
Moxie Marlinspike
4d9c9206cf
Delay processing FCM uninstalled feedback
...
Check to make sure client is not still active before unregistering,
since FCM feedback seems to be often erroneous
2019-05-07 10:04:22 -07:00
Moxie Marlinspike
35116f9229
Clean up concepts of enabled account state
...
1) Rename "active" methods to be "enabled," since they aren't
really about "activity."
2) Make authentication fail if a device or account is in dissabled
state.
3) Let some controllers authenticate accounts that are in a
disabled state.
2019-05-04 12:31:50 -07:00
Moxie Marlinspike
a1f90cd39b
Temporarily disable account cleaner
2019-05-03 12:09:01 -07:00
Moxie Marlinspike
45dc7459b8
Temporarily disable GCM unregistered feedback
2019-05-03 11:51:21 -07:00
Jeffrey Griffin
6877b663f1
enable up to 40 account updates per chunk in AccountCleaner
2019-05-03 10:58:57 -07:00
Jeffrey Griffin
3c69f81a10
expire accounts explicitly
2019-05-02 21:14:57 -07:00
Jeffrey Griffin
d316d57e5d
fix DirectoryController tests
2019-05-02 19:20:23 -07:00
Moxie Marlinspike
0c81556b90
Switch websocket-resources from ListenableFuture to CompletableFuture
2019-05-02 15:05:44 -07:00
Moxie Marlinspike
d0d375aeb7
Break out into a multi-module project
2019-05-01 13:19:11 -07:00