mirror of
https://github.com/GSA/notifications-admin.git
synced 2025-12-08 14:14:27 -05:00
360 lines
11 KiB
Python
360 lines
11 KiB
Python
from itertools import chain
|
|
|
|
from flask import request
|
|
|
|
from app.enums import ServicePermission
|
|
|
|
|
|
class Navigation:
|
|
mapping = {}
|
|
selected_class = "usa-current"
|
|
|
|
def __init__(self):
|
|
self.mapping = {
|
|
navigation: {
|
|
# if not specified, assume endpoints are all in the `main` blueprint.
|
|
self.get_endpoint_with_blueprint(endpoint)
|
|
for endpoint in endpoints
|
|
}
|
|
for navigation, endpoints in self.mapping.items()
|
|
}
|
|
|
|
@property
|
|
def endpoints_with_navigation(self):
|
|
return tuple(
|
|
chain.from_iterable(
|
|
(endpoints for navigation_item, endpoints in self.mapping.items())
|
|
)
|
|
)
|
|
|
|
def is_selected(self, navigation_item):
|
|
if request.endpoint in self.mapping[navigation_item]:
|
|
return self.selected_class
|
|
return ""
|
|
|
|
@staticmethod
|
|
def get_endpoint_with_blueprint(endpoint):
|
|
return endpoint if "." in endpoint else "main.{}".format(endpoint)
|
|
|
|
|
|
class HeaderNavigation(Navigation):
|
|
mapping = {
|
|
"support": {
|
|
"support",
|
|
},
|
|
"best_practices": {
|
|
"best_practices",
|
|
"clear_goals",
|
|
"rules_and_regulations",
|
|
"establish_trust",
|
|
"write_for_action",
|
|
"multiple_languages",
|
|
"benchmark_performance",
|
|
},
|
|
"using_notify": {
|
|
"get_started",
|
|
"pricing",
|
|
"trial_mode_new",
|
|
"message_status",
|
|
"how_to",
|
|
},
|
|
"accounts-or-dashboard": {
|
|
"conversation",
|
|
"service_dashboard",
|
|
"template_usage",
|
|
"view_notification",
|
|
"action_blocked",
|
|
"add_service_template",
|
|
"check_messages",
|
|
"check_notification",
|
|
"choose_template",
|
|
"choose_template_to_copy",
|
|
"confirm_redact_template",
|
|
"conversation_reply",
|
|
"copy_template",
|
|
"delete_service_template",
|
|
"edit_service_template",
|
|
"manage_template_folder",
|
|
ServicePermission.SEND_MESSAGES,
|
|
"send_one_off",
|
|
"send_one_off_step",
|
|
"send_one_off_to_myself",
|
|
"set_sender",
|
|
"set_template_sender",
|
|
"view_template",
|
|
"view_template_version",
|
|
"view_template_versions",
|
|
"uploads",
|
|
"view_job",
|
|
"view_jobs",
|
|
"usage",
|
|
},
|
|
"documentation": {
|
|
"documentation",
|
|
"integration_testing",
|
|
},
|
|
"user-profile": {
|
|
"user_profile",
|
|
"user_profile_confirm_delete_mobile_number",
|
|
"user_profile_email",
|
|
"user_profile_email_authenticate",
|
|
"user_profile_email_confirm",
|
|
"user_profile_mobile_number",
|
|
"user_profile_mobile_number_authenticate",
|
|
"user_profile_mobile_number_confirm",
|
|
"user_profile_mobile_number_delete",
|
|
"user_profile_name",
|
|
"user_profile_password",
|
|
"user_profile_preferred_timezone",
|
|
"user_profile_disable_platform_admin_view",
|
|
},
|
|
"platform-admin": {
|
|
"archive_user",
|
|
"change_user_auth",
|
|
"clear_cache",
|
|
"find_services_by_name",
|
|
"find_users_by_email",
|
|
"live_services",
|
|
"live_services_csv",
|
|
"notifications_sent_by_service",
|
|
"get_billing_report",
|
|
"get_users_report",
|
|
"get_daily_volumes",
|
|
"download_all_users",
|
|
"get_daily_sms_provider_volumes",
|
|
"get_volumes_by_service",
|
|
"organizations",
|
|
"platform_admin",
|
|
"platform_admin_list_complaints",
|
|
"platform_admin_reports",
|
|
"platform_admin_splash_page",
|
|
"suspend_service",
|
|
"trial_services",
|
|
"user_information",
|
|
},
|
|
"sign-in": {
|
|
"revalidate_email_sent",
|
|
"sign_in",
|
|
"two_factor_sms",
|
|
"two_factor_email",
|
|
"two_factor_email_sent",
|
|
"two_factor_email_interstitial",
|
|
"verify",
|
|
"verify_email",
|
|
},
|
|
}
|
|
|
|
# header HTML now comes from USWDS so requires a boolean, not an attribute
|
|
def is_selected(self, navigation_item):
|
|
return request.endpoint in self.mapping[navigation_item]
|
|
|
|
|
|
class MainNavigation(Navigation):
|
|
mapping = {
|
|
"activity": {
|
|
"all_jobs_activity",
|
|
},
|
|
"dashboard": {
|
|
"conversation",
|
|
"service_dashboard",
|
|
"template_usage",
|
|
"view_notification",
|
|
},
|
|
"templates": {
|
|
"action_blocked",
|
|
"add_service_template",
|
|
"check_messages",
|
|
"check_notification",
|
|
"choose_template",
|
|
"choose_template_to_copy",
|
|
"confirm_redact_template",
|
|
"conversation_reply",
|
|
"copy_template",
|
|
"delete_service_template",
|
|
"edit_service_template",
|
|
"manage_template_folder",
|
|
ServicePermission.SEND_MESSAGES,
|
|
"send_one_off",
|
|
"send_one_off_step",
|
|
"send_one_off_to_myself",
|
|
"set_sender",
|
|
"set_template_sender",
|
|
"view_template",
|
|
"view_template_version",
|
|
"view_template_versions",
|
|
},
|
|
"uploads": {
|
|
"uploads",
|
|
"view_job",
|
|
"view_jobs",
|
|
},
|
|
"team-members": {
|
|
"confirm_edit_user_email",
|
|
"confirm_edit_user_mobile_number",
|
|
"edit_user_email",
|
|
"edit_user_mobile_number",
|
|
"edit_user_permissions",
|
|
"invite_user",
|
|
"manage_users",
|
|
"remove_user_from_service",
|
|
},
|
|
"usage": {
|
|
"usage",
|
|
},
|
|
"user-profile": {
|
|
"user_profile",
|
|
"user_profile_confirm_delete_mobile_number",
|
|
"user_profile_email",
|
|
"user_profile_email_authenticate",
|
|
"user_profile_email_confirm",
|
|
"user_profile_mobile_number",
|
|
"user_profile_mobile_number_authenticate",
|
|
"user_profile_mobile_number_confirm",
|
|
"user_profile_mobile_number_delete",
|
|
"user_profile_name",
|
|
"user_profile_password",
|
|
"user_profile_preferred_timezone",
|
|
"user_profile_disable_platform_admin_view",
|
|
},
|
|
"settings": {
|
|
"link_service_to_organization",
|
|
"service_add_email_reply_to",
|
|
"service_add_sms_sender",
|
|
"service_confirm_delete_email_reply_to",
|
|
"service_confirm_delete_sms_sender",
|
|
"service_edit_email_reply_to",
|
|
"service_edit_sms_sender",
|
|
"service_email_reply_to",
|
|
"service_name_change",
|
|
"service_set_auth_type",
|
|
"service_set_channel",
|
|
"send_files_by_email_contact_details",
|
|
"service_set_inbound_number",
|
|
"service_set_inbound_sms",
|
|
"service_set_international_sms",
|
|
"service_set_reply_to_email",
|
|
"service_set_sms_prefix",
|
|
"service_verify_reply_to_address",
|
|
"service_verify_reply_to_address_updates",
|
|
"service_settings",
|
|
"service_sms_senders",
|
|
"set_free_sms_allowance",
|
|
"set_message_limit",
|
|
"set_rate_limit",
|
|
},
|
|
"api-integration": {
|
|
"api_callbacks",
|
|
"api_documentation",
|
|
"api_integration",
|
|
"api_keys",
|
|
"create_api_key",
|
|
"delivery_status_callback",
|
|
"received_text_messages_callback",
|
|
"revoke_api_key",
|
|
"guest_list",
|
|
"old_guest_list",
|
|
},
|
|
}
|
|
|
|
|
|
class CaseworkNavigation(Navigation):
|
|
mapping = {
|
|
"send-one-off": {
|
|
"choose_template",
|
|
"send_one_off",
|
|
"send_one_off_step",
|
|
"send_one_off_to_myself",
|
|
},
|
|
"sent-messages": {
|
|
"view_notification",
|
|
},
|
|
"uploads": {
|
|
"view_jobs",
|
|
"view_job",
|
|
"uploads",
|
|
},
|
|
}
|
|
|
|
|
|
class SecondaryNavigation(Navigation):
|
|
mapping = {
|
|
"settings": {
|
|
"link_service_to_organization",
|
|
"service_add_email_reply_to",
|
|
"service_add_sms_sender",
|
|
"service_confirm_delete_email_reply_to",
|
|
"service_confirm_delete_sms_sender",
|
|
"service_edit_email_reply_to",
|
|
"service_edit_sms_sender",
|
|
"service_email_reply_to",
|
|
"service_name_change",
|
|
"service_set_auth_type",
|
|
"service_set_channel",
|
|
"send_files_by_email_contact_details",
|
|
"service_set_inbound_number",
|
|
"service_set_inbound_sms",
|
|
"service_set_international_sms",
|
|
"service_set_reply_to_email",
|
|
"service_set_sms_prefix",
|
|
"service_verify_reply_to_address",
|
|
"service_verify_reply_to_address_updates",
|
|
"service_settings",
|
|
"service_sms_senders",
|
|
"set_free_sms_allowance",
|
|
"set_message_limit",
|
|
"set_rate_limit",
|
|
"confirm_edit_user_email",
|
|
"confirm_edit_user_mobile_number",
|
|
"edit_user_email",
|
|
"edit_user_mobile_number",
|
|
"edit_user_permissions",
|
|
"invite_user",
|
|
"manage_users",
|
|
"remove_user_from_service",
|
|
"user_profile",
|
|
"user_profile_confirm_delete_mobile_number",
|
|
"user_profile_email",
|
|
"user_profile_email_authenticate",
|
|
"user_profile_email_confirm",
|
|
"user_profile_mobile_number",
|
|
"user_profile_mobile_number_authenticate",
|
|
"user_profile_mobile_number_confirm",
|
|
"user_profile_mobile_number_delete",
|
|
"user_profile_name",
|
|
"user_profile_password",
|
|
"user_profile_preferred_timezone",
|
|
"user_profile_disable_platform_admin_view",
|
|
},
|
|
}
|
|
|
|
|
|
class OrgNavigation(Navigation):
|
|
mapping = {
|
|
"dashboard": {
|
|
"organization_dashboard",
|
|
},
|
|
"usage": {
|
|
"organization_usage",
|
|
},
|
|
"settings": {
|
|
"edit_organization_billing_details",
|
|
"edit_organization_domains",
|
|
"edit_organization_name",
|
|
"edit_organization_notes",
|
|
"edit_organization_type",
|
|
"organization_settings",
|
|
},
|
|
"team-members": {
|
|
"edit_organization_user",
|
|
"invite_org_user",
|
|
"manage_org_users",
|
|
"remove_user_from_organization",
|
|
},
|
|
"trial-services": {
|
|
"organization_trial_mode_services",
|
|
},
|
|
"billing": {
|
|
"organization_billing",
|
|
},
|
|
}
|