示例#1
0
def render_commit(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    pp = lib.PAYPAL.Paypal();
    pp.sandbox = True
    pp.merchant_id = "*****@*****.**"
    pp.pdt_auth_token = "lwcdLbpiHFwN8PJr08Rv6JVvYcmp90ivctfoJSWgBvANCrG-7iXJ59e8Qy4"
    pp.return_url = "http://%s/paypal_pdt" % request.get_host()
    pp.set_pdt_mode("enabled")
    user = AuthManager.get_current_user(request)
    context = Context({"user": user})
    if 'items' in request.session.keys():
        total_cost = 0
        for item in request.session['items']:
            userbook = lib.USERBOOK.get(item)
            userbook.mark_as_sold(AuthManager.get_current_user(request))
            total_cost += userbook.price
        item = lib.PAYPAL.Item("TT-BASKET", "TexTrader Basket", total_cost / 100)
        context["ppcheckout"] = pp.buy_now_button(item)
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'checkout.html')
    else:
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'emptybasket.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#2
0
def render_commit(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    pp = lib.PAYPAL.Paypal()
    pp.sandbox = True
    pp.merchant_id = "*****@*****.**"
    pp.pdt_auth_token = "lwcdLbpiHFwN8PJr08Rv6JVvYcmp90ivctfoJSWgBvANCrG-7iXJ59e8Qy4"
    pp.return_url = "http://%s/paypal_pdt" % request.get_host()
    pp.set_pdt_mode("enabled")
    user = AuthManager.get_current_user(request)
    context = Context({"user": user})
    if 'items' in request.session.keys():
        total_cost = 0
        for item in request.session['items']:
            userbook = lib.USERBOOK.get(item)
            userbook.mark_as_sold(AuthManager.get_current_user(request))
            total_cost += userbook.price
        item = lib.PAYPAL.Item("TT-BASKET", "TexTrader Basket",
                               total_cost / 100)
        context["ppcheckout"] = pp.buy_now_button(item)
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'checkout.html')
    else:
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'emptybasket.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#3
0
def render_account(request, message = None):
    if request.method == 'GET':
        if not AuthManager.is_logged_in(request):
            return redirect("/login")
        user = AuthManager.get_current_user(request)
        context = Context({ "user_listings": lib.USER.list_books(user.email),
                            "message": message})
        response = HttpResponse()
        tmpl = os.path.join(os.path.dirname(__file__), 'template', 'account.html')
        response.write(render_to_string(request, tmpl, context))
        return response
    if request.method == 'POST': 
        if not AuthManager.is_logged_in(request):
            return redirect("/login")
        user = AuthManager.get_current_user(request)
        try :
            password = cgi.escape(request.POST['password'])
            password2 = cgi.escape(request.POST['password_confirm'])
            if password != password2:
                raise PasswordDoesntMatchError()
            lib.USER.change_password(user.email, password)
            message = "Successfully updated password."
            context = Context({ "user_listings": lib.USER.list_books(user.email),
                                "message": message})
            response = HttpResponse()
            tmpl = os.path.join(os.path.dirname(__file__), 'template', 'account.html')
            response.write(render_to_string(request, tmpl, context))
            return response
        except PasswordDoesntMatchError as e:
            request.method = 'GET'
            return render_account(request, str(e))
示例#4
0
def render_sentbox(request):
    user = AuthManager.get_current_user(request)
    context = Context({"user_messages": lib.USER.list_sent_messages(user.email),
                       "user": AuthManager.get_current_user(request)})
    tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'sentbox.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#5
