Source code for deux.notifications
from __future__ import absolute_import, unicode_literals
from twilio.rest import TwilioRestClient
from twilio.rest.exceptions import TwilioRestException
from deux import strings
from deux.app_settings import mfa_settings
from deux.exceptions import InvalidPhoneNumberError, TwilioMessageError
#: Error code from Twilio to indicate at ``InvalidPhoneNumberError``
NOT_SMS_DEVICE_CODE = 21401
[docs]def send_mfa_code_text_message(mfa_instance, mfa_code):
"""
Sends the MFA Code text message to the user.
:param mfa_instance: :class:`MultiFactorAuth` instance to use.
:param mfa_code: MFA code in the form of a string.
:raises deux.exceptions.InvalidPhoneNumberError: To tell system that this
MFA object's phone number if not a valid number to receive SMS's.
:raises deux.exceptions.TwilioMessageError: To tell system that Twilio
failed to send message.
"""
sid = mfa_settings.TWILIO_ACCOUNT_SID
token = mfa_settings.TWILIO_AUTH_TOKEN
twilio_num = mfa_settings.TWILIO_SMS_POOL_SID
if not sid or not token or not twilio_num:
print("Please provide Twilio credentials to send text messages. For "
"testing purposes, the MFA code is {code}".format(code=mfa_code))
return
twilio_client = TwilioRestClient(sid, token)
try:
twilio_client.messages.create(
body=strings.MFA_CODE_TEXT_MESSAGE.format(code=mfa_code),
to=mfa_instance.phone_number,
from_=twilio_num
)
except TwilioRestException as e:
if e.code == NOT_SMS_DEVICE_CODE:
raise InvalidPhoneNumberError()
raise TwilioMessageError()