def test_get_email_en(self, get_country_mock): get_country_mock.return_value = 'US' code = '233' receiver = '*****@*****.**' subject = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, subject) self.assertIn(u'verification', subject) body = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, body) # all non-localized countries get en-us get_country_mock.return_value = 'CN' code = '233' receiver = '*****@*****.**' subject = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, subject) self.assertIn(u'verification', subject) body = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, body)
def test_get_email_pt(self, get_country_mock): get_country_mock.return_value = 'BR' code = '233' receiver = '*****@*****.**' subject = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, subject) self.assertIn(u'verificação', subject) body = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, body)
def test_get_email_es(self, get_country_mock): get_country_mock.return_value = 'MX' code = '233' receiver = '*****@*****.**' subject = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, subject) self.assertIn(u'verificación', subject) body = localize.get_string('email.challenge_code.subject', args={'code': code}, receiver=receiver) self.assertIn(code, body)
def send_sms(number, string_id, args): body = localize.get_string('sms.%s' % string_id, args=args, receiver=number) if config.DEVELOPMENT: logging.debug('Sending SMS "%s" to %s', body, number) if re.match('^\\+1...55501..$', number): # Forward messages to movie numbers into the Slack channel. _send_sms_slack(number, body) return if string_id in ('invite', 'invite_personal'): # Disable all invite SMS. return if False and random.randint(1, 10) == 1: logging.info('Sending SMS to %s using MessageBird API', number) status, data = _send_sms_messagebird(number, body) elif number.startswith('+1'): # Twilio until we get a shortcode template in Nexmo or Branch.io. logging.info('Sending SMS to %s using Twilio API', number) if string_id == 'download_link': status, data = _send_sms_twilio(number, body, from_number='+14427776437') else: status, data = _send_sms_twilio(number, body) else: logging.info('Sending SMS to %s using Nexmo API', number) status, data = _send_sms_nexmo(number, body) if not 200 <= status < 300: raise errors.ExternalError('Failed to send SMS')
def _phone_call_messagebird_challenge(number, args): url = 'https://rest.messagebird.com/voicemessages' code = '<break time=".5s"/>'.join(list(str(args['code']))) body = localize.get_string('call.challenge_code', args={'code': code}, receiver=number) params = { 'recipients': number[1:], 'ifMachine': 'continue', 'voice': 'female', 'body': body.encode('utf-8') if isinstance(body, unicode) else body, } headers = { 'Authorization': 'AccessKey %s' % config.SMS_MESSAGEBIRD_API_TOKEN, } try: result = urlfetch.fetch( url=url, method=urlfetch.POST, payload=urllib.urlencode(params), headers=headers, ) data = json.loads(result.content) except Exception as e: logging.exception('MessageBird API request failed.') return -1, {'code': -1, 'message': str(e)} if not 200 <= result.status_code < 300: logging.warning('MessageBird API error %d: %s (%s)', result.status_code, data.get('message'), data.get('code')) return result.status_code, data
def test_get_call_en(self): code = '233' receiver = '+1242323424' text = localize.get_string('call.challenge_code', args={'code': code}, receiver=receiver) self.assertIn(code, text) self.assertIn(u'code', text) # all non-localized countries get en-us code = '233' receiver = '+7242323424' text = localize.get_string('call.challenge_code', args={'code': code}, receiver=receiver) self.assertIn(code, text) self.assertIn('code', text)
def test_get_call_pt(self): code = '233' receiver = '+5542323424' text = localize.get_string('call.challenge_code', args={'code': code}, receiver=receiver) self.assertIn(code, text) self.assertIn(u'verificação', text)
def test_get_sms_es(self): code = '233' receiver = '+342342323424' text = localize.get_string('sms.challenge_code', args={'code': code}, receiver=receiver) self.assertIn(code, text) self.assertIn(u'verificación', text)
def phone_call(number, string_id, args): body = localize.get_string('call.%s' % string_id, args=args, receiver=number) if config.DEVELOPMENT: logging.debug('Calling "%s" with %s', number, body) if re.match('^\\+1...55501..$', number): # Forward calls to movie numbers into the Slack channel. return _send_sms_slack(number, body) if False and random.randint(1, 10) == 1: logging.info('Phone call to %s using MessageBird API', number) status, data = _phone_call_messagebird_challenge(number, args) else: logging.info('Phone call to %s using Nexmo API', number) status, data = _phone_call_nexmo_challenge(number, args) if not 200 <= status < 300: raise errors.ExternalError('Failed to call phone')
def _phone_call_nexmo_challenge(number, args): url_format = 'https://api.nexmo.com/tts/json?%s' code = '<break time=".5s"/>'.join(list(str(args['code']))) body = localize.get_string('call.challenge_code', args={'code': code}, receiver=number) params = { 'api_key': config.SMS_NEXMO_API_ACCOUNT, 'api_secret': config.SMS_NEXMO_API_TOKEN, 'to': number[1:], 'text': body.encode('utf-8') if isinstance(body, unicode) else body, } if number.startswith('+1'): params['from'] = config.CALL_NEXMO_FROM_NUMBER try: result = urlfetch.fetch(url=url_format % (urllib.urlencode(params))) data = json.loads(result.content) except Exception as e: logging.exception('Nexmo API request failed.') return -1, {'code': -1, 'message': str(e)} if not 200 <= result.status_code < 300: logging.warning('Nexmo API error %d: %s (%s)', result.status_code, data.get('message'), data.get('code')) return result.status_code, data