예제 #1
0
def register_device(request):
    def report_conversion(udid):
        url = "http://tracking.taptica.com/aff_u"
        payload = urlencode({
            "tt_adv_id":
            612,
            "tt_deviceid":
            udid,
            "tt_appid":
            501682022,
            "tt_time":
            default_tz_now().strftime("%Y-%m-%d %H:%M:%S.%f"),
        })
        url = "%s?%s" % (url, payload)
        logging.info("report_conversion: %s" % url)
        res = safe_fetch(url, method="GET", deadline=15)
        if res:
            res = simplejson.loads(res.content)["tt_cid"]

        return res

    local_phone = request.POST.get("local_phone")
    udid = request.POST.get("UDID")
    gudid = request.POST.get("GUDID")
    app_udid = request.POST.get("APP_UDID")
    app_name = request.POST.get("application_name")

    installed_app = InstalledApp.by_app_udid(app_udid)
    device = Device.by_udid(udid)
    passenger_created = False

    cid = report_conversion(udid)
    if cid: logging.info("cid = %s" % cid)

    if installed_app and device:
        assert installed_app.device == device

    if not device:
        logging.info("creating device with udid=%s and gudid=%s" %
                     (udid, gudid))
        device = Device(udid=udid, gudid=gudid)
        device.save()

    if not installed_app:
        logging.info("creating installed app with app_udid=%s" % app_udid)
        installed_app = InstalledApp(
            app_udid=app_udid,
            name=app_name,
            cid=cid,
            device=device,
            user_agent=request.META.get("HTTP_USER_AGENT"))
    else:
        logging.info("installed app exists, updating")
        installed_app.install_count += 1
        if cid: installed_app.cid = cid

    country = get_object_or_404(Country,
                                code=request.POST.get('country_code', ""))
    passengers = Passenger.objects.filter(country=country, phone=local_phone)

    if passengers:
        passenger = passengers[0]
    else:
        passenger = create_passenger(None, country, local_phone, save=False)
        passenger.login_token = hashlib.sha1(
            generate_random_token(length=40)).hexdigest()
        passenger.save()
        passenger_created = True
        request.session[CURRENT_PASSENGER_KEY] = passenger

    if passenger_created:
        installed_app.passenger = passenger
        installed_app.user_agent = request.META.get("HTTP_USER_AGENT")

    installed_app.save()

    if local_phone == settings.APPLE_TESTER_PHONE_NUMBER:
        return JSONResponse({PASSENGER_TOKEN: passenger.login_token})

    if installed_app.passenger != passenger:
        return HttpResponseBadRequest(
            _("The phone number is already registered."))

    return JSONResponse({PASSENGER_TOKEN: passenger.login_token})
