Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
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')
Example #5
0
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
Example #6
0
 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)
Example #7
0
 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)
Example #8
0
 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)
Example #9
0
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')
Example #10
0
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