Files
notifications-admin/app/main/views/email_branding.py
Chris Hill-Scott 4f672cb5dc 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.
2022-01-27 10:33:05 +00:00

128 lines
4.2 KiB
Python

from flask import current_app, redirect, render_template, session, url_for
from app import email_branding_client
from app.main import main
from app.main.forms import SearchByNameForm, ServiceUpdateEmailBranding
from app.s3_client.s3_logo_client import (
TEMP_TAG,
delete_email_temp_file,
delete_email_temp_files_created_by,
permanent_email_logo_name,
persist_logo,
upload_email_logo,
)
from app.utils.user import user_is_platform_admin
@main.route("/email-branding", methods=['GET', 'POST'])
@user_is_platform_admin
def email_branding():
brandings = email_branding_client.get_all_email_branding(sort_key='name')
return render_template(
'views/email-branding/select-branding.html',
email_brandings=brandings,
search_form=SearchByNameForm()
)
@main.route("/email-branding/<uuid:branding_id>/edit", methods=['GET', 'POST'])
@main.route("/email-branding/<uuid:branding_id>/edit/<logo>", methods=['GET', 'POST'])
@user_is_platform_admin
def update_email_branding(branding_id, logo=None):
email_branding = email_branding_client.get_email_branding(branding_id)['email_branding']
form = ServiceUpdateEmailBranding(
name=email_branding['name'],
text=email_branding['text'],
colour=email_branding['colour'],
brand_type=email_branding['brand_type']
)
logo = logo if logo else email_branding.get('logo') if email_branding else None
if form.validate_on_submit():
if form.file.data:
upload_filename = upload_email_logo(
form.file.data.filename,
form.file.data,
current_app.config['AWS_REGION'],
user_id=session["user_id"]
)
if logo and logo.startswith(TEMP_TAG.format(user_id=session['user_id'])):
delete_email_temp_file(logo)
return redirect(url_for('.update_email_branding', branding_id=branding_id, logo=upload_filename))
updated_logo_name = permanent_email_logo_name(logo, session["user_id"]) if logo else None
email_branding_client.update_email_branding(
branding_id=branding_id,
logo=updated_logo_name,
name=form.name.data,
text=form.text.data,
colour=form.colour.data,
brand_type=form.brand_type.data,
)
if logo:
persist_logo(logo, updated_logo_name)
delete_email_temp_files_created_by(session["user_id"])
return redirect(url_for('.email_branding', branding_id=branding_id))
return render_template(
'views/email-branding/manage-branding.html',
form=form,
email_branding=email_branding,
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo
)
@main.route("/email-branding/create", methods=['GET', 'POST'])
@main.route("/email-branding/create/<logo>", methods=['GET', 'POST'])
@user_is_platform_admin
def create_email_branding(logo=None):
form = ServiceUpdateEmailBranding(brand_type='org')
if form.validate_on_submit():
if form.file.data:
upload_filename = upload_email_logo(
form.file.data.filename,
form.file.data,
current_app.config['AWS_REGION'],
user_id=session["user_id"]
)
if logo and logo.startswith(TEMP_TAG.format(user_id=session['user_id'])):
delete_email_temp_file(logo)
return redirect(url_for('.create_email_branding', logo=upload_filename))
updated_logo_name = permanent_email_logo_name(logo, session["user_id"]) if logo else None
email_branding_client.create_email_branding(
logo=updated_logo_name,
name=form.name.data,
text=form.text.data,
colour=form.colour.data,
brand_type=form.brand_type.data,
)
if logo:
persist_logo(logo, updated_logo_name)
delete_email_temp_files_created_by(session["user_id"])
return redirect(url_for('.email_branding'))
return render_template(
'views/email-branding/manage-branding.html',
form=form,
cdn_url=current_app.config['LOGO_CDN_DOMAIN'],
logo=logo
)