From 62e5361b0c77b07b33edb17c072bcbd88b57a840 Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 24 Aug 2016 15:00:09 +0100 Subject: [PATCH 1/2] cleaned up environment file * sorted list in README and environment_test.sh * removed some unused vars * cleaned up some names to be more accurate in the readme * removed twilio as a dependency --- README.md | 26 +++++++++++++++----------- config.py | 1 - environment_test.sh | 5 ++--- requirements.txt | 1 - 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 8d31a6be3..018c372de 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Get and update notification status. mkvirtualenv -p /usr/local/bin/python3 notifications-api ``` -Creating the environment.sh file. Replace [unique-to-environment] with your something unique to the environment. The local development environments are using the AWS on preview. +Creating the environment.sh file. Replace [unique-to-environment] with your something unique to the environment. Your AWS credentials should be set up for notify-tools (the development/CI AWS account). Create a local environment.sh file containing the following: @@ -24,30 +24,34 @@ Create a local environment.sh file containing the following: echo " export NOTIFY_ENVIRONMENT='development' export ADMIN_BASE_URL='http://localhost:6012' -export ADMIN_CLIENT_SECRET='dev-notify-secret-key' export ADMIN_CLIENT_USER_NAME='dev-notify-admin' +export ADMIN_CLIENT_SECRET='dev-notify-secret-key' +export API_HOST_NAME='http://localhost:6011' + export AWS_REGION='eu-west-1' +export AWS_ACCESS_KEY_ID=[MY ACCESS KEY] +export AWS_SECRET_ACCESS_KEY=[MY SECRET] + export DANGEROUS_SALT='dev-notify-salt' export FIRETEXT_API_KEY=[contact team member for api key] -export INVITATION_EMAIL_FROM='invites@notifications.service.gov.uk' +export FROM_NUMBER='40605' +export INVITATION_EMAIL_FROM='invites' export INVITATION_EXPIRATION_DAYS=2 -export NOTIFY_EMAIL_DOMAIN='notify.works' -export NOTIFY_JOB_QUEUE='[unique-to-environment]-notify-jobs-queue' # NOTE unique prefix -export NOTIFICATION_QUEUE_PREFIX='[unique-to-environment]-notification_development' # NOTE unique prefix +export MMG_API_KEY=mmg=secret-key +export MMG_URL="https://api.mmg.co.uk/json/api.php" +export NOTIFICATION_QUEUE_PREFIX='[unique-to-environment]' # +export NOTIFY_EMAIL_DOMAIN='notify.tools' export SECRET_KEY='dev-notify-secret-key' export SQLALCHEMY_DATABASE_URI='postgresql://localhost/notification_api' -export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.works' -export MMG_API_KEY=mmg=secret-key export STATSD_ENABLED=True export STATSD_HOST="localhost" export STATSD_PORT=1000 export STATSD_PREFIX="stats-prefix" -export FROM_NUMBER='from_number' +export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.tools' "> environment.sh ``` -NOTE: the DELIVERY_CLIENT_USER_NAME, DELIVERY_CLIENT_SECRET, NOTIFY_JOB_QUEUE and NOTIFICATION_QUEUE_PREFIX must be the same as the ones in the [notifications-delivery](https://github.com/alphagov/notifications-delivery) app. -The SECRET_KEY and DANGEROUS_SALT are the same in [notifications-delivery](https://github.com/alphagov/notifications-delivery) and [notifications-admin](https://github.com/alphagov/notifications-admin) app. +NOTE: The SECRET_KEY and DANGEROUS_SALT should match those in the [notifications-admin](https://github.com/alphagov/notifications-admin) app. NOTE: Also note the unique prefix for the queue names. This prevents clashing with others queues in shared amazon environment and using a prefix enables filtering by queue name in the SQS interface. diff --git a/config.py b/config.py index d8067dc53..6e569bb23 100644 --- a/config.py +++ b/config.py @@ -15,7 +15,6 @@ class Config(object): INVITATION_EMAIL_FROM = os.environ['INVITATION_EMAIL_FROM'] NOTIFY_APP_NAME = 'api' NOTIFY_LOG_PATH = '/var/log/notify/application.log' - NOTIFY_JOB_QUEUE = os.environ['NOTIFY_JOB_QUEUE'] # Notification Queue names are a combination of a prefix plus a name NOTIFICATION_QUEUE_PREFIX = os.environ['NOTIFICATION_QUEUE_PREFIX'] SECRET_KEY = os.environ['SECRET_KEY'] diff --git a/environment_test.sh b/environment_test.sh index d4665632b..c265171d5 100644 --- a/environment_test.sh +++ b/environment_test.sh @@ -7,11 +7,10 @@ export AWS_REGION='eu-west-1' export DANGEROUS_SALT='dangerous-salt' export INVITATION_EMAIL_FROM='invites' export INVITATION_EXPIRATION_DAYS=2 -export NOTIFY_JOB_QUEUE='notify-jobs-queue-test' -export NOTIFICATION_QUEUE_PREFIX='notification_development-test' +export NOTIFICATION_QUEUE_PREFIX='test-env-not-used' export SECRET_KEY='secret-key' export SQLALCHEMY_DATABASE_URI=${TEST_DATABASE:='postgresql://localhost/test_notification_api'} -export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.works' +export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.tools' export FIRETEXT_API_KEY="Firetext" export NOTIFY_EMAIL_DOMAIN="test.notify.com" export MMG_API_KEY='mmg-secret-key' diff --git a/requirements.txt b/requirements.txt index 904bd6e3e..f3fa950eb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -16,7 +16,6 @@ credstash==1.8.0 boto3==1.2.3 boto==2.39.0 celery==3.1.20 -twilio==4.6.0 monotonic==0.3 statsd==3.2.1 From 5ac4e630d814cb87f055396af15f26251c62e74a Mon Sep 17 00:00:00 2001 From: Leo Hemsted Date: Wed, 31 Aug 2016 14:49:26 +0100 Subject: [PATCH 2/2] remove some legacy code/tests relating to old invite/verification code --- README.md | 1 - app/notifications/rest.py | 21 ---------- config.py | 1 - environment_test.sh | 1 - .../app/notifications/rest/test_callbacks.py | 41 ------------------- 5 files changed, 65 deletions(-) diff --git a/README.md b/README.md index 018c372de..ca31534b3 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,6 @@ export STATSD_ENABLED=True export STATSD_HOST="localhost" export STATSD_PORT=1000 export STATSD_PREFIX="stats-prefix" -export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.tools' "> environment.sh ``` diff --git a/app/notifications/rest.py b/app/notifications/rest.py index 8e4af63b2..1249926a2 100644 --- a/app/notifications/rest.py +++ b/app/notifications/rest.py @@ -77,15 +77,6 @@ def process_ses_response(): notification_statistics_status = aws_response_dict['notification_statistics_status'] try: - source = ses_message['mail']['source'] - if is_not_a_notification(source): - current_app.logger.info( - "SES callback for notify success:. source {} status {}".format(source, notification_status) - ) - return jsonify( - result="success", message="SES callback succeeded" - ), 200 - reference = ses_message['mail']['messageId'] if not notifications_dao.update_notification_status_by_reference( reference, @@ -118,18 +109,6 @@ def process_ses_response(): raise InvalidRequest(error, status_code=400) -def is_not_a_notification(source): - invite_email = "{}@{}".format( - current_app.config['INVITATION_EMAIL_FROM'], - current_app.config['NOTIFY_EMAIL_DOMAIN'] - ) - if current_app.config['VERIFY_CODE_FROM_EMAIL_ADDRESS'] == source: - return True - if invite_email == source: - return True - return False - - @notifications.route('/notifications/sms/mmg', methods=['POST']) def process_mmg_response(): client_name = 'MMG' diff --git a/config.py b/config.py index 6e569bb23..33f0540cd 100644 --- a/config.py +++ b/config.py @@ -22,7 +22,6 @@ class Config(object): SQLALCHEMY_DATABASE_URI = os.environ['SQLALCHEMY_DATABASE_URI'] SQLALCHEMY_RECORD_QUERIES = True SQLALCHEMY_TRACK_MODIFICATIONS = True - VERIFY_CODE_FROM_EMAIL_ADDRESS = os.environ['VERIFY_CODE_FROM_EMAIL_ADDRESS'] NOTIFY_EMAIL_DOMAIN = os.environ['NOTIFY_EMAIL_DOMAIN'] PAGE_SIZE = 50 SMS_CHAR_COUNT_LIMIT = 495 diff --git a/environment_test.sh b/environment_test.sh index c265171d5..d0c536072 100644 --- a/environment_test.sh +++ b/environment_test.sh @@ -10,7 +10,6 @@ export INVITATION_EXPIRATION_DAYS=2 export NOTIFICATION_QUEUE_PREFIX='test-env-not-used' export SECRET_KEY='secret-key' export SQLALCHEMY_DATABASE_URI=${TEST_DATABASE:='postgresql://localhost/test_notification_api'} -export VERIFY_CODE_FROM_EMAIL_ADDRESS='no-reply@notify.tools' export FIRETEXT_API_KEY="Firetext" export NOTIFY_EMAIL_DOMAIN="test.notify.com" export MMG_API_KEY='mmg-secret-key' diff --git a/tests/app/notifications/rest/test_callbacks.py b/tests/app/notifications/rest/test_callbacks.py index b6fc84757..8a7f7d572 100644 --- a/tests/app/notifications/rest/test_callbacks.py +++ b/tests/app/notifications/rest/test_callbacks.py @@ -634,39 +634,6 @@ def test_ses_callback_should_set_status_to_permanent_failure(notify_api, assert stats.emails_failed == 1 -def test_should_handle_invite_email_callbacks(notify_api, notify_db, notify_db_session): - with notify_api.test_request_context(): - with notify_api.test_client() as client: - notify_api.config['INVITATION_EMAIL_FROM'] = 'test-invite' - notify_api.config['NOTIFY_EMAIL_DOMAIN'] = 'test-domain.com' - - response = client.post( - path='/notifications/email/ses', - data=ses_invite_callback(), - headers=[('Content-Type', 'text/plain; charset=UTF-8')] - ) - json_resp = json.loads(response.get_data(as_text=True)) - assert response.status_code == 200 - assert json_resp['result'] == 'success' - assert json_resp['message'] == 'SES callback succeeded' - - -def test_should_handle_validation_code_callbacks(notify_api, notify_db, notify_db_session): - with notify_api.test_request_context(): - with notify_api.test_client() as client: - notify_api.config['VERIFY_CODE_FROM_EMAIL_ADDRESS'] = 'valid-code@test.com' - - response = client.post( - path='/notifications/email/ses', - data=ses_validation_code_callback(), - headers=[('Content-Type', 'text/plain; charset=UTF-8')] - ) - json_resp = json.loads(response.get_data(as_text=True)) - assert response.status_code == 200 - assert json_resp['result'] == 'success' - assert json_resp['message'] == 'SES callback succeeded' - - def test_process_mmg_response_records_statsd(notify_api, sample_notification, mocker): with notify_api.test_client() as client: mocker.patch('app.statsd_client.incr') @@ -698,14 +665,6 @@ def test_firetext_callback_should_record_statsd(notify_api, notify_db, notify_db app.statsd_client.incr.assert_any_call("callback.firetext.delivered") -def ses_validation_code_callback(): - return b'{\n "Type" : "Notification",\n "MessageId" : "ref",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:testing",\n "Message" : "{\\"notificationType\\":\\"Delivery\\",\\"mail\\":{\\"timestamp\\":\\"2016-03-14T12:35:25.909Z\\",\\"source\\":\\"valid-code@test.com\\",\\"sourceArn\\":\\"arn:aws:ses:eu-west-1:123456789012:identity/testing-notify\\",\\"sendingAccountId\\":\\"123456789012\\",\\"messageId\\":\\"ref\\",\\"destination\\":[\\"testing@digital.cabinet-office.gov.uk\\"]},\\"delivery\\":{\\"timestamp\\":\\"2016-03-14T12:35:26.567Z\\",\\"processingTimeMillis\\":658,\\"recipients\\":[\\"testing@digital.cabinet-office.gov.u\\"],\\"smtpResponse\\":\\"250 2.0.0 OK 1457958926 uo5si26480932wjc.221 - gsmtp\\",\\"reportingMTA\\":\\"a6-238.smtp-out.eu-west-1.amazonses.com\\"}}",\n "Timestamp" : "2016-03-14T12:35:26.665Z",\n "SignatureVersion" : "1",\n "Signature" : "X8d7eTAOZ6wlnrdVVPYanrAlsX0SMPfOzhoTEBnQqYkrNWTqQY91C0f3bxtPdUhUtOowyPAOkTQ4KnZuzphfhVb2p1MyVYMxNKcBFB05/qaCX99+92fjw4x9LeUOwyGwMv5F0Vkfi5qZCcEw69uVrhYLVSTFTrzi/yCtru+yFULMQ6UhbY09GwiP6hjxZMVr8aROQy5lLHglqQzOuSZ4KeD85JjifHdKzlx8jjQ+uj+FLzHXPMAPmPU1JK9kpoHZ1oPshAFgPDpphJe+HwcJ8ezmk+3AEUr3wWli3xF+49y8Z2anASSVp6YI2YP95UT8Rlh3qT3T+V9V8rbSVislxA==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:302763885840:preview-emails:d6aad3ef-83d6-4cf3-a470-54e2e75916da"\n}' # noqa - - -def ses_invite_callback(): - return b'{\n "Type" : "Notification",\n "MessageId" : "ref",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:testing",\n "Message" : "{\\"notificationType\\":\\"Delivery\\",\\"mail\\":{\\"timestamp\\":\\"2016-03-14T12:35:25.909Z\\",\\"source\\":\\"test-invite@test-domain.com\\",\\"sourceArn\\":\\"arn:aws:ses:eu-west-1:123456789012:identity/testing-notify\\",\\"sendingAccountId\\":\\"123456789012\\",\\"messageId\\":\\"ref\\",\\"destination\\":[\\"testing@digital.cabinet-office.gov.uk\\"]},\\"delivery\\":{\\"timestamp\\":\\"2016-03-14T12:35:26.567Z\\",\\"processingTimeMillis\\":658,\\"recipients\\":[\\"testing@digital.cabinet-office.gov.u\\"],\\"smtpResponse\\":\\"250 2.0.0 OK 1457958926 uo5si26480932wjc.221 - gsmtp\\",\\"reportingMTA\\":\\"a6-238.smtp-out.eu-west-1.amazonses.com\\"}}",\n "Timestamp" : "2016-03-14T12:35:26.665Z",\n "SignatureVersion" : "1",\n "Signature" : "X8d7eTAOZ6wlnrdVVPYanrAlsX0SMPfOzhoTEBnQqYkrNWTqQY91C0f3bxtPdUhUtOowyPAOkTQ4KnZuzphfhVb2p1MyVYMxNKcBFB05/qaCX99+92fjw4x9LeUOwyGwMv5F0Vkfi5qZCcEw69uVrhYLVSTFTrzi/yCtru+yFULMQ6UhbY09GwiP6hjxZMVr8aROQy5lLHglqQzOuSZ4KeD85JjifHdKzlx8jjQ+uj+FLzHXPMAPmPU1JK9kpoHZ1oPshAFgPDpphJe+HwcJ8ezmk+3AEUr3wWli3xF+49y8Z2anASSVp6YI2YP95UT8Rlh3qT3T+V9V8rbSVislxA==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:302763885840:preview-emails:d6aad3ef-83d6-4cf3-a470-54e2e75916da"\n}' # noqa - - def ses_notification_callback(ref='ref'): return str.encode( '{\n "Type" : "Notification",\n "MessageId" : "%(ref)s",\n "TopicArn" : "arn:aws:sns:eu-west-1:123456789012:testing",\n "Message" : "{\\"notificationType\\":\\"Delivery\\",\\"mail\\":{\\"timestamp\\":\\"2016-03-14T12:35:25.909Z\\",\\"source\\":\\"test@test-domain.com\\",\\"sourceArn\\":\\"arn:aws:ses:eu-west-1:123456789012:identity/testing-notify\\",\\"sendingAccountId\\":\\"123456789012\\",\\"messageId\\":\\"%(ref)s\\",\\"destination\\":[\\"testing@digital.cabinet-office.gov.uk\\"]},\\"delivery\\":{\\"timestamp\\":\\"2016-03-14T12:35:26.567Z\\",\\"processingTimeMillis\\":658,\\"recipients\\":[\\"testing@digital.cabinet-office.gov.uk\\"],\\"smtpResponse\\":\\"250 2.0.0 OK 1457958926 uo5si26480932wjc.221 - gsmtp\\",\\"reportingMTA\\":\\"a6-238.smtp-out.eu-west-1.amazonses.com\\"}}",\n "Timestamp" : "2016-03-14T12:35:26.665Z",\n "SignatureVersion" : "1",\n "Signature" : "X8d7eTAOZ6wlnrdVVPYanrAlsX0SMPfOzhoTEBnQqYkrNWTqQY91C0f3bxtPdUhUtOowyPAOkTQ4KnZuzphfhVb2p1MyVYMxNKcBFB05/qaCX99+92fjw4x9LeUOwyGwMv5F0Vkfi5qZCcEw69uVrhYLVSTFTrzi/yCtru+yFULMQ6UhbY09GwiP6hjxZMVr8aROQy5lLHglqQzOuSZ4KeD85JjifHdKzlx8jjQ+uj+FLzHXPMAPmPU1JK9kpoHZ1oPshAFgPDpphJe+HwcJ8ezmk+3AEUr3wWli3xF+49y8Z2anASSVp6YI2YP95UT8Rlh3qT3T+V9V8rbSVislxA==",\n "SigningCertURL" : "https://sns.eu-west-1.amazonaws.com/SimpleNotificationService-bb750dd426d95ee9390147a5624348ee.pem",\n "UnsubscribeURL" : "https://sns.eu-west-1.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:eu-west-1:302763885840:preview-emails:d6aad3ef-83d6-4cf3-a470-54e2e75916da"\n}' % {'ref': ref} # noqa