Be agnostic about format when comparing phone #s

If a service is in restricted mode then a user can’t send messages to anyone
other than themselves and members of their team. To do this the API has to
compare the numbers they are sending to with those of their team members.

It will (falsely) say the numbers do not match if they are in a different
format, eg 07700 900849 vs +447700900849

This commit uses the code we use elsewhere for formatting phone numbers to
make sure that both numbers are in a consistent format before doing a
comparison.

I have a strong preference for doing it this way, rather than formatting numbers
before we store them:

1. https://en.wikipedia.org/wiki/Robustness_principle
2. It’s confusing to a user to see their own phone number formatted in a
   different way to that which they entered it, and the alternative, storing
   the phone number in two different formats is grim
This commit is contained in:
Chris Hill-Scott
2016-03-11 13:11:10 +00:00
parent 209244ff19
commit d6cf15469f
2 changed files with 9 additions and 7 deletions

View File

@@ -24,7 +24,7 @@ from sqlalchemy.exc import SQLAlchemyError
from app.aws import s3
from datetime import datetime
from utils.template import Template
from utils.recipients import RecipientCSV
from utils.recipients import RecipientCSV, validate_phone_number, format_phone_number
@notify_celery.task(name="delete-verify-codes")
@@ -219,7 +219,9 @@ def send_sms(service_id, notification_id, encrypted_notification, created_at):
def allowed_send_to_number(service, to):
if service.restricted and to not in [user.mobile_number for user in service.users]:
if service.restricted and format_phone_number(validate_phone_number(to)) not in [
format_phone_number(validate_phone_number(user.mobile_number)) for user in service.users
]:
return False
return True