Ejemplo n.º 1
0
def subscribe_sms(request):
    mobile = request.POST.get("mobile_number")
    if not mobile:
        return HttpResponseJSON(
            {
                "status": "error",
                "desc": "mobile_number is missing",
                "code": errors.BASKET_USAGE_ERROR,
            },
            400,
        )

    country = request.POST.get("country", "us")
    language = request.POST.get("lang", "en-US")
    msg_name = request.POST.get("msg_name", "SMS_Android")
    vendor_id = get_sms_vendor_id(msg_name, country, language)
    if not vendor_id:
        if language != "en-US":
            # if not available in the requested language, try the default
            language = "en-US"
            vendor_id = get_sms_vendor_id(msg_name, country, language)

    if not vendor_id:
        return HttpResponseJSON(
            {
                "status": "error",
                "desc": "Invalid msg_name + country + language",
                "code": errors.BASKET_USAGE_ERROR,
            },
            400,
        )

    mobile = parse_phone_number(mobile, country)
    if not mobile:
        return HttpResponseJSON(
            {
                "status": "error",
                "desc": "mobile_number is invalid",
                "code": errors.BASKET_USAGE_ERROR,
            },
            400,
        )

    # only rate limit numbers here so we don't rate limit errors.
    if is_ratelimited(
            request,
            group="basket.news.views.subscribe_sms",
            key=lambda x, y: "%s-%s" % (msg_name, mobile),
            rate=PHONE_NUMBER_RATE_LIMIT,
            increment=True,
    ):
        raise Ratelimited()

    optin = request.POST.get("optin", "N") == "Y"

    add_sms_user.delay(msg_name, mobile, optin, vendor_id=vendor_id)
    return HttpResponseJSON({"status": "ok"})
Ejemplo n.º 2
0
def subscribe_sms(request):
    mobile = request.POST.get('mobile_number')
    if not mobile:
        return HttpResponseJSON(
            {
                'status': 'error',
                'desc': 'mobile_number is missing',
                'code': errors.BASKET_USAGE_ERROR,
            }, 400)

    country = request.POST.get('country', 'us')
    language = request.POST.get('lang', 'en-US')
    msg_name = request.POST.get('msg_name', 'SMS_Android')
    vendor_id = get_sms_vendor_id(msg_name, country, language)
    if not vendor_id:
        if language != 'en-US':
            # if not available in the requested language, try the default
            language = 'en-US'
            vendor_id = get_sms_vendor_id(msg_name, country, language)

    if not vendor_id:
        return HttpResponseJSON(
            {
                'status': 'error',
                'desc': 'Invalid msg_name + country + language',
                'code': errors.BASKET_USAGE_ERROR,
            }, 400)

    mobile = parse_phone_number(mobile, country)
    if not mobile:
        return HttpResponseJSON(
            {
                'status': 'error',
                'desc': 'mobile_number is invalid',
                'code': errors.BASKET_USAGE_ERROR,
            }, 400)

    # only rate limit numbers here so we don't rate limit errors.
    if is_ratelimited(request,
                      group='basket.news.views.subscribe_sms',
                      key=lambda x, y: '%s-%s' % (msg_name, mobile),
                      rate=PHONE_NUMBER_RATE_LIMIT,
                      increment=True):
        raise Ratelimited()

    optin = request.POST.get('optin', 'N') == 'Y'

    add_sms_user.delay(msg_name, mobile, optin, vendor_id=vendor_id)
    return HttpResponseJSON({'status': 'ok'})
Ejemplo n.º 3
0
Archivo: views.py Proyecto: pmac/basket
def subscribe_sms(request):
    mobile = request.POST.get('mobile_number')
    if not mobile:
        return HttpResponseJSON({
            'status': 'error',
            'desc': 'mobile_number is missing',
            'code': errors.BASKET_USAGE_ERROR,
        }, 400)

    country = request.POST.get('country', 'us')
    language = request.POST.get('lang', 'en-US')
    msg_name = request.POST.get('msg_name', 'SMS_Android')
    vendor_id = get_sms_vendor_id(msg_name, country, language)
    if not vendor_id:
        if language != 'en-US':
            # if not available in the requested language, try the default
            language = 'en-US'
            vendor_id = get_sms_vendor_id(msg_name, country, language)

    if not vendor_id:
        return HttpResponseJSON({
            'status': 'error',
            'desc': 'Invalid msg_name + country + language',
            'code': errors.BASKET_USAGE_ERROR,
        }, 400)

    mobile = parse_phone_number(mobile, country)
    if not mobile:
        return HttpResponseJSON({
            'status': 'error',
            'desc': 'mobile_number is invalid',
            'code': errors.BASKET_USAGE_ERROR,
        }, 400)

    # only rate limit numbers here so we don't rate limit errors.
    if is_ratelimited(request, group='basket.news.views.subscribe_sms',
                      key=lambda x, y: '%s-%s' % (msg_name, mobile),
                      rate=PHONE_NUMBER_RATE_LIMIT, increment=True):
        raise Ratelimited()

    optin = request.POST.get('optin', 'N') == 'Y'

    add_sms_user.delay(msg_name, mobile, optin, vendor_id=vendor_id)
    return HttpResponseJSON({'status': 'ok'})
Ejemplo n.º 4
0
 def test_invalid_numbers(self):
     # too short
     assert parse_phone_number('1234') is None
     # no area code
     assert parse_phone_number('8675309') is None
Ejemplo n.º 5
0
 def test_valid_numbers(self):
     assert parse_phone_number('7068675309', 'us') == '+17068675309'
     assert parse_phone_number('7068675309', 'de') == '+497068675309'
     assert parse_phone_number('7068675309', 'gb') == '+447068675309'
Ejemplo n.º 6
0
 def test_valid_numbers_with_country_code(self):
     assert parse_phone_number('17068675309', 'us') == '+17068675309'
     assert parse_phone_number('49337068675309', 'de') == '+49337068675309'
     assert parse_phone_number('447068675309', 'de') == '+49447068675309'
     assert parse_phone_number('447068675309', 'gb') == '+447068675309'
Ejemplo n.º 7
0
 def test_invalid_numbers(self):
     # too short
     assert parse_phone_number('1234') is None
     # no area code
     assert parse_phone_number('8675309') is None
Ejemplo n.º 8
0
 def test_valid_numbers_with_country_code(self):
     assert parse_phone_number('17068675309', 'us') == '+17068675309'
     assert parse_phone_number('49337068675309', 'de') == '+49337068675309'
     assert parse_phone_number('447068675309', 'de') == '+49447068675309'
     assert parse_phone_number('447068675309', 'gb') == '+447068675309'
Ejemplo n.º 9
0
 def test_valid_numbers(self):
     assert parse_phone_number('7068675309', 'us') == '+17068675309'
     assert parse_phone_number('7068675309', 'de') == '+497068675309'
     assert parse_phone_number('7068675309', 'gb') == '+447068675309'
Ejemplo n.º 10
0
 def test_valid_numbers_with_country_code(self):
     assert parse_phone_number("17068675309", "us") == "+17068675309"
     assert parse_phone_number("49337068675309", "de") == "+49337068675309"
     assert parse_phone_number("447068675309", "de") == "+49447068675309"
     assert parse_phone_number("447068675309", "gb") == "+447068675309"
Ejemplo n.º 11
0
 def test_valid_numbers(self):
     assert parse_phone_number("7068675309", "us") == "+17068675309"
     assert parse_phone_number("7068675309", "de") == "+497068675309"
     assert parse_phone_number("7068675309", "gb") == "+447068675309"