mirror of
https://github.com/GSA/notifications-api.git
synced 2026-07-17 21:20:59 -04:00
Added an optional parameter in the form for POST /v2/notifications/sms and /service/<service_id>/send-notification to pass in the SMS sender id.
The send_sms_to_provider still needs to use the SMS sender being passed in to the POST. As part of https://www.pivotaltracker.com/story/show/152106587
This commit is contained in:
@@ -43,8 +43,8 @@ from app.models import (
|
||||
NOTIFICATION_TECHNICAL_FAILURE,
|
||||
NOTIFICATION_TEMPORARY_FAILURE,
|
||||
NOTIFICATION_PERMANENT_FAILURE,
|
||||
NOTIFICATION_SENT
|
||||
)
|
||||
NOTIFICATION_SENT,
|
||||
NotificationSmsSender)
|
||||
|
||||
from app.dao.dao_utils import transactional
|
||||
from app.statsd_decorators import statsd
|
||||
@@ -650,3 +650,12 @@ def dao_get_last_notification_added_for_job_id(job_id):
|
||||
).first()
|
||||
|
||||
return last_notification_added
|
||||
|
||||
|
||||
@transactional
|
||||
def dao_create_notification_sms_sender_mapping(notification_id, sms_sender_id):
|
||||
notification_to_sms_sender = NotificationSmsSender(
|
||||
notification_id=notification_id,
|
||||
service_sms_sender_id=sms_sender_id
|
||||
)
|
||||
db.session.add(notification_to_sms_sender)
|
||||
|
||||
@@ -17,7 +17,8 @@ from app.models import SMS_TYPE, Notification, KEY_TYPE_TEST, EMAIL_TYPE, NOTIFI
|
||||
from app.dao.notifications_dao import (dao_create_notification,
|
||||
dao_delete_notifications_and_history_by_id,
|
||||
dao_created_scheduled_notification,
|
||||
dao_create_notification_email_reply_to_mapping)
|
||||
dao_create_notification_email_reply_to_mapping,
|
||||
dao_create_notification_sms_sender_mapping)
|
||||
from app.v2.errors import BadRequestError
|
||||
from app.utils import get_template_instance, cache_key_for_service_template_counter, convert_bst_to_utc
|
||||
|
||||
@@ -146,3 +147,7 @@ def persist_scheduled_notification(notification_id, scheduled_for):
|
||||
|
||||
def persist_email_reply_to_id_for_notification(notification_id, email_reply_to_id):
|
||||
dao_create_notification_email_reply_to_mapping(notification_id, email_reply_to_id)
|
||||
|
||||
|
||||
def persist_sms_sender_id_for_notification(notification_id, sms_sender_id):
|
||||
dao_create_notification_sms_sender_mapping(notification_id, sms_sender_id)
|
||||
|
||||
@@ -8,6 +8,7 @@ from notifications_utils.recipients import (
|
||||
from notifications_utils.clients.redis import rate_limit_cache_key, daily_limit_cache_key
|
||||
|
||||
from app.dao import services_dao, templates_dao
|
||||
from app.dao.service_sms_sender_dao import dao_get_service_sms_senders_by_id
|
||||
from app.models import (
|
||||
INTERNATIONAL_SMS_TYPE, SMS_TYPE, EMAIL_TYPE,
|
||||
KEY_TYPE_TEST, KEY_TYPE_TEAM, SCHEDULE_NOTIFICATIONS
|
||||
@@ -135,11 +136,27 @@ def validate_template(template_id, personalisation, service, notification_type):
|
||||
return template, template_with_content
|
||||
|
||||
|
||||
def check_service_email_reply_to_id(service_id, reply_to_id):
|
||||
def check_service_email_reply_to_id(service_id, reply_to_id, notification_type):
|
||||
if not (reply_to_id is None):
|
||||
if notification_type != EMAIL_TYPE:
|
||||
message = 'You sent a email_reply_to_id for a {} notification type'.format(notification_type)
|
||||
raise BadRequestError(message=message)
|
||||
try:
|
||||
dao_get_reply_to_by_id(service_id, reply_to_id)
|
||||
except NoResultFound:
|
||||
message = 'email_reply_to_id {} does not exist in database for service id {}'\
|
||||
.format(reply_to_id, service_id)
|
||||
raise BadRequestError(message=message)
|
||||
|
||||
|
||||
def check_service_sms_sender_id(service_id, sms_sender_id, notification_type):
|
||||
if not (sms_sender_id is None):
|
||||
if notification_type != SMS_TYPE:
|
||||
message = 'You sent a sms_sender_id for a {} notification type'.format(notification_type)
|
||||
raise BadRequestError(message=message)
|
||||
try:
|
||||
dao_get_service_sms_senders_by_id(service_id, sms_sender_id)
|
||||
except NoResultFound:
|
||||
message = 'sms_sender_id {} does not exist in database for service id {}'\
|
||||
.format(sms_sender_id, service_id)
|
||||
raise BadRequestError(message=message)
|
||||
|
||||
@@ -2,13 +2,13 @@ from app.config import QueueNames
|
||||
from app.notifications.validators import (
|
||||
check_service_over_daily_message_limit,
|
||||
validate_and_format_recipient,
|
||||
validate_template,
|
||||
check_service_email_reply_to_id)
|
||||
validate_template)
|
||||
from app.notifications.process_notifications import (
|
||||
create_content_for_notification,
|
||||
persist_notification,
|
||||
send_notification_to_queue,
|
||||
persist_email_reply_to_id_for_notification)
|
||||
persist_email_reply_to_id_for_notification,
|
||||
persist_sms_sender_id_for_notification
|
||||
)
|
||||
from app.models import (
|
||||
KEY_TYPE_NORMAL,
|
||||
PRIORITY,
|
||||
@@ -64,9 +64,11 @@ def send_one_off_notification(service_id, post_data):
|
||||
created_by_id=post_data['created_by']
|
||||
)
|
||||
sender_id = post_data.get('sender_id', None)
|
||||
if sender_id and template.template_type == EMAIL_TYPE:
|
||||
check_service_email_reply_to_id(service_id, sender_id)
|
||||
persist_email_reply_to_id_for_notification(notification.id, sender_id)
|
||||
if sender_id:
|
||||
if template.template_type == EMAIL_TYPE:
|
||||
persist_email_reply_to_id_for_notification(notification.id, sender_id)
|
||||
if template.template_type == SMS_TYPE:
|
||||
persist_sms_sender_id_for_notification(notification.id, sender_id)
|
||||
|
||||
queue_name = QueueNames.PRIORITY if template.process_type == PRIORITY else None
|
||||
send_notification_to_queue(
|
||||
|
||||
@@ -119,7 +119,8 @@ post_sms_request = {
|
||||
"phone_number": {"type": "string", "format": "phone_number"},
|
||||
"template_id": uuid,
|
||||
"personalisation": personalisation,
|
||||
"scheduled_for": {"type": ["string", "null"], "format": "datetime"}
|
||||
"scheduled_for": {"type": ["string", "null"], "format": "datetime"},
|
||||
"sms_sender_id": uuid
|
||||
},
|
||||
"required": ["phone_number", "template_id"]
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ from app.notifications.process_notifications import (
|
||||
persist_notification,
|
||||
persist_scheduled_notification,
|
||||
send_notification_to_queue,
|
||||
simulated_recipient
|
||||
)
|
||||
simulated_recipient,
|
||||
persist_sms_sender_id_for_notification)
|
||||
from app.notifications.process_letter_notifications import (
|
||||
create_letter_notification
|
||||
)
|
||||
@@ -31,7 +31,8 @@ from app.notifications.validators import (
|
||||
check_service_can_schedule_notification,
|
||||
check_service_has_permission,
|
||||
validate_template,
|
||||
check_service_email_reply_to_id
|
||||
check_service_email_reply_to_id,
|
||||
check_service_sms_sender_id
|
||||
)
|
||||
from app.schema_validation import validate
|
||||
from app.v2.errors import BadRequestError
|
||||
@@ -63,12 +64,14 @@ def post_notification(notification_type):
|
||||
|
||||
scheduled_for = form.get("scheduled_for", None)
|
||||
service_email_reply_to_id = form.get("email_reply_to_id", None)
|
||||
service_sms_sender_id = form.get("sms_sender_id", None)
|
||||
|
||||
check_service_can_schedule_notification(authenticated_service.permissions, scheduled_for)
|
||||
|
||||
check_rate_limiting(authenticated_service, api_user)
|
||||
|
||||
check_service_email_reply_to_id(str(authenticated_service.id), service_email_reply_to_id)
|
||||
check_service_email_reply_to_id(str(authenticated_service.id), service_email_reply_to_id, notification_type)
|
||||
check_service_sms_sender_id(str(authenticated_service.id), service_sms_sender_id, notification_type)
|
||||
|
||||
template, template_with_content = validate_template(
|
||||
form['template_id'],
|
||||
@@ -142,9 +145,7 @@ def process_sms_or_email_notification(*, form, notification_type, api_key, templ
|
||||
simulated=simulated
|
||||
)
|
||||
|
||||
email_reply_to_id = form.get("email_reply_to_id", None)
|
||||
if email_reply_to_id:
|
||||
persist_email_reply_to_id_for_notification(notification.id, email_reply_to_id)
|
||||
persist_sender_to_notification_mapping(form, notification)
|
||||
|
||||
scheduled_for = form.get("scheduled_for", None)
|
||||
if scheduled_for:
|
||||
@@ -163,6 +164,15 @@ def process_sms_or_email_notification(*, form, notification_type, api_key, templ
|
||||
return notification
|
||||
|
||||
|
||||
def persist_sender_to_notification_mapping(form, notification):
|
||||
email_reply_to_id = form.get("email_reply_to_id", None)
|
||||
if email_reply_to_id:
|
||||
persist_email_reply_to_id_for_notification(notification.id, email_reply_to_id)
|
||||
sms_sender_id = form.get("sms_sender_id", None)
|
||||
if sms_sender_id:
|
||||
persist_sms_sender_id_for_notification(notification.id, sms_sender_id)
|
||||
|
||||
|
||||
def process_letter_notification(*, letter_data, api_key, template):
|
||||
if api_key.key_type == KEY_TYPE_TEAM:
|
||||
raise BadRequestError(message='Cannot send letters with a team api key', status_code=403)
|
||||
|
||||
Reference in New Issue
Block a user