Make logo CDN domain into simple config

Having this as a function which does string parsing and manipulation
surprised me a bit when I was trying to figure out why something wasn’t
working.

It’s more in line with the way we do other config like this (for example
`ASSET_PATH`) to make it a simple config variable, rather than trying to
be clever and guess things based on other config variables.

It’s also less code, and is explicit enough that it doesn’t need tests.
This commit is contained in:
Chris Hill-Scott
2022-01-26 14:44:33 +00:00
parent 2224eacf6b
commit 4f672cb5dc
8 changed files with 19 additions and 40 deletions

View File

@@ -129,7 +129,6 @@ from app.url_converters import (
TemplateTypeConverter,
TicketTypeConverter,
)
from app.utils import get_logo_cdn_domain
login_manager = LoginManager()
csrf = CSRFProtect()
@@ -372,7 +371,7 @@ def useful_headers_after_request(response):
" *.notifications.service.gov.uk {logo_domain} data:;"
"frame-src 'self' www.youtube-nocookie.com;".format(
asset_domain=current_app.config['ASSET_DOMAIN'],
logo_domain=get_logo_cdn_domain(),
logo_domain=current_app.config['LOGO_CDN_DOMAIN'],
)
))
response.headers.add('Link', (

View File

@@ -101,6 +101,7 @@ class Development(Config):
CSV_UPLOAD_BUCKET_NAME = 'development-notifications-csv-upload'
CONTACT_LIST_UPLOAD_BUCKET_NAME = 'development-contact-list'
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-tools'
LOGO_CDN_DOMAIN = 'static-logos.notify.tools'
MOU_BUCKET_NAME = 'notify.tools-mou'
TRANSIENT_UPLOADED_LETTERS = 'development-transient-uploaded-letters'
PRECOMPILED_ORIGINALS_BACKUP_LETTERS = 'development-letters-precompiled-originals-backup'
@@ -125,6 +126,7 @@ class Test(Development):
CSV_UPLOAD_BUCKET_NAME = 'test-notifications-csv-upload'
CONTACT_LIST_UPLOAD_BUCKET_NAME = 'test-contact-list'
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-test'
LOGO_CDN_DOMAIN = 'static-logos.test.com'
MOU_BUCKET_NAME = 'test-mou'
TRANSIENT_UPLOADED_LETTERS = 'test-transient-uploaded-letters'
PRECOMPILED_ORIGINALS_BACKUP_LETTERS = 'test-letters-precompiled-originals-backup'
@@ -145,6 +147,7 @@ class Preview(Config):
CSV_UPLOAD_BUCKET_NAME = 'preview-notifications-csv-upload'
CONTACT_LIST_UPLOAD_BUCKET_NAME = 'preview-contact-list'
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-preview'
LOGO_CDN_DOMAIN = 'static-logos.notify.works'
MOU_BUCKET_NAME = 'notify.works-mou'
TRANSIENT_UPLOADED_LETTERS = 'preview-transient-uploaded-letters'
PRECOMPILED_ORIGINALS_BACKUP_LETTERS = 'preview-letters-precompiled-originals-backup'
@@ -163,6 +166,7 @@ class Staging(Config):
CSV_UPLOAD_BUCKET_NAME = 'staging-notifications-csv-upload'
CONTACT_LIST_UPLOAD_BUCKET_NAME = 'staging-contact-list'
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-staging'
LOGO_CDN_DOMAIN = 'static-logos.staging-notify.works'
MOU_BUCKET_NAME = 'staging-notify.works-mou'
TRANSIENT_UPLOADED_LETTERS = 'staging-transient-uploaded-letters'
PRECOMPILED_ORIGINALS_BACKUP_LETTERS = 'staging-letters-precompiled-originals-backup'
@@ -178,6 +182,7 @@ class Live(Config):
CSV_UPLOAD_BUCKET_NAME = 'live-notifications-csv-upload'
CONTACT_LIST_UPLOAD_BUCKET_NAME = 'production-contact-list'
LOGO_UPLOAD_BUCKET_NAME = 'public-logos-production'
LOGO_CDN_DOMAIN = 'static-logos.notifications.service.gov.uk'
MOU_BUCKET_NAME = 'notifications.service.gov.uk-mou'
TRANSIENT_UPLOADED_LETTERS = 'production-transient-uploaded-letters'
PRECOMPILED_ORIGINALS_BACKUP_LETTERS = 'production-letters-precompiled-originals-backup'

View File

@@ -11,7 +11,6 @@ from app.s3_client.s3_logo_client import (
persist_logo,
upload_email_logo,
)
from app.utils import get_logo_cdn_domain
from app.utils.user import user_is_platform_admin
@@ -78,7 +77,7 @@ def update_email_branding(branding_id, logo=None):
'views/email-branding/manage-branding.html',
form=form,
email_branding=email_branding,
cdn_url=get_logo_cdn_domain(),
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo
)
@@ -123,6 +122,6 @@ def create_email_branding(logo=None):
return render_template(
'views/email-branding/manage-branding.html',
form=form,
cdn_url=get_logo_cdn_domain(),
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo
)

View File

@@ -1,5 +1,6 @@
from flask import (
abort,
current_app,
make_response,
redirect,
render_template,
@@ -16,7 +17,7 @@ from app.main.views.sub_navigation_dictionaries import (
features_nav,
using_notify_nav,
)
from app.utils import get_logo_cdn_domain, hide_from_search_engines
from app.utils import hide_from_search_engines
@main.route('/')
@@ -87,7 +88,7 @@ def email_template():
colour = email_branding['colour']
brand_text = email_branding['text']
brand_colour = colour
brand_logo = ('https://{}/{}'.format(get_logo_cdn_domain(), email_branding['logo'])
brand_logo = (f"https://{current_app.config['LOGO_CDN_DOMAIN']}/{email_branding['logo']}"
if email_branding['logo'] else None)
govuk_banner = branding_type in ['govuk', 'both']
brand_banner = branding_type == 'org_banner'

View File

@@ -25,7 +25,6 @@ from app.s3_client.s3_logo_client import (
persist_logo,
upload_letter_temp_logo,
)
from app.utils import get_logo_cdn_domain
from app.utils.user import user_is_platform_admin
@@ -113,7 +112,7 @@ def update_letter_branding(branding_id, logo=None):
'views/letter-branding/manage-letter-branding.html',
file_upload_form=file_upload_form,
letter_branding_details_form=letter_branding_details_form,
cdn_url=get_logo_cdn_domain(),
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo,
is_update=True
)
@@ -169,7 +168,7 @@ def create_letter_branding(logo=None):
'views/letter-branding/manage-letter-branding.html',
file_upload_form=file_upload_form,
letter_branding_details_form=letter_branding_details_form,
cdn_url=get_logo_cdn_domain(),
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo
)

View File

@@ -1,8 +1,7 @@
from functools import wraps
from itertools import chain
from urllib.parse import urlparse
from flask import abort, current_app, g, make_response, request
from flask import abort, g, make_response, request
from flask_login import current_user
from notifications_utils.field import Field
from orderedset._orderedset import OrderedSet
@@ -36,18 +35,6 @@ def get_help_argument():
return request.args.get('help') if request.args.get('help') in ('1', '2', '3') else None
def get_logo_cdn_domain():
parsed_uri = urlparse(current_app.config['ADMIN_BASE_URL'])
if parsed_uri.netloc.startswith('localhost'):
return 'static-logos.notify.tools'
subdomain = parsed_uri.hostname.split('.')[0]
domain = parsed_uri.netloc[len(subdomain + '.'):]
return "static-logos.{}".format(domain)
def parse_filter_args(filter_dict):
if not isinstance(filter_dict, MultiDict):
filter_dict = MultiDict(filter_dict)

View File

@@ -6,8 +6,6 @@ def test_owasp_useful_headers_set(
mock_get_service_and_organisation_counts,
):
client_request.logout()
mocker.patch('app.get_logo_cdn_domain', return_value='static-logos.test.com')
response = client_request.get_response('.index')
assert response.headers['X-Frame-Options'] == 'deny'
@@ -36,7 +34,10 @@ def test_headers_non_ascii_characters_are_replaced(
mock_get_service_and_organisation_counts,
):
client_request.logout()
mocker.patch('app.get_logo_cdn_domain', return_value='static-logos۾.test.com')
mocker.patch.dict(
'app.current_app.config',
values={'LOGO_CDN_DOMAIN': 'static-logos۾.test.com'},
)
response = client_request.get_response('.index')

View File

@@ -1,18 +1,6 @@
import pytest
from app.utils import get_logo_cdn_domain, merge_jsonlike
def test_get_cdn_domain_on_localhost(client_request, mocker):
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'http://localhost:6012'})
domain = get_logo_cdn_domain()
assert domain == 'static-logos.notify.tools'
def test_get_cdn_domain_on_non_localhost(client_request, mocker):
mocker.patch.dict('app.current_app.config', values={'ADMIN_BASE_URL': 'https://some.admintest.com'})
domain = get_logo_cdn_domain()
assert domain == 'static-logos.admintest.com'
from app.utils import merge_jsonlike
@pytest.mark.parametrize("source_object, destination_object, expected_result", [