Skip to content

Commit fc44a6b

Browse files
Merge pull request #828 from MasoniteFramework/fix/671
Refactor VonageDriver to validate phone numbers before sending SMS
2 parents e5322d6 + 8f30981 commit fc44a6b

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@
5959
"werkzeug>=2,<3; python_version < '3.8'",
6060
"werkzeug>=3,<4; python_version >= '3.8'",
6161
"watchdog>=2,<=4",
62+
"phonenumbers>=8.12,<9",
6263
],
6364
# See https://pypi.python.org/pypi?%3Aaction=list_classifiers
6465
classifiers=[

src/masonite/notification/drivers/vonage/VonageDriver.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@ def send(self, notifiable, notification):
4040
sms = self.build(notifiable, notification)
4141
client = self.get_sms_client()
4242
recipients = sms._to
43+
if not isinstance(recipients, list):
44+
recipients = [recipients]
4345
for recipient in recipients:
46+
if not self.is_valid_phone_number(recipient):
47+
raise NotificationException(f"Invalid phone number: {recipient}")
4448
payload = sms.to(recipient).build().get_options()
4549
response = client.send_message(payload)
4650
self._handle_errors(response)
@@ -67,3 +71,11 @@ def _handle_errors(self, response):
6771
status, message["error-text"]
6872
)
6973
)
74+
75+
def is_valid_phone_number(self, phone_number):
76+
import phonenumbers
77+
try:
78+
parsed_number = phonenumbers.parse(phone_number, None)
79+
return phonenumbers.is_valid_number(parsed_number)
80+
except phonenumbers.NumberParseException:
81+
return False
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from src.masonite.notification import Notification
2+
from src.masonite.mail import Mailable
3+
from src.masonite.notification import Sms
4+
5+
class TestNotification(Notification, Mailable):
6+
7+
def to_vonage(self, notifiable):
8+
return Sms().text("Test message" )
9+
10+
def via(self, notifiable):
11+
return ["vonage"]

0 commit comments

Comments
 (0)