Add pretend authenticated API for govuk-alerts

We can define the API properly in future work. I've used a separate
blueprint from "broadcasts" since this API is purely internal, and
it's helpful to make it clear it's specific to govuk-alerts.
This commit is contained in:
Ben Thorner
2021-07-29 12:25:28 +01:00
parent 3e32fc99b8
commit 4b7ad89f6a
6 changed files with 45 additions and 2 deletions

View File

@@ -271,10 +271,16 @@ def register_blueprint(application):
def register_v2_blueprints(application):
from app.authentication.auth import requires_auth
from app.authentication.auth import (
requires_auth,
requires_govuk_alerts_auth,
)
from app.v2.broadcast.post_broadcast import (
v2_broadcast_blueprint as post_broadcast,
)
from app.v2.govuk_alerts.get_broadcasts import (
v2_govuk_alerts_blueprint as get_broadcasts,
)
from app.v2.inbound_sms.get_inbound_sms import (
v2_inbound_sms_blueprint as get_inbound_sms,
)
@@ -315,6 +321,9 @@ def register_v2_blueprints(application):
post_broadcast.before_request(requires_auth)
application.register_blueprint(post_broadcast)
get_broadcasts.before_request(requires_govuk_alerts_auth)
application.register_blueprint(get_broadcasts)
def init_app(app):

View File

@@ -60,6 +60,10 @@ def requires_no_auth():
pass
def requires_govuk_alerts_auth():
requires_internal_auth(current_app.config.get('GOVUK_ALERTS_CLIENT_ID'))
def requires_admin_auth():
requires_internal_auth(current_app.config.get('ADMIN_CLIENT_ID'))

View File

@@ -89,6 +89,7 @@ class Config(object):
# secrets that internal apps, such as the admin app or document download, must use to authenticate with the API
ADMIN_CLIENT_ID = 'notify-admin'
GOVUK_ALERTS_CLIENT_ID = 'govuk-alerts'
INTERNAL_CLIENT_API_KEYS = {
ADMIN_CLIENT_ID: API_INTERNAL_SECRETS
@@ -406,7 +407,8 @@ class Development(Config):
LETTER_SANITISE_BUCKET_NAME = 'development-letters-sanitise'
INTERNAL_CLIENT_API_KEYS = {
Config.ADMIN_CLIENT_ID: ['dev-notify-secret-key']
Config.ADMIN_CLIENT_ID: ['dev-notify-secret-key'],
Config.GOVUK_ALERTS_CLIENT_ID: ['govuk-alerts-secret-key']
}
SECRET_KEY = 'dev-notify-secret-key'

View File

@@ -0,0 +1,11 @@
from flask import Blueprint
from app.v2.errors import register_errors
v2_govuk_alerts_blueprint = Blueprint(
"v2_govuk-alerts_blueprint",
__name__,
url_prefix='/v2/govuk-alerts',
)
register_errors(v2_govuk_alerts_blueprint)

View File

@@ -0,0 +1,8 @@
from flask import jsonify
from app.v2.govuk_alerts import v2_govuk_alerts_blueprint
@v2_govuk_alerts_blueprint.route('')
def get_broadcasts():
return jsonify({})

View File

@@ -78,6 +78,15 @@ def test_requires_admin_auth_should_allow_valid_token_for_request(client):
assert response.status_code == 200
def test_requires_govuk_alerts_auth_should_allow_valid_token_for_request(client):
govuk_alerts_jwt_client_id = current_app.config['GOVUK_ALERTS_CLIENT_ID']
govuk_alerts_jwt_secret = current_app.config['INTERNAL_CLIENT_API_KEYS'][govuk_alerts_jwt_client_id][0]
govuk_alerts_jwt_token = create_jwt_token(govuk_alerts_jwt_secret, govuk_alerts_jwt_client_id)
response = client.get('/v2/govuk-alerts', headers={'Authorization': 'Bearer {}'.format(govuk_alerts_jwt_token)})
assert response.status_code == 200
def test_get_auth_token_should_not_allow_request_with_no_token(client):
request.headers = {}
with pytest.raises(AuthError) as exc: