mirror of
https://github.com/GSA/notifications-api.git
synced 2025-12-13 00:32:16 -05:00
This changeset pulls in all of the notification_utils code directly into the API and removes it as an external dependency. We are doing this to cut down on operational maintenance of the project and will begin removing parts of it no longer needed for the API. Signed-off-by: Carlo Costino <carlo.costino@gsa.gov>
58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
import itertools
|
||
|
||
from flask import current_app
|
||
|
||
from app.dao.services_dao import dao_fetch_service_by_id
|
||
from app.enums import KeyType, RecipientType
|
||
from app.models import ServiceGuestList
|
||
from notifications_utils.recipients import allowed_to_send_to
|
||
|
||
|
||
def get_recipients_from_request(request_json, key, type):
|
||
return [(type, recipient) for recipient in request_json.get(key)]
|
||
|
||
|
||
def get_guest_list_objects(service_id, request_json):
|
||
return [
|
||
ServiceGuestList.from_string(service_id, type, recipient)
|
||
for type, recipient in (
|
||
get_recipients_from_request(
|
||
request_json, "phone_numbers", RecipientType.MOBILE
|
||
)
|
||
+ get_recipients_from_request(
|
||
request_json, "email_addresses", RecipientType.EMAIL
|
||
)
|
||
)
|
||
]
|
||
|
||
|
||
def service_allowed_to_send_to(
|
||
recipient, service, key_type, allow_guest_list_recipients=True
|
||
):
|
||
if key_type == KeyType.TEST:
|
||
return True
|
||
|
||
if key_type == KeyType.NORMAL and not service.restricted:
|
||
return True
|
||
|
||
# Revert back to the ORM model here so we can get some things which
|
||
# aren’t in the serialised model
|
||
service = dao_fetch_service_by_id(service.id)
|
||
|
||
team_members = itertools.chain.from_iterable(
|
||
[user.mobile_number, user.email_address] for user in service.users
|
||
)
|
||
guest_list_members = [
|
||
member.recipient for member in service.guest_list if allow_guest_list_recipients
|
||
]
|
||
|
||
# As per discussion we have decided to allow official simulated
|
||
# numbers to go out in trial mode for development purposes.
|
||
guest_list_members.extend(current_app.config["SIMULATED_SMS_NUMBERS"])
|
||
if (key_type == KeyType.NORMAL and service.restricted) or (
|
||
key_type == KeyType.TEAM
|
||
):
|
||
return allowed_to_send_to(
|
||
recipient, itertools.chain(team_members, guest_list_members)
|
||
)
|