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"})
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'})
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'})
def test_invalid_numbers(self): # too short assert parse_phone_number('1234') is None # no area code assert parse_phone_number('8675309') is None
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'
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'
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"
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"