예제 #2
0
def register_device(request):
    def report_conversion(udid):
        url = "http://tracking.taptica.com/aff_u"
        payload = urlencode(
            {
                "tt_adv_id": 612,
                "tt_deviceid": udid,
                "tt_appid": 501682022,
                "tt_time": default_tz_now().strftime("%Y-%m-%d %H:%M:%S.%f"),
            }
        )
        url = "%s?%s" % (url, payload)
        logging.info("report_conversion: %s" % url)
        res = safe_fetch(url, method="GET", deadline=15)
        if res:
            res = simplejson.loads(res.content)["tt_cid"]

        return res

    local_phone = request.POST.get("local_phone")
    udid = request.POST.get("UDID")
    gudid = request.POST.get("GUDID")
    app_udid = request.POST.get("APP_UDID")
    app_name = request.POST.get("application_name")

    installed_app = InstalledApp.by_app_udid(app_udid)
    device = Device.by_udid(udid)
    passenger_created = False

    cid = report_conversion(udid)
    if cid:
        logging.info("cid = %s" % cid)

    if installed_app and device:
        assert installed_app.device == device

    if not device:
        logging.info("creating device with udid=%s and gudid=%s" % (udid, gudid))
        device = Device(udid=udid, gudid=gudid)
        device.save()

    if not installed_app:
        logging.info("creating installed app with app_udid=%s" % app_udid)
        installed_app = InstalledApp(
            app_udid=app_udid, name=app_name, cid=cid, device=device, user_agent=request.META.get("HTTP_USER_AGENT")
        )
    else:
        logging.info("installed app exists, updating")
        installed_app.install_count += 1
        if cid:
            installed_app.cid = cid

    country = get_object_or_404(Country, code=request.POST.get("country_code", ""))
    passengers = Passenger.objects.filter(country=country, phone=local_phone)

    if passengers:
        passenger = passengers[0]
    else:
        passenger = create_passenger(None, country, local_phone, save=False)
        passenger.login_token = hashlib.sha1(generate_random_token(length=40)).hexdigest()
        passenger.save()
        passenger_created = True
        request.session[CURRENT_PASSENGER_KEY] = passenger

    if passenger_created:
        installed_app.passenger = passenger
        installed_app.user_agent = request.META.get("HTTP_USER_AGENT")

    installed_app.save()

    if local_phone == settings.APPLE_TESTER_PHONE_NUMBER:
        return JSONResponse({PASSENGER_TOKEN: passenger.login_token})

    if installed_app.passenger != passenger:
        return HttpResponseBadRequest(_("The phone number is already registered."))

    return JSONResponse({PASSENGER_TOKEN: passenger.login_token})
예제 #3
0
        form_data = get_business_order_form_data(request, passenger)

    form = OrderForm(data=form_data, passenger=passenger)

    if form.is_valid():
        if passenger.orders.all()[:1]:
            last_order = passenger.orders.order_by("-create_date")[0]
            interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL
            if (utc_now() - last_order.create_date).seconds < interval:
                return error_response(
                    _("Ordering is not allowed so soon after another order"))

        app_udid = request.POST.get("APP_UDID")
        installed_app = None
        if app_udid:  # this came from a device that sends app specific id
            installed_app = InstalledApp.by_app_udid(app_udid)
            if not installed_app:
                return error_response(
                    _("Please register before attempting to order"))
            if installed_app.blocked:
                return error_response(
                    _("Your account has been suspended. Please contact [email protected]"
                      ))

        order = form.save(commit=False)
        order.language_code = request.POST.get(
            "language_code", get_language_from_request(request))
        order.debug = settings.DEV
        order.passenger = passenger
        order.mobile = request.mobile
        order.user_agent = request.META.get("HTTP_USER_AGENT")
예제 #4
0
    if passenger.business and request.POST.get("business_order"):
        form_data = get_business_order_form_data(request, passenger)

    form = OrderForm(data=form_data, passenger=passenger)

    if form.is_valid():
        if passenger.orders.all()[:1]:
            last_order = passenger.orders.order_by("-create_date")[0]
            interval = BUSINESS_ORDERING_INTERVAL if passenger.business else ORDERING_INTERVAL
            if (utc_now() - last_order.create_date).seconds < interval:
                return error_response(_("Ordering is not allowed so soon after another order"))

        app_udid = request.POST.get("APP_UDID")
        installed_app = None
        if app_udid:  # this came from a device that sends app specific id
            installed_app = InstalledApp.by_app_udid(app_udid)
            if not installed_app:
                return error_response(_("Please register before attempting to order"))
            if installed_app.blocked:
                return error_response(_("Your account has been suspended. Please contact [email protected]"))

        order = form.save(commit=False)
        order.language_code = request.POST.get("language_code", get_language_from_request(request))
        order.debug = settings.DEV
        order.passenger = passenger
        order.mobile = request.mobile
        order.user_agent = request.META.get("HTTP_USER_AGENT")
        order.installed_app = installed_app

        if not order.from_house_number:
            order.from_house_number = _fix_missing_house_number(order, "from")