0
def render_sentbox(request):
    user = AuthManager.get_current_user(request)
    context = Context({
        "user_messages": lib.USER.list_sent_messages(user.email),
        "user": AuthManager.get_current_user(request)
    })
    tmpl = os.path.join(os.path.dirname(__file__), 'template', 'sentbox.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#6
0
def render_logout(request):
    """
    Handler for requests to /logout
    """
    if AuthManager.is_logged_in(request):
        AuthManager.set_logged_out(request)
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'logout.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl))
        return response
    else:
        return redirect("/login")
示例#7
0
def render_basket(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    user = AuthManager.get_current_user(request)
    context = Context({"user": user})
    if 'items' in request.session.keys():
        total_cost = 0
        for item in request.session['items']:
            userbook = lib.USERBOOK.get(item)
            total_cost += userbook.price
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'basket.html')
    else:
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'emptybasket.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#8
0
def render_pp_return(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    pp = lib.PAYPAL.Paypal()
    pp.sandbox = True
    pp.merchant_id = "*****@*****.**"
    pp.pdt_auth_token = "lwcdLbpiHFwN8PJr08Rv6JVvYcmp90ivctfoJSWgBvANCrG-7iXJ59e8Qy4"
    pdt_data = pp.get_pdt_object(request.GET["tx"])
    import logging
    logging.info("PDT data is: %s" % dir(pdt_data))

    total_cost = 0
    for item in request.session['items']:
        userbook = lib.USERBOOK.get(item)
        total_cost += userbook.price

    request.session["items"] = list()
    if total_cost == float(pdt_data.items[0].cost) * 100:
        # Good - the totals match
        response = HttpResponse()
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'checkout_complete.html')
        response.write(render_to_string(request, tmpl))
        return response
    else:
        response = HttpResponse()
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'checkout_error.html')
        response.write(render_to_string(request, tmpl))
        return response
示例#9
0
def render_pp_return(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    pp = lib.PAYPAL.Paypal()
    pp.sandbox = True
    pp.merchant_id = "*****@*****.**"
    pp.pdt_auth_token = "lwcdLbpiHFwN8PJr08Rv6JVvYcmp90ivctfoJSWgBvANCrG-7iXJ59e8Qy4"
    pdt_data = pp.get_pdt_object(request.GET["tx"])
    import logging
    logging.info("PDT data is: %s" % dir(pdt_data))

    total_cost = 0
    for item in request.session['items']:
        userbook = lib.USERBOOK.get(item)
        total_cost += userbook.price

    request.session["items"] = list()
    if total_cost == float(pdt_data.items[0].cost) * 100:
        # Good - the totals match
        response = HttpResponse()
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'checkout_complete.html')
        response.write(render_to_string(request, tmpl))
        return response
    else:
        response = HttpResponse()
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'checkout_error.html')
        response.write(render_to_string(request, tmpl))
        return response
示例#10
0
def render_basket_remove(request, listing_id):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    if "items" in request.session.keys(
    ) and listing_id in request.session["items"]:
        request.session["items"].remove(listing_id)
    return redirect(render_basket)
