Commit Graph

7662 Commits

Author SHA1 Message Date
Leo Hemsted
f12c949ae9 create broadcast_provider_message and use id from that instead
(instead of using the id from broadcast_event)

we need every XML blob we send to have a different ID. if we're sending
different XML blobs for each provider, then each one should have a
different identifier. So, instead of taking the identifier from the
broadcast_event, take it from the broadcast_provider_message instead.

Note: We're still going to the broadcast_event for most fields, to
ensure they stay consistent between different providers. The last thing
we want is for different phone networks to get different content
2020-11-19 15:50:37 +00:00
Leo Hemsted
7cc83e04eb move BroadcastProvider from models.py to config.py
It's not something that is tied to a database table, and was causing
circular import issues
2020-11-19 15:50:37 +00:00
Leo Hemsted
bc3512467b send messages to multiple providers
at the moment only EE is enabled (this is set in app.config, but also,
only EE have a function defined for them so even if another provider was
enabled without changing the dict in cbc_proxy.py we won't trigger
anything). this commit just adds wrapper tasks that check what providers
are enabled, and invokes the send function for each provider.

The send function doesn't currently distinguish between providers for
now - as we only have EE set up. in the future we'll want to separate
the cbc_proxy_client into separate clients for separate providers.
Different providers have different lambda functions, and have different
requirements. For example, we know that the two different CBC software
solutions handle references to previous messages differently.
2020-11-19 15:50:37 +00:00
Leo Hemsted
2e665de46d add broadcast provider message table to DB
we need to track the state of sending to different provider separately
(and trigger them off separately, refer to references separately, etc)
2020-11-19 15:50:37 +00:00
Leo Hemsted
3aa602bd6b Merge pull request #3036 from alphagov/cbc-proxy-refactor
Cbc proxy refactor
2020-11-19 15:50:02 +00:00
Tom Byers
a35199a17a Merge pull request #3038 from alphagov/bump-utils
Bump utils to 43.5.1
2020-11-19 13:20:15 +00:00
Pea M. Tyczynska
ffb19346e0 Merge pull request #3039 from alphagov/give-providers-equal-shares-of-traffic
Give sms providers equal shares of traffic
2020-11-19 10:48:56 +00:00
Pea Tyczynska
60bd9a6f82 Give providers equal shares of traffic
This is done on a temporary basis for billing-related reasons.
2020-11-19 10:28:42 +00:00
Tom Byers
2021555a07 Bump utils to 43.5.1
Brings in
https://github.com/alphagov/notifications-utils/pull/807
which removes a hack we had in our email template
to deal with this bug:

https://www.pivotaltracker.com/story/show/161183433

This behaviour is no longer happening so this
removes the hack.

See
https://www.pivotaltracker.com/story/show/161183433/comments/219297211
for evidence of the change in behaviour.
2020-11-18 16:43:22 +00:00
David McDonald
13450c8429 Merge pull request #3032 from alphagov/4xx-callbacks
Log when we don't retry a callback
2020-11-18 12:25:38 +00:00
Leo Hemsted
b72640bf5e refactor cbc proxy and fix tests
moved the lambda invocation to a separate function to keep DRY

asserts on exception types need to be outside of with blocks, or they
won't trip (as the exception will stop execution of the inner with
block). the asserts were also the wrong way round so fixed that.
2020-11-17 13:35:04 +00:00
Leo Hemsted
732c203d3e rename clients to notification_provider_clients
i think it's causing havoc with my attempts to mock stuff in the
`app.clients` directory because it's also accessible at that path. the
name's super vague and doesn't explain what it is anyway
2020-11-17 13:34:58 +00:00
David McDonald
224d9bf35a Log when we don't retry a callback
We don't retry any callbacks when it receives a 4xx status. We should
probably be aware of this happening and at the moment there is nothing
in our logs to easily identify whether the request failed and is being
retried or if it failed and is not being retried. This will enable us to
search our logs easily and figure out how much it's happening.

It's quite likely that we should in the future allow callbacks to retry
if they get a 429 http response (rate limiting) but we should do this in
a smart way (exponential backoff) and so this is a first step to being
aware of how big a problem it is in case we want to do something about
it.
2020-11-17 11:26:32 +00:00
Katie Smith
5924de9c14 Merge pull request #3034 from alphagov/bump-utils-43.5.0
Bump notifications-utils to 43.5.0
2020-11-17 10:16:21 +00:00
Katie Smith
47e427d0a9 Bump notifications-utils to 43.5.0
This version changes the `.fragment_count` method of the
`BaseSMSTemplate` class to take extended GSM characters into account.
2020-11-17 09:46:26 +00:00
Rebecca Law
71f3cf5948 Merge pull request #3027 from alphagov/check-content-length-after-doc-download-complete
Change how we validate the length of templates.
2020-11-16 14:15:13 +00:00
Rebecca Law
2e114b7404 Bump utils requirement 2020-11-16 14:04:37 +00:00
Rebecca Law
171bc74c69 Rename check_character_count method to check_is_message_to_long.
Add different error message for email and text if content is too long.
Use utils version with is_message_too_long method implemented for email templates.
2020-11-09 16:06:57 +00:00
Rebecca Law
5bacfc1df9 Change how we validate the length of templates.
We want to add validation for an email that's too long, that way the user knows why the message is failing. At the moment if an email is too long it will get a technical failure, after the retries fail. This way the email post will get a validation error.

