2018-08-03 12:43:35 +01:00
|
|
|
|
from flask import (
|
|
|
|
|
|
abort,
|
2022-01-26 14:44:33 +00:00
|
|
|
|
current_app,
|
2018-08-03 12:43:35 +01:00
|
|
|
|
make_response,
|
|
|
|
|
|
redirect,
|
|
|
|
|
|
render_template,
|
|
|
|
|
|
request,
|
|
|
|
|
|
url_for,
|
|
|
|
|
|
)
|
2019-07-01 15:22:08 +01:00
|
|
|
|
from flask_login import current_user
|
2022-12-05 15:33:44 -05:00
|
|
|
|
from notifications_utils.template import HTMLEmailTemplate
|
2016-07-04 16:25:20 +01:00
|
|
|
|
|
2022-12-05 15:33:44 -05:00
|
|
|
|
from app import email_branding_client, status_api_client
|
2018-02-20 11:22:17 +00:00
|
|
|
|
from app.main import main
|
2021-08-27 17:39:04 +01:00
|
|
|
|
from app.main.forms import FieldWithNoneOption
|
2022-05-04 15:04:06 +01:00
|
|
|
|
from app.main.views.pricing import CURRENT_SMS_RATE
|
2023-08-25 08:57:24 -07:00
|
|
|
|
from app.main.views.sub_navigation_dictionaries import features_nav, using_notify_nav
|
2023-07-03 15:03:33 -04:00
|
|
|
|
from app.utils.user import user_is_logged_in
|
2017-11-28 11:56:30 +00:00
|
|
|
|
|
2015-11-20 16:22:44 +00:00
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/")
|
2015-11-20 16:22:44 +00:00
|
|
|
|
def index():
|
2016-05-04 13:01:55 +01:00
|
|
|
|
if current_user and current_user.is_authenticated:
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for("main.choose_account"))
|
2019-04-10 17:20:51 +01:00
|
|
|
|
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/signedout.html",
|
2022-05-04 15:04:06 +01:00
|
|
|
|
sms_rate=CURRENT_SMS_RATE,
|
2023-07-12 12:09:44 -04:00
|
|
|
|
counts=status_api_client.get_count_of_live_services_and_organizations(),
|
2019-04-10 17:20:51 +01:00
|
|
|
|
)
|
2015-11-23 16:07:19 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/error/<int:status_code>")
|
2018-03-08 17:49:08 +00:00
|
|
|
|
def error(status_code):
|
2018-03-09 12:28:55 +00:00
|
|
|
|
if status_code >= 500:
|
|
|
|
|
|
abort(404)
|
2018-03-08 17:49:08 +00:00
|
|
|
|
abort(status_code)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/privacy")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2018-05-23 14:35:26 +01:00
|
|
|
|
def privacy():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/privacy.html")
|
2018-05-23 14:35:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/accessibility-statement")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-09-18 14:40:47 +01:00
|
|
|
|
def accessibility_statement():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/accessibility_statement.html")
|
2020-09-18 14:40:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/delivery-and-failure")
|
|
|
|
|
|
@main.route("/features/messages-status")
|
2016-05-09 16:18:13 +01:00
|
|
|
|
def delivery_and_failure():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for(".message_status"), 301)
|
2016-05-09 16:18:13 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/design-patterns-content-guidance")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2016-06-08 15:48:03 +01:00
|
|
|
|
def design_content():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(
|
|
|
|
|
|
"https://www.gov.uk/service-manual/design/sending-emails-and-text-messages", 301
|
|
|
|
|
|
)
|
2016-06-08 15:48:03 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/_email")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2016-07-04 16:25:20 +01:00
|
|
|
|
def email_template():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
branding_type = "govuk"
|
|
|
|
|
|
branding_style = request.args.get("branding_style", None)
|
2018-08-03 12:43:35 +01:00
|
|
|
|
|
2018-12-05 10:30:44 +00:00
|
|
|
|
if branding_style == FieldWithNoneOption.NONE_OPTION_VALUE:
|
|
|
|
|
|
branding_style = None
|
|
|
|
|
|
|
|
|
|
|
|
if branding_style is not None:
|
2023-08-25 09:12:23 -07:00
|
|
|
|
email_branding = email_branding_client.get_email_branding(branding_style)[
|
|
|
|
|
|
"email_branding"
|
|
|
|
|
|
]
|
|
|
|
|
|
branding_type = email_branding["brand_type"]
|
2018-08-29 11:38:40 +01:00
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
if branding_type == "govuk":
|
2019-06-25 16:56:45 +01:00
|
|
|
|
brand_text = None
|
2018-08-03 12:43:35 +01:00
|
|
|
|
brand_colour = None
|
|
|
|
|
|
brand_logo = None
|
|
|
|
|
|
govuk_banner = True
|
|
|
|
|
|
brand_banner = False
|
2019-06-25 16:56:45 +01:00
|
|
|
|
brand_name = None
|
2018-08-03 12:43:35 +01:00
|
|
|
|
else:
|
2023-08-25 09:12:23 -07:00
|
|
|
|
colour = email_branding["colour"]
|
|
|
|
|
|
brand_text = email_branding["text"]
|
2018-08-22 12:56:08 +01:00
|
|
|
|
brand_colour = colour
|
2023-08-25 09:12:23 -07:00
|
|
|
|
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"
|
|
|
|
|
|
brand_name = email_branding["name"]
|
2018-08-03 12:43:35 +01:00
|
|
|
|
|
|
|
|
|
|
template = {
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"template_type": "email",
|
|
|
|
|
|
"subject": "Email branding preview",
|
|
|
|
|
|
"content": (
|
|
|
|
|
|
"Lorem Ipsum is simply dummy text of the printing and typesetting "
|
|
|
|
|
|
"industry.\n\nLorem Ipsum has been the industry’s standard dummy "
|
|
|
|
|
|
"text ever since the 1500s, when an unknown printer took a galley "
|
|
|
|
|
|
"of type and scrambled it to make a type specimen book. "
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"# History"
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"It has "
|
|
|
|
|
|
"survived not only"
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"* five centuries"
|
|
|
|
|
|
"\n"
|
|
|
|
|
|
"* but also the leap into electronic typesetting"
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"It was "
|
|
|
|
|
|
"popularised in the 1960s with the release of Letraset sheets "
|
|
|
|
|
|
"containing Lorem Ipsum passages, and more recently with desktop "
|
|
|
|
|
|
"publishing software like Aldus PageMaker including versions of "
|
|
|
|
|
|
"Lorem Ipsum."
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"^ It is a long established fact that a reader will be distracted "
|
|
|
|
|
|
"by the readable content of a page when looking at its layout."
|
|
|
|
|
|
"\n\n"
|
|
|
|
|
|
"The point of using Lorem Ipsum is that it has a more-or-less "
|
|
|
|
|
|
"normal distribution of letters, as opposed to using ‘Content "
|
|
|
|
|
|
"here, content here’, making it look like readable English."
|
|
|
|
|
|
"\n\n\n"
|
|
|
|
|
|
"1. One"
|
|
|
|
|
|
"\n"
|
|
|
|
|
|
"2. Two"
|
|
|
|
|
|
"\n"
|
|
|
|
|
|
"10. Three"
|
|
|
|
|
|
"\n\n"
|
2023-08-31 08:21:28 -07:00
|
|
|
|
"This is an example of an email sent using Notify.gov."
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"\n\n"
|
|
|
|
|
|
"https://www.notifications.service.gov.uk"
|
|
|
|
|
|
),
|
2018-08-03 12:43:35 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if not bool(request.args):
|
|
|
|
|
|
resp = make_response(str(HTMLEmailTemplate(template)))
|
|
|
|
|
|
else:
|
2023-08-25 09:12:23 -07:00
|
|
|
|
resp = make_response(
|
|
|
|
|
|
str(
|
|
|
|
|
|
HTMLEmailTemplate(
|
|
|
|
|
|
template,
|
|
|
|
|
|
govuk_banner=govuk_banner,
|
|
|
|
|
|
brand_text=brand_text,
|
|
|
|
|
|
brand_colour=brand_colour,
|
|
|
|
|
|
brand_logo=brand_logo,
|
|
|
|
|
|
brand_banner=brand_banner,
|
|
|
|
|
|
brand_name=brand_name,
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
resp.headers["X-Frame-Options"] = "SAMEORIGIN"
|
2018-08-03 12:43:35 +01:00
|
|
|
|
return resp
|
2016-07-04 16:25:20 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/documentation")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2016-04-15 10:48:31 +01:00
|
|
|
|
def documentation():
|
2020-01-24 15:57:29 +00:00
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/documentation.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
2017-01-27 17:32:20 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/integration-testing")
|
2017-01-27 17:32:20 +00:00
|
|
|
|
def integration_testing():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/integration-testing.html"), 410
|
2017-03-23 15:03:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/callbacks")
|
2017-11-28 11:56:30 +00:00
|
|
|
|
def callbacks():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for("main.documentation"), 301)
|
2017-11-28 11:56:30 +00:00
|
|
|
|
|
2017-06-14 16:05:20 +01:00
|
|
|
|
|
2017-11-29 13:59:01 +00:00
|
|
|
|
# --- Features page set --- #
|
2017-06-14 16:05:20 +01:00
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
|
|
|
|
|
|
@main.route("/features")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2017-06-14 16:53:16 +01:00
|
|
|
|
def features():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/features.html", navigation_links=features_nav())
|
2017-08-30 15:22:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/roadmap", endpoint="roadmap")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2017-11-28 11:56:30 +00:00
|
|
|
|
def roadmap():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/roadmap.html", navigation_links=features_nav())
|
2017-11-28 11:56:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/email")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2019-04-09 15:16:50 +01:00
|
|
|
|
def features_email():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/features/emails.html", navigation_links=features_nav()
|
2019-04-09 15:16:50 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/sms")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2019-04-09 15:16:50 +01:00
|
|
|
|
def features_sms():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/features/text-messages.html", navigation_links=features_nav()
|
2019-04-09 15:16:50 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/security", endpoint="security")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2017-11-28 11:56:30 +00:00
|
|
|
|
def security():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return render_template("views/security.html", navigation_links=features_nav())
|
2017-11-28 11:56:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/terms", endpoint="terms")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2017-11-28 11:56:30 +00:00
|
|
|
|
def terms():
|
2017-11-29 13:59:01 +00:00
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/terms-of-use.html",
|
2018-03-08 12:12:18 +00:00
|
|
|
|
navigation_links=features_nav(),
|
2017-11-29 13:59:01 +00:00
|
|
|
|
)
|
2017-11-28 11:56:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 10:21:11 -04:00
|
|
|
|
@main.route("/features/using_notify")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2017-08-30 15:22:26 +01:00
|
|
|
|
def using_notify():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return (
|
|
|
|
|
|
render_template("views/using-notify.html", navigation_links=features_nav()),
|
|
|
|
|
|
410,
|
|
|
|
|
|
)
|
2017-11-29 13:59:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/delivery-status")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2019-04-09 15:24:07 +01:00
|
|
|
|
def message_status():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/message-status.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
2019-04-09 15:24:07 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/features/get-started")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-24 15:57:29 +00:00
|
|
|
|
def get_started_old():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for(".get_started"), 301)
|
2020-01-24 15:57:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/get-started")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2019-10-17 16:15:28 +01:00
|
|
|
|
def get_started():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/get-started.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
2019-10-17 16:15:28 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/who-its-for")
|
2020-05-21 11:17:44 +01:00
|
|
|
|
def who_its_for():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for(".features"), 301)
|
2020-03-25 11:52:30 +00:00
|
|
|
|
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
@main.route("/trial-mode")
|
|
|
|
|
|
@main.route("/features/trial-mode")
|
2019-04-09 15:27:33 +01:00
|
|
|
|
def trial_mode():
|
2023-08-25 09:12:23 -07:00
|
|
|
|
return redirect(url_for(".trial_mode_new"), 301)
|
2019-04-09 15:27:33 +01:00
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/trial-mode")
|
2019-04-09 15:27:33 +01:00
|
|
|
|
def trial_mode_new():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/trial-mode.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
2019-04-09 15:27:33 +01:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/guidance")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-24 15:57:29 +00:00
|
|
|
|
def guidance_index():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/guidance/index.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/guidance/branding-and-customisation")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-24 15:57:29 +00:00
|
|
|
|
def branding_and_customisation():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/guidance/branding-and-customisation.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/guidance/create-and-send-messages")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-27 11:46:09 +00:00
|
|
|
|
def create_and_send_messages():
|
2020-01-24 15:57:29 +00:00
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/guidance/create-and-send-messages.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/guidance/edit-and-format-messages")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-24 15:57:29 +00:00
|
|
|
|
def edit_and_format_messages():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/guidance/edit-and-format-messages.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-12 13:52:03 -04:00
|
|
|
|
@main.route("/using-notify/guidance/send-files-by-email")
|
2023-07-03 15:03:33 -04:00
|
|
|
|
@user_is_logged_in
|
2020-01-24 15:57:29 +00:00
|
|
|
|
def send_files_by_email():
|
|
|
|
|
|
return render_template(
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"views/guidance/send-files-by-email.html",
|
2020-01-24 15:57:29 +00:00
|
|
|
|
navigation_links=using_notify_nav(),
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-29 13:59:01 +00:00
|
|
|
|
# --- Redirects --- #
|
|
|
|
|
|
|
2023-08-25 09:12:23 -07:00
|
|
|
|
|
|
|
|
|
|
@main.route("/roadmap", endpoint="old_roadmap")
|
|
|
|
|
|
@main.route("/terms", endpoint="old_terms")
|
|
|
|
|
|
@main.route("/information-security", endpoint="information_security")
|
|
|
|
|
|
@main.route("/using_notify", endpoint="old_using_notify")
|
|
|
|
|
|
@main.route("/information-risk-management", endpoint="information_risk_management")
|
|
|
|
|
|
@main.route("/integration_testing", endpoint="old_integration_testing")
|
2017-11-29 13:59:01 +00:00
|
|
|
|
def old_page_redirects():
|
|
|
|
|
|
redirects = {
|
2023-08-25 09:12:23 -07:00
|
|
|
|
"main.old_roadmap": "main.roadmap",
|
|
|
|
|
|
"main.old_terms": "main.terms",
|
|
|
|
|
|
"main.information_security": "main.using_notify",
|
|
|
|
|
|
"main.old_using_notify": "main.using_notify",
|
|
|
|
|
|
"main.information_risk_management": "main.security",
|
|
|
|
|
|
"main.old_integration_testing": "main.integration_testing",
|
2017-11-29 13:59:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
return redirect(url_for(redirects[request.endpoint]), code=301)
|