示例#11
0
def render_create_book(request):
    "Show the create book form"
    # Check permissions
    if not AuthManager.has_permission(request, 'create_book'):
        raise PermissionDenied

    # Handle the request if we're allowed to
    if request.method == 'POST':
        return create_book_action(request)
    else:
        user = AuthManager.get_current_user(request)
        context = Context({"user":user})
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'create_book.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#12
0
def render_create_book(request):
    "Show the create book form"
    # Check permissions
    if not AuthManager.has_permission(request, 'create_book'):
        raise PermissionDenied

    # Handle the request if we're allowed to
    if request.method == 'POST':
        return create_book_action(request)
    else:
        user = AuthManager.get_current_user(request)
        context = Context({"user": user})
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'create_book.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#13
0
def render_basket_add(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    if not "items" in request.session.keys():
        request.session["items"] = set()
    if not request.POST["item"] in request.session["items"]:
        request.session["items"].append(request.POST["item"])
    return redirect(render_basket)
示例#14
0
def render_basket_add(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    if not "items" in request.session.keys():
        request.session["items"] = set()
    if not request.POST["item"] in request.session["items"]:
        request.session["items"].append(request.POST["item"])
    return redirect(render_basket)
示例#15
0
def render_basket(request):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    user = AuthManager.get_current_user(request)
    context = Context({"user": user})
    if 'items' in request.session.keys():
        total_cost = 0
        for item in request.session['items']:
            userbook = lib.USERBOOK.get(item)
            total_cost += userbook.price
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'basket.html')
    else:
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'emptybasket.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#16
0
def render_message(request, to_user, error = None):
    if request.method == 'POST':
        return send_message(request, to_user, request.POST['message'], request.POST['subject'])
    else:
        context = Context({ "send_user": lib.USER.get(to_user),
                            "user": AuthManager.get_current_user(request) })
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'message.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#17
0
def render_login(request):
    """
    Handler for requests to /login
    """
    if AuthManager.is_logged_in(request):
        return redirect("web.account.render_account")
    if request.method == "POST":
        return render_login_action(request)
    else:
        return render_login_form(request)
示例#18
0
def render_login(request):
    """
    Handler for requests to /login
    """
    if AuthManager.is_logged_in(request):
        return redirect("web.account.render_account")
    if request.method == "POST":
        return render_login_action(request)
    else:
        return render_login_form(request)
示例#19
0
def render_login_action(request):
    """
    Handle the login form submission
    """
    if not request.method == "POST" or \
       not "email" in request.POST.keys() or \
       not "password" in request.POST.keys():
        return render_login_form(request, "The form was not correctly sent to the web server. Please try again.")
    if request.POST["email"] == "":
        return render_login_form(request, "Email address is a required field")
    if request.POST["password"] == "":
        return render_login_form(request, "Password is a required field")
    if lib.USER.authenticate(request.POST["email"], request.POST["password"]):
        AuthManager.set_logged_in(request, request.POST["email"])
        if "from" in request.POST.keys():
            return redirect(request.POST["from"])
        else:
            return redirect("web.account.render_account")
    else:
        return render_login_form(request, "Invalid username or password")
示例#20
0
def render_create_listing(request, error = None):
    "Show the create book form"
    # Check permissions
    if not AuthManager.has_permission(request, 'list_book'):
        raise PermissionDenied

    # Handle the request if we're allowed to
    if request.method == 'POST' and error is None:
        return list_book_action(request)
    else:
        user = AuthManager.get_current_user(request)
        context = Context({
                            "error": error,
                            "user": user,
                            "books": lib.BOOK.list_all_books()
                            })
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'list_book.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#21
0
def render_to_string(request, template, context = None):
    if context == None:
        context = Context()
    if not "items" in request.session.keys():
        request.session["items"] = list()
    context["user"] = AuthManager.get_current_user(request)
    context["basket"] = list();
    for item in request.session['items']:
        userbook = lib.USERBOOK.get(item)
        context["basket"].append(userbook)
    return loader.render_to_string(template, context)
示例#22
0
def render_user(request, user_key):
    user = lib.USER.get(user_key)
    user_listings = lib.USER.list_books(user.email)
    context = Context({ "user_listings": user_listings,
                        "viewing_user": user,
                        "user": AuthManager.get_current_user(request)
                      })
    tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'user.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#23
0
def render_to_string(request, template, context=None):
    if context == None:
        context = Context()
    if not "items" in request.session.keys():
        request.session["items"] = list()
    context["user"] = AuthManager.get_current_user(request)
    context["basket"] = list()
    for item in request.session['items']:
        userbook = lib.USERBOOK.get(item)
        context["basket"].append(userbook)
    return loader.render_to_string(template, context)
示例#24
0
def render_user(request, user_key):
    user = lib.USER.get(user_key)
    user_listings = lib.USER.list_books(user.email)
    context = Context({
        "user_listings": user_listings,
        "viewing_user": user,
        "user": AuthManager.get_current_user(request)
    })
    tmpl = os.path.join(os.path.dirname(__file__), 'template', 'user.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#25
0
def render_book(request, book_isbn):
    "Page to show the details of a single book"
    copies = lib.BOOK.list_book_copies(book_isbn)
    context = Context({
                        "user": AuthManager.get_current_user(request),
                        "book": lib.BOOK.get_by_key_name(book_isbn),
                        "book_listings": copies
                        })
    tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'book.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#26
0
def render_book(request, book_isbn):
    "Page to show the details of a single book"
    copies = lib.BOOK.list_book_copies(book_isbn)
    context = Context({
        "user": AuthManager.get_current_user(request),
        "book": lib.BOOK.get_by_key_name(book_isbn),
        "book_listings": copies
    })
    tmpl = os.path.join(os.path.dirname(__file__), 'template', 'book.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#27
0
def render_create_listing(request, error=None):
    "Show the create book form"
    # Check permissions
    if not AuthManager.has_permission(request, 'list_book'):
        raise PermissionDenied

    # Handle the request if we're allowed to
    if request.method == 'POST' and error is None:
        return list_book_action(request)
    else:
        user = AuthManager.get_current_user(request)
        context = Context({
            "error": error,
            "user": user,
            "books": lib.BOOK.list_all_books()
        })
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'list_book.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#28
0
def render_message(request, to_user, error=None):
    if request.method == 'POST':
        return send_message(request, to_user, request.POST['message'],
                            request.POST['subject'])
    else:
        context = Context({
            "send_user": lib.USER.get(to_user),
            "user": AuthManager.get_current_user(request)
        })
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'message.html')
        response = HttpResponse()
        response.write(render_to_string(request, tmpl, context))
        return response
示例#29
0
def send_message(request, to_user, message, subject):
    send_to_user = lib.USER.get(to_user)
    send_from_user = AuthManager.get_current_user(request)
    try:
        lib.MESSAGE.create_message(send_from_user.email,send_to_user.email, subject, message)
        context = Context({})
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'send_message_success.html')
    except Exception as e:
        context = Context({"error": str(e)})
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'send_message_failure.html')

    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#30