Once this: https://github.com/alphagov/notifications-utils/pull/804 is reverted, we can update the utils version.
2020-11-09 15:54:39 +00:00
Toby Lorne
918bf6d97c Merge pull request #3030 from alphagov/revert-3029-sslmode
Revert "Specify sslmode in Cloud Foundry environment variables"
2020-11-09 12:20:12 +00:00
Toby Lorne
31f845bbff Revert "Specify sslmode in Cloud Foundry environment variables" 2020-11-09 12:04:40 +00:00
Toby Lorne
eb072ce5ba Merge pull request #3029 from alphagov/sslmode
Specify sslmode in Cloud Foundry environment variables
2020-11-09 11:41:54 +00:00
Toby Lorne
cfcc3128c2 db: specify sslmode in Cloud Foundry env
Refer to
https://www.postgresql.org/docs/11/libpq-connect.html#LIBPQ-CONNECT-SSLMODE

GOV.UK PaaS gives us the database URI, and we use the default mode of
postgres auth which prefers a TLS connection instead of a plain TCP
connection

We are now specifying the SSL mode in the URI when establishing our
connection to the database, so that:

* We will not connect to the database via a plaintext connection
* We will verify the database connection against a list of trusted CAs

The RDS CA from which the database's certificate is issued is added into
the Cloud Foundry app container via
925681f19b/manifests/cf-manifest/operations.d/350-diego-cell.yml (L17-L22)

Signed-off-by: Toby Lorne <toby.lornewelch-richards@digital.cabinet-office.gov.uk>
Co-authored-by: David <david.mcdonald@digital.cabinet-office.gov.uk>
2020-11-09 10:47:44 +00:00
Toby Lorne
29b6ed427d Merge pull request #3028 from alphagov/link-test-less-often
celery: link test less often
2020-11-06 14:04:49 +00:00
Toby Lorne
00a1ba4b41 celery: link test less often
This is causing the disk of the CBCs to fill up quickly, and their
logrotate seems a bit flakey

Reducing the rate will ensure the disks fill up less often

Signed-off-by: Toby Lorne <toby.lornewelch-richards@digital.cabinet-office.gov.uk>
2020-11-06 13:37:39 +00:00
Katie Smith
20b329e50c Merge pull request #3026 from alphagov/pyup-scheduled-update-2020-11-04
Scheduled weekly dependency update for week 44
2020-11-06 13:02:19 +00:00
Katie Smith
4582433fdf Freeze requirements 2020-11-06 10:56:52 +00:00
pyup-bot
b2fe9d0a6f Update sqlalchemy from 1.3.19 to 1.3.20 2020-11-06 10:51:09 +00:00
pyup-bot
87a093845a Update psycopg2-binary from 2.8.5 to 2.8.6 2020-11-06 10:51:09 +00:00
pyup-bot
a3ba4b3e3d Update iso8601 from 0.1.12 to 0.1.13 2020-11-06 10:51:09 +00:00
pyup-bot
73ca396504 Update eventlet from 0.27.0 to 0.29.1 2020-11-06 10:51:09 +00:00
pyup-bot
8cb1797ec4 Update cffi from 1.14.2 to 1.14.3 2020-11-04 13:00:02 +00:00
Katie Smith
1806a6c8b3 Merge pull request #3025 from alphagov/revert-2992-validate-email-size
Revert "Tailor message-too-long error message depending on the notification type"
2020-11-03 11:09:47 +00:00
Katie Smith
c4075f1fc0 Revert "Tailor message-too-long error message depending on the notification type" 2020-11-03 10:55:15 +00:00
Rebecca Law
184db4fa5d Merge pull request #3024 from alphagov/revert-3020-revert-3000-add-save-sms-api-task
Add a task to save-api-sms for high volume services.
2020-11-02 12:36:19 +00:00
Pea M. Tyczynska
b503267062 Merge pull request #2992 from alphagov/validate-email-size
Tailor message-too-long error message depending on the notification type
2020-10-30 11:07:29 +00:00
Pea Tyczynska
41d1cf453d Update limit to 1MB and update tests
SES rejects email messages bigger than 10485760 bytes (just over 10 MB per message (after base64 encoding)):
https://docs.aws.amazon.com/ses/latest/DeveloperGuide/quotas.html#limits-message

