Replace send_messages and manage_service strings across application with ServicePermission.SEND_MESSAGES and ServicePermission.MANAGE_SERVICE types

This commit is contained in:
Beverly Nguyen
2025-07-15 23:56:58 -07:00
parent 591231c084
commit 1bf55e7fa3
26 changed files with 127 additions and 116 deletions

View File

@@ -2,6 +2,7 @@ from flask import jsonify, redirect, render_template, session, url_for
from flask_login import current_user
from app import current_service, notification_api_client, service_api_client
from app.enums import ServicePermission
from app.main import main
from app.main.forms import SearchByNameForm
from app.models.template_list import TemplateList
@@ -45,7 +46,7 @@ def conversation_updates(service_id, notification_id):
@main.route(
"/services/<uuid:service_id>/conversation/<uuid:notification_id>/reply-with/from-folder/<uuid:from_folder>"
)
@user_has_permissions("send_messages")
@user_has_permissions(ServicePermission.SEND_MESSAGES)
def conversation_reply(
service_id,
notification_id,
@@ -69,7 +70,7 @@ def conversation_reply(
@main.route(
"/services/<uuid:service_id>/conversation/<uuid:notification_id>/reply-with/<uuid:template_id>"
)
@user_has_permissions("send_messages")
@user_has_permissions(ServicePermission.SEND_MESSAGES)
def conversation_reply_with_template(
service_id,
notification_id,

View File

@@ -14,6 +14,7 @@ from app import (
service_api_client,
template_statistics_client,
)
from app.enums import ServicePermission
from app.main import main
from app.main.views.user_profile import set_timezone
from app.statistics_utils import get_formatted_percentage
@@ -23,7 +24,7 @@ from app.utils.user import user_has_permissions
@main.route("/services/<uuid:service_id>/dashboard")
@user_has_permissions("view_activity", "send_messages")
@user_has_permissions("view_activity", ServicePermission.SEND_MESSAGES)
def old_service_dashboard(service_id):
return redirect(url_for(".service_dashboard", service_id=service_id))
@@ -202,7 +203,7 @@ def template_usage(service_id):
@main.route("/services/<uuid:service_id>/usage")
@user_has_permissions("manage_service", allow_org_user=True)
@user_has_permissions(ServicePermission.MANAGE_SERVICE, allow_org_user=True)
def usage(service_id):
year, current_financial_year = requested_and_current_financial_year(request)

View File

@@ -4,13 +4,14 @@ from operator import attrgetter
from flask import render_template, request
from app import current_service, format_date_numeric
from app.enums import ServicePermission
from app.main import main
from app.models.event import APIKeyEvent, APIKeyEvents, ServiceEvents
from app.utils.user import user_has_permissions
@main.route("/services/<uuid:service_id>/history")
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def history(service_id):
events = _get_events(current_service.id, request.args.get("selected"))

View File

@@ -23,7 +23,7 @@ from app import (
notification_api_client,
service_api_client,
)
from app.enums import JobStatus
from app.enums import JobStatus, ServicePermission
from app.formatters import get_time_left, message_count_noun
from app.main import main
from app.main.forms import SearchNotificationsForm
@@ -106,7 +106,7 @@ def view_job_csv(service_id, job_id):
@main.route("/services/<uuid:service_id>/jobs/<uuid:job_id>", methods=["POST"])
@user_has_permissions("send_messages")
@user_has_permissions(ServicePermission.SEND_MESSAGES)
def cancel_job(service_id, job_id):
Job.from_id(job_id, service_id=service_id).cancel()
return redirect(url_for("main.service_dashboard", service_id=service_id))

View File

@@ -2,6 +2,7 @@ from flask import abort, flash, redirect, render_template, request, session, url
from flask_login import current_user
from app import current_service, service_api_client
from app.enums import ServicePermission
from app.event_handlers import (
create_cancel_user_invite_to_service_event,
create_email_change_event,
@@ -43,7 +44,7 @@ def manage_users(service_id):
@main.route(
"/services/<uuid:service_id>/users/invite/<uuid:user_id>", methods=["GET", "POST"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def invite_user(service_id, user_id=None):
form_class = InviteUserForm
form = form_class(
@@ -113,7 +114,7 @@ def invite_user(service_id, user_id=None):
@main.route("/services/<uuid:service_id>/users/<uuid:user_id>", methods=["GET", "POST"])
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def edit_user_permissions(service_id, user_id):
service_has_email_auth = current_service.has_permission("email_auth")
user = current_service.get_team_member(user_id)
@@ -164,7 +165,7 @@ def edit_user_permissions(service_id, user_id):
@main.route("/services/<uuid:service_id>/users/<uuid:user_id>/delete", methods=["POST"])
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def remove_user_from_service(service_id, user_id):
try:
service_api_client.remove_user_from_service(service_id, user_id)
@@ -187,7 +188,7 @@ def remove_user_from_service(service_id, user_id):
"/services/<uuid:service_id>/users/<uuid:user_id>/edit-email",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def edit_user_email(service_id, user_id):
user = current_service.get_team_member(user_id)
user_email = user.email_address
@@ -220,7 +221,7 @@ def edit_user_email(service_id, user_id):
"/services/<uuid:service_id>/users/<uuid:user_id>/edit-email/confirm",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def confirm_edit_user_email(service_id, user_id):
user = current_service.get_team_member(user_id)
session_key = "team_member_email_change-{}".format(user_id)
@@ -258,7 +259,7 @@ def confirm_edit_user_email(service_id, user_id):
"/services/<uuid:service_id>/users/<uuid:user_id>/edit-mobile-number",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def edit_user_mobile_number(service_id, user_id):
user = current_service.get_team_member(user_id)
user_mobile_number = redact_mobile_number(user.mobile_number)
@@ -288,7 +289,7 @@ def edit_user_mobile_number(service_id, user_id):
"/services/<uuid:service_id>/users/<uuid:user_id>/edit-mobile-number/confirm",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def confirm_edit_user_mobile_number(service_id, user_id):
user = current_service.get_team_member(user_id)
if "team_member_mobile_change" in session:
@@ -326,7 +327,7 @@ def confirm_edit_user_mobile_number(service_id, user_id):
"/services/<uuid:service_id>/cancel-invited-user/<uuid:invited_user_id>",
methods=["GET"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def cancel_invited_user(service_id, invited_user_id):
current_service.cancel_invite(invited_user_id)
@@ -345,7 +346,7 @@ def cancel_invited_user(service_id, invited_user_id):
"/services/<uuid:service_id>/resend-invite/<uuid:invited_user_id>",
methods=["GET"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def resend_invite(service_id, invited_user_id):
current_service.resend_invite(invited_user_id)

View File

@@ -12,6 +12,7 @@ from flask import (
)
from app import current_service, job_api_client, notification_api_client
from app.enums import ServicePermission
from app.main import main
from app.notify_client.api_key_api_client import KEY_TYPE_TEST
from app.utils import (
@@ -27,7 +28,7 @@ from app.utils.user import user_has_permissions
@main.route("/services/<uuid:service_id>/notification/<uuid:notification_id>")
@user_has_permissions("view_activity", "send_messages")
@user_has_permissions("view_activity", ServicePermission.SEND_MESSAGES)
def view_notification(service_id, notification_id, error_message=None):
if error_message:
flash(error_message)
@@ -100,7 +101,7 @@ def view_notification(service_id, notification_id, error_message=None):
@main.route("/services/<uuid:service_id>/notification/<uuid:notification_id>.json")
@user_has_permissions("view_activity", "send_messages")
@user_has_permissions("view_activity", ServicePermission.SEND_MESSAGES)
def view_notification_updates(service_id, notification_id):
return jsonify(
**get_single_notification_partials(

View File

@@ -27,6 +27,7 @@ from app import (
notification_api_client,
service_api_client,
)
from app.enums import ServicePermission
from app.main import main
from app.main.forms import (
ChooseTimeForm,
@@ -94,7 +95,7 @@ def get_example_csv_rows(template, use_example_as_example=True, submitted_fields
@main.route(
"/services/<uuid:service_id>/send/<uuid:template_id>/csv", methods=["GET", "POST"]
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def send_messages(service_id, template_id):
notification_count = service_api_client.get_notification_count(service_id)
remaining_messages = current_service.message_limit - notification_count
@@ -189,7 +190,7 @@ def send_messages(service_id, template_id):
@main.route("/services/<uuid:service_id>/send/<uuid:template_id>.csv", methods=["GET"])
@user_has_permissions("send_messages", "manage_templates")
@user_has_permissions(ServicePermission.SEND_MESSAGES, "manage_templates")
def get_example_csv(service_id, template_id):
template = get_template(
service_api_client.get_service_template(service_id, template_id)["data"],
@@ -214,7 +215,7 @@ def get_example_csv(service_id, template_id):
"/services/<uuid:service_id>/send/<uuid:template_id>/set-sender",
methods=["GET", "POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def set_sender(service_id, template_id):
session["sender_id"] = None
redirect_to_one_off = redirect(
@@ -343,7 +344,7 @@ def get_sender_details(service_id, template_type):
@main.route("/services/<uuid:service_id>/send/<uuid:template_id>/one-off")
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def send_one_off(service_id, template_id):
session["recipient"] = None
session["placeholders"] = {}
@@ -387,7 +388,7 @@ def get_notification_check_endpoint(service_id, template):
"/services/<uuid:service_id>/send/<uuid:template_id>/one-off/step-<int:step_index>",
methods=["GET", "POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def send_one_off_step(service_id, template_id, step_index):
if {"recipient", "placeholders"} - set(session.keys()):
return redirect(
@@ -647,7 +648,7 @@ def _check_messages(service_id, template_id, upload_id, preview_row, **kwargs):
"/services/<uuid:service_id>/<uuid:template_id>/check/<uuid:upload_id>/row-<int:row_index>",
methods=["GET"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def check_messages(service_id, template_id, upload_id, row_index=2):
data = _check_messages(service_id, template_id, upload_id, row_index)
data["allowed_file_extensions"] = Spreadsheet.ALLOWED_FILE_EXTENSIONS
@@ -691,7 +692,7 @@ def check_messages(service_id, template_id, upload_id, row_index=2):
"/services/<uuid:service_id>/<uuid:template_id>/check/<uuid:upload_id>/preview/row-<int:row_index>",
methods=["POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def preview_job(service_id, template_id, upload_id, row_index=2):
session["scheduled_for"] = request.form.get("scheduled_for", "")
data = _check_messages(
@@ -706,7 +707,7 @@ def preview_job(service_id, template_id, upload_id, row_index=2):
@main.route("/services/<uuid:service_id>/start-job/<uuid:upload_id>", methods=["POST"])
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def start_job(service_id, upload_id):
scheduled_for = session.pop("scheduled_for", None)
job_api_client.create_job(
@@ -843,7 +844,9 @@ def get_skip_link(step_index, template):
and step_index == 0
and template.template_type in ("sms", "email")
and not (template.template_type == "sms" and current_user.mobile_number is None)
and current_user.has_permissions("manage_templates", "manage_service")
and current_user.has_permissions(
"manage_templates", ServicePermission.MANAGE_SERVICE
)
):
return (
"Use my {}".format(first_column_headings[template.template_type][0]),
@@ -859,7 +862,7 @@ def get_skip_link(step_index, template):
"/services/<uuid:service_id>/template/<uuid:template_id>/one-off/send-to-myself",
methods=["GET"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def send_one_off_to_myself(service_id, template_id):
current_app.logger.info("Send one off to myself")
try:
@@ -896,7 +899,7 @@ def send_one_off_to_myself(service_id, template_id):
"/services/<uuid:service_id>/template/<uuid:template_id>/notification/check",
methods=["GET"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def check_notification(service_id, template_id):
return render_template(
"views/notifications/check.html",
@@ -978,7 +981,7 @@ def get_template_error_dict(exception):
"/services/<uuid:service_id>/template/<uuid:template_id>/notification/check/preview",
methods=["POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def preview_notification(service_id, template_id):
recipient = get_recipient()
if not recipient:
@@ -1010,7 +1013,7 @@ def preview_notification(service_id, template_id):
"/services/<uuid:service_id>/template/<uuid:template_id>/notification/check",
methods=["POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def send_notification(service_id, template_id):
recipient = get_recipient()

View File

@@ -21,7 +21,7 @@ from app import (
organizations_client,
service_api_client,
)
from app.enums import VerificationStatus
from app.enums import ServicePermission, VerificationStatus
from app.event_handlers import (
create_archive_service_event,
create_resume_service_event,
@@ -70,7 +70,7 @@ PLATFORM_ADMIN_SERVICE_PERMISSIONS = OrderedDict(
@main.route("/services/<uuid:service_id>/service-settings")
@user_has_permissions("manage_service", "manage_api_keys")
@user_has_permissions(ServicePermission.MANAGE_SERVICE, "manage_api_keys")
def service_settings(service_id):
return render_template(
"views/service-settings.html",
@@ -81,7 +81,7 @@ def service_settings(service_id):
@main.route(
"/services/<uuid:service_id>/service-settings/name", methods=["GET", "POST"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_name_change(service_id):
form = RenameServiceForm(name=current_service.name)
@@ -195,7 +195,7 @@ def service_set_permission(service_id, permission):
@main.route(
"/services/<uuid:service_id>/service-settings/archive", methods=["GET", "POST"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def archive_service(service_id):
if not current_service.active or not (
current_service.trial_mode or current_user.platform_admin
@@ -268,7 +268,7 @@ def resume_service(service_id):
"/services/<uuid:service_id>/service-settings/send-files-by-email",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def send_files_by_email_contact_details(service_id):
form = ServiceContactDetailsForm()
contact_details = None
@@ -298,7 +298,7 @@ def send_files_by_email_contact_details(service_id):
@main.route(
"/services/<uuid:service_id>/service-settings/set-reply-to-email", methods=["GET"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_reply_to_email(service_id):
return redirect(url_for(".service_email_reply_to", service_id=service_id))
@@ -306,7 +306,7 @@ def service_set_reply_to_email(service_id):
@main.route(
"/services/<uuid:service_id>/service-settings/email-reply-to", methods=["GET"]
)
@user_has_permissions("manage_service", "manage_api_keys")
@user_has_permissions(ServicePermission.MANAGE_SERVICE, "manage_api_keys")
def service_email_reply_to(service_id):
return render_template("views/service-settings/email_reply_to.html")
@@ -315,7 +315,7 @@ def service_email_reply_to(service_id):
"/services/<uuid:service_id>/service-settings/email-reply-to/add",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_add_email_reply_to(service_id):
form = ServiceReplyToEmailForm()
first_email_address = current_service.count_email_reply_to_addresses == 0
@@ -359,7 +359,7 @@ def service_add_email_reply_to(service_id):
"/services/<uuid:service_id>/service-settings/email-reply-to/<uuid:notification_id>/verify",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_verify_reply_to_address(service_id, notification_id):
replace = request.args.get("replace", False)
is_default = request.args.get("is_default", False)
@@ -379,7 +379,7 @@ def service_verify_reply_to_address(service_id, notification_id):
@main.route(
"/services/<uuid:service_id>/service-settings/email-reply-to/<uuid:notification_id>/verify.json"
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_verify_reply_to_address_updates(service_id, notification_id):
return jsonify(
**get_service_verify_reply_to_address_partials(service_id, notification_id)
@@ -456,7 +456,7 @@ def get_service_verify_reply_to_address_partials(service_id, notification_id):
methods=["GET"],
endpoint="service_confirm_delete_email_reply_to",
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_edit_email_reply_to(service_id, reply_to_email_id):
form = ServiceReplyToEmailForm()
reply_to_email_address = current_service.get_email_reply_to_address(
@@ -525,7 +525,7 @@ def service_edit_email_reply_to(service_id, reply_to_email_id):
"/services/<uuid:service_id>/service-settings/email-reply-to/<uuid:reply_to_email_id>/delete",
methods=["POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_delete_email_reply_to(service_id, reply_to_email_id):
service_api_client.delete_reply_to_email_address(
service_id=current_service.id,
@@ -538,7 +538,7 @@ def service_delete_email_reply_to(service_id, reply_to_email_id):
"/services/<uuid:service_id>/service-settings/set-inbound-number",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_inbound_number(service_id):
available_inbound_numbers = (
inbound_number_client.get_available_inbound_sms_numbers()
@@ -571,7 +571,7 @@ def service_set_inbound_number(service_id):
@main.route(
"/services/<uuid:service_id>/service-settings/sms-prefix", methods=["GET", "POST"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_sms_prefix(service_id):
form = SMSPrefixForm(enabled=current_service.prefix_sms)
@@ -590,7 +590,7 @@ def service_set_sms_prefix(service_id):
"/services/<uuid:service_id>/service-settings/set-international-sms",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_international_sms(service_id):
form = ServiceOnOffSettingForm(
"Send text messages to international phone numbers",
@@ -611,7 +611,7 @@ def service_set_international_sms(service_id):
@main.route(
"/services/<uuid:service_id>/service-settings/set-inbound-sms", methods=["GET"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_inbound_sms(service_id):
return render_template(
"views/service-settings/set-inbound-sms.html",
@@ -622,7 +622,7 @@ def service_set_inbound_sms(service_id):
"/services/<uuid:service_id>/service-settings/set-<channel>",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_channel(service_id, channel):
if channel not in {"email", "sms"}:
abort(404)
@@ -647,7 +647,7 @@ def service_set_channel(service_id, channel):
@main.route(
"/services/<uuid:service_id>/service-settings/set-auth-type", methods=["GET"]
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_set_auth_type(service_id):
return render_template(
"views/service-settings/set-auth-type.html",
@@ -655,7 +655,7 @@ def service_set_auth_type(service_id):
@main.route("/services/<uuid:service_id>/service-settings/sms-sender", methods=["GET"])
@user_has_permissions("manage_service", "manage_api_keys")
@user_has_permissions(ServicePermission.MANAGE_SERVICE, "manage_api_keys")
def service_sms_senders(service_id):
return render_template(
"views/service-settings/sms-senders.html",
@@ -666,7 +666,7 @@ def service_sms_senders(service_id):
"/services/<uuid:service_id>/service-settings/sms-sender/add",
methods=["GET", "POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_add_sms_sender(service_id):
form = ServiceSmsSenderForm()
first_sms_sender = current_service.count_sms_senders == 0
@@ -694,7 +694,7 @@ def service_add_sms_sender(service_id):
methods=["GET"],
endpoint="service_confirm_delete_sms_sender",
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_edit_sms_sender(service_id, sms_sender_id):
sms_sender = current_service.get_sms_sender(sms_sender_id)
is_inbound_number = sms_sender["inbound_number_id"]
@@ -732,7 +732,7 @@ def service_edit_sms_sender(service_id, sms_sender_id):
"/services/<uuid:service_id>/service-settings/sms-sender/<uuid:sms_sender_id>/delete",
methods=["POST"],
)
@user_has_permissions("manage_service")
@user_has_permissions(ServicePermission.MANAGE_SERVICE)
def service_delete_sms_sender(service_id, sms_sender_id):
service_api_client.delete_sms_sender(
service_id=current_service.id,

View File

@@ -12,6 +12,7 @@ from app import (
template_folder_api_client,
template_statistics_client,
)
from app.enums import ServicePermission
from app.formatters import character_count, message_count
from app.main import main
from app.main.forms import (
@@ -117,7 +118,7 @@ def choose_template(service_id, template_type="all", template_folder_id=None):
single_notification_channel = notification_channels[0]
if request.method == "POST" and templates_and_folders_form.validate_on_submit():
if not current_user.has_permissions("manage_templates"):
if not current_user.has_permissions(ServicePermission.MANAGE_TEMPLATES):
abort(403)
try:
return process_folder_management_form(
@@ -266,7 +267,7 @@ def _add_template_by_type(template_type, template_folder_id):
@main.route(
"/services/<uuid:service_id>/templates/copy/from-service/<uuid:from_service>/from-folder/<uuid:from_folder>"
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def choose_template_to_copy(
service_id,
from_service=None,
@@ -298,7 +299,7 @@ def choose_template_to_copy(
"/services/<uuid:service_id>/templates/copy/<uuid:template_id>",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def copy_template(service_id, template_id):
from_service = request.args.get("from_service")
@@ -355,7 +356,7 @@ def _get_template_copy_name(template, existing_templates):
"<template_type:notification_type>/<return_to>/<uuid:template_id>"
)
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def action_blocked(service_id, notification_type, return_to, template_id=None):
back_link = {
"add_new_template": partial(
@@ -387,7 +388,7 @@ def action_blocked(service_id, notification_type, return_to, template_id=None):
"/services/<uuid:service_id>/templates/folders/<uuid:template_folder_id>/manage",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def manage_template_folder(service_id, template_folder_id):
template_folder = current_service.get_template_folder_with_user_permission_or_403(
template_folder_id, current_user
@@ -401,7 +402,7 @@ def manage_template_folder(service_id, template_folder_id):
)
if form.validate_on_submit():
if (
current_user.has_permissions("manage_service")
current_user.has_permissions(ServicePermission.MANAGE_SERVICE)
and form.users_with_permission.all_service_users
):
users_with_permission = form.users_with_permission.data + [current_user.id]
@@ -437,7 +438,7 @@ def manage_template_folder(service_id, template_folder_id):
"/services/<uuid:service_id>/templates/folders/<uuid:template_folder_id>/delete",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def delete_template_folder(service_id, template_folder_id):
template_folder = current_service.get_template_folder_with_user_permission_or_403(
template_folder_id, current_user
@@ -502,7 +503,7 @@ def delete_template_folder(service_id, template_folder_id):
"/services/<uuid:service_id>/templates/folders/<uuid:template_folder_id>/add-<template_type:template_type>",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def add_service_template(service_id, template_type, template_folder_id=None):
if template_type not in current_service.available_template_types:
return redirect(
@@ -566,7 +567,7 @@ def abort_403_if_not_admin_user():
"/services/<uuid:service_id>/templates/<uuid:template_id>/edit",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def edit_service_template(service_id, template_id):
template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -724,7 +725,7 @@ def _get_content_count_error_and_message_for_template(template):
"/services/<uuid:service_id>/templates/<uuid:template_id>/delete",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def delete_service_template(service_id, template_id):
template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -782,7 +783,7 @@ def delete_service_template(service_id, template_id):
@main.route(
"/services/<uuid:service_id>/templates/<uuid:template_id>/redact", methods=["GET"]
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def confirm_redact_template(service_id, template_id):
template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -803,7 +804,7 @@ def confirm_redact_template(service_id, template_id):
@main.route(
"/services/<uuid:service_id>/templates/<uuid:template_id>/redact", methods=["POST"]
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def redact_template(service_id, template_id):
service_api_client.redact_service_template(service_id, template_id)
@@ -842,7 +843,7 @@ def view_template_versions(service_id, template_id):
"/services/<uuid:service_id>/templates/<uuid:template_id>/set-template-sender",
methods=["GET", "POST"],
)
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def set_template_sender(service_id, template_id):
template = current_service.get_template_with_user_permission_or_403(
template_id, current_user

View File

@@ -1,6 +1,7 @@
from flask import abort, redirect, render_template, session
from app import current_service, current_user, service_api_client, url_for
from app.enums import ServicePermission
from app.main import main
from app.main.views.send import (
all_placeholders_in_session,
@@ -14,7 +15,7 @@ from app.utils.user import user_has_permissions
@main.route("/services/<uuid:service_id>/tour/<uuid:template_id>")
@user_has_permissions("send_messages")
@user_has_permissions(ServicePermission.SEND_MESSAGES)
def begin_tour(service_id, template_id):
db_template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -47,7 +48,7 @@ def begin_tour(service_id, template_id):
"/services/<uuid:service_id>/tour/<uuid:template_id>/step-<int:step_index>",
methods=["GET", "POST"],
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def tour_step(service_id, template_id, step_index):
db_template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -166,7 +167,7 @@ def _get_tour_step_back_link(service_id, template_id, step_index):
@main.route(
"/services/<uuid:service_id>/tour/<uuid:template_id>/check", methods=["GET"]
)
@user_has_permissions("send_messages", restrict_admin_usage=True)
@user_has_permissions(ServicePermission.SEND_MESSAGES, restrict_admin_usage=True)
def check_tour_notification(service_id, template_id):
db_template = current_service.get_template_with_user_permission_or_403(
template_id, current_user
@@ -223,7 +224,7 @@ def check_tour_notification(service_id, template_id):
@main.route("/services/<uuid:service_id>/end-tour/<uuid:example_template_id>")
@user_has_permissions("manage_templates")
@user_has_permissions(ServicePermission.MANAGE_TEMPLATES)
def go_to_dashboard_after_tour(service_id, example_template_id):
service_api_client.delete_service_template(service_id, example_template_id)