0
def render_login_action(request):
    """
    Handle the login form submission
    """
    if not request.method == "POST" or \
       not "email" in request.POST.keys() or \
       not "password" in request.POST.keys():
        return render_login_form(
            request,
            "The form was not correctly sent to the web server. Please try again."
        )
    if request.POST["email"] == "":
        return render_login_form(request, "Email address is a required field")
    if request.POST["password"] == "":
        return render_login_form(request, "Password is a required field")
    if lib.USER.authenticate(request.POST["email"], request.POST["password"]):
        AuthManager.set_logged_in(request, request.POST["email"])
        if "from" in request.POST.keys():
            return redirect(request.POST["from"])
        else:
            return redirect("web.account.render_account")
    else:
        return render_login_form(request, "Invalid username or password")
示例#31
0
def render_account(request, message=None):
    if request.method == 'GET':
        if not AuthManager.is_logged_in(request):
            return redirect("/login")
        user = AuthManager.get_current_user(request)
        context = Context({
            "user_listings": lib.USER.list_books(user.email),
            "message": message
        })
        response = HttpResponse()
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'account.html')
        response.write(render_to_string(request, tmpl, context))
        return response
    if request.method == 'POST':
        if not AuthManager.is_logged_in(request):
            return redirect("/login")
        user = AuthManager.get_current_user(request)
        try:
            password = cgi.escape(request.POST['password'])
            password2 = cgi.escape(request.POST['password_confirm'])
            if password != password2:
                raise PasswordDoesntMatchError()
            lib.USER.change_password(user.email, password)
            message = "Successfully updated password."
            context = Context({
                "user_listings": lib.USER.list_books(user.email),
                "message": message
            })
            response = HttpResponse()
            tmpl = os.path.join(os.path.dirname(__file__), 'template',
                                'account.html')
            response.write(render_to_string(request, tmpl, context))
            return response
        except PasswordDoesntMatchError as e:
            request.method = 'GET'
            return render_account(request, str(e))