Base64 is apparently wasteful because we use just 64 different values per byte, whereas a byte can represent
256 different characters. That is, we use bytes (which are 8-bit words) as 6-bit words. There is
a waste of 2 bits for each 8 bits of transmission data. To send three bytes of information
(3 times 8 is 24 bits), you need to use four bytes (4 times 6 is again 24 bits). Thus the base64 version
of a file is 4/3 larger than it might be. So we use 33% more storage than we could.
https://lemire.me/blog/2019/01/30/what-is-the-space-overhead-of-base64-encoding/

That brings down our max safe size to 7.5 MB == 7500000 bytes before base64 encoding

But this is not the end! The message we send to SES is structured as follows:
"Message": {
    'Subject': {
        'Data': subject,
    },
    'Body': {'Text': {'Data': body}, 'Html': {'Data': html_body}}
},
Which means that we are sending the contents of email message twice in one request: once in plain text
and once with html tags. That means our plain text content needs to be much shorter to make sure we
fit within the limit, especially since HTML body can be much byte-heavier than plain text body.

Hence, we decided to put the limit at 1MB, which is equivalent of between 250 and 500 pages of text.
That's still an extremely long email, and should be sufficient for all normal use, while at the same
time giving us safe margin while sending the emails through Amazon SES.
2020-10-29 14:07:49 +00:00
Pea Tyczynska
9708b09ba3 Tailor message-too-long error message
depending on the notification type.

Up until now, only sms messages could get message-too-long error,
but now we also need to validate the size of email messages, so
the message content needs to be tailored to the notification type.
2020-10-29 14:07:48 +00:00
Rebecca Law
4a9eca3dff Remove space between queue names. Doh 2020-10-29 11:14:11 +00:00
Rebecca Law
29b6f84f6c Revert "Revert "Add a task to save-api-sms for high volume services."" 2020-10-29 11:12:46 +00:00
Toby Lorne
d39379062d Merge pull request #3022 from alphagov/sent-finishes-broadcast
client: cbc_proxy passes through sent/expires
2020-10-28 11:51:31 +00:00
Toby Lorne
dd012d6831 client: cbc_proxy passes through sent/expires
A BroadcastEvent knows when an event was sent and should expire

We pass through these values directly to the CBC Proxy, because
BroadcastEvent knows how they should be formatted

Signed-off-by: Toby Lorne <toby.lornewelch-richards@digital.cabinet-office.gov.uk>
2020-10-28 11:37:06 +00:00
Toby Lorne
2c29b45c9c Merge pull request #3018 from alphagov/link-tests
Link tests
2020-10-28 09:58:56 +00:00
Rebecca Law
ddee6e7dd5 Merge pull request #3021 from alphagov/fix-utc-bug
Quick UTC bug fix
2020-10-27 17:37:03 +00:00
Rebecca Law
df325c78b7 There seems to be a UTC time bug around the dao_get_uploads_by_service_id function.
To fix the build tonight I'm putting freezing the time for the test. But will investigate further tomorrow.
2020-10-27 17:25:58 +00:00
Rebecca Law
f47a1af305 Merge pull request #3020 from alphagov/revert-3000-add-save-sms-api-task
Revert "Add a task to save-api-sms for high volume services."
2020-10-27 16:28:16 +00:00
Rebecca Law
06ff1bf596 Revert "Add a task to save-api-sms for high volume services." 2020-10-27 16:18:57 +00:00
Toby Lorne
dda71bf685 celery: add task for triggering link tests
We want to periodically kick off some link tests, so that:

- we are periodically communicating with the CBC Proxies
- each CBC Proxy is periodically communicating with its CBC

This simulation of traffic to the CBC will give us advance warning if
something is going to break, or is broken, before someone tries to send
a real live message

Signed-off-by: Toby Lorne <toby.lornewelch-richards@digital.cabinet-office.gov.uk>
Co-authored-by: Richard <richard.baker@digital.cabinet-office.gov.uk>
Co-authored-by: Pea <pea.tyczynska@digital.cabinet-office.gov.uk>
2020-10-27 15:39:28 +00:00
Toby Lorne
7542709455 clients: cbc_proxy sends message_type
When we ask the CBC Proxy to send a message, we should specify that we
want to send a real message, when we want a real message

We will do this by specifying the message_type which can have 4 types, 3
of which represent a real message:

| Name   | Effect                   |
| ------ | ------------------------ |
| alert  | Create an alert          |
| update | Update an existing alert |
| cancel | Cancel an existing alert |
| test   | Send a link test         |

We will use message_type to represent the table above

Signed-off-by: Toby Lorne <toby.lornewelch-richards@digital.cabinet-office.gov.uk>
Co-authored-by: Richard <richard.baker@digital.cabinet-office.gov.uk>
Co-authored-by: Pea <pea.tyczynska@digital.cabinet-office.gov.uk>
2020-10-27 15:24:02 +00:00
Rebecca Law
ef416a64ed Merge pull request #3000 from alphagov/add-save-sms-api-task
Add a task to save-api-sms for high volume services.
2020-10-27 14:41:51 +00:00