示例#32
0
def list_book_action(request):
    # Are we using a template or a new book?
    if not "template_isbn" in request.POST.keys():
        # Create new book
        create_book_action(request)
        isbn = cgi.escape(request.POST["isbn"])
    elif request.POST["template_isbn"]:
        isbn = cgi.escape(request.POST["template_isbn"])
    else:
        return render_create_listing(
            request,
            "Please select a book from the drop-down or enter details for a new book."
        )
    book = lib.BOOK.get_by_key_name(isbn)
    user = AuthManager.get_current_user(request)
    condition = int(request.POST['condition'])
    #Convert condition from ints into the appropriate strings
    if condition == 1:
        condition = "New"
    if condition == 2:
        condition = "As New"
    if condition == 3:
        condition = "Used"
    if condition == 4:
        condition = "Damaged"
    price = float(cgi.escape(request.POST['price']))
    price = int(price * 100)  #convert P.pp to interger pence

    try:
        lib.USERBOOK(key_name=None,
                     user=user,
                     book=book,
                     price=price,
                     condition=condition,
                     listed_stamp=int(time.time()),
                     sold_stamp=0,
                     sold_to_user=None).put()
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'list_book_success.html')
        context = Context()
    except Exception as e:
        context = Context({"error": e})
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'list_book_failure.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#33
0
def render_listing(request, listing_id):
    "Page to show a listing, as well as other listings of the same book"
    listing = lib.USERBOOK.get(listing_id)
    book = listing.book
    seller = listing.user
    copies = lib.BOOK.list_book_copies(book.isbn)
    context = Context({
        "book": book,
        "seller": seller,
        "current_book": listing,
        "same_books": copies,
        "user": AuthManager.get_current_user(request)
    })
    tmpl = os.path.join(os.path.dirname(__file__), 'template', 'listing.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#34
0
def send_message(request, to_user, message, subject):
    send_to_user = lib.USER.get(to_user)
    send_from_user = AuthManager.get_current_user(request)
    try:
        lib.MESSAGE.create_message(send_from_user.email, send_to_user.email,
                                   subject, message)
        context = Context({})
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'send_message_success.html')
    except Exception as e:
        context = Context({"error": str(e)})
        tmpl = os.path.join(os.path.dirname(__file__), 'template',
                            'send_message_failure.html')

    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#35
0
def render_listing(request, listing_id):
    "Page to show a listing, as well as other listings of the same book"
    listing = lib.USERBOOK.get(listing_id)
    book = listing.book
    seller = listing.user
    copies = lib.BOOK.list_book_copies(book.isbn)
    context = Context({
                       "book":book,
                       "seller":seller,
                       "current_book":listing,
                       "same_books":copies, 
                       "user": AuthManager.get_current_user(request)
                       })
    tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'listing.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#36
0
def list_book_action(request):
    # Are we using a template or a new book?
    if not "template_isbn" in request.POST.keys():
        # Create new book
        create_book_action(request)
        isbn = cgi.escape(request.POST["isbn"])
    elif request.POST["template_isbn"]:
        isbn = cgi.escape(request.POST["template_isbn"])
    else:
        return render_create_listing(request, "Please select a book from the drop-down or enter details for a new book.")
    book = lib.BOOK.get_by_key_name(isbn)
    user = AuthManager.get_current_user(request)
    condition = int(request.POST['condition'])
    #Convert condition from ints into the appropriate strings
    if condition == 1:
        condition = "New"
    if condition == 2:
        condition = "As New"
    if condition == 3:
        condition = "Used"
    if condition == 4:
        condition = "Damaged"
    price = float(cgi.escape(request.POST['price']))
    price = int(price * 100) #convert P.pp to interger pence


    try:
        lib.USERBOOK(key_name = None,
                     user = user,
                     book = book,
                     price = price,
                     condition = condition,
                     listed_stamp = int(time.time()),
                     sold_stamp = 0,
                     sold_to_user = None ).put()
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'list_book_success.html')
        context = Context()
    except Exception as e:
        context = Context({"error": e})
        tmpl =  os.path.join(os.path.dirname(__file__), 'template', 'list_book_failure.html')
    response = HttpResponse()
    response.write(render_to_string(request, tmpl, context))
    return response
示例#37
0
def render_basket_remove(request, listing_id):
    if not AuthManager.is_logged_in(request):
        return redirect("/login")
    if "items" in request.session.keys() and listing_id in request.session["items"]:
        request.session["items"].remove(listing_id)
    return redirect(render_basket)