예제 #1
0
def profile_handler(response, username=None):
    if username is None:
        user_object = User.find(get_login(response))
    else:
        user_object = User.find(username)
        if user_object is None:
            error_handler(response)
            return
    context = {}
    user_locations = Location.find_user_locations(user_object.id)
    context["results"] = user_locations
    context["user_object"] = user_object
    render_page("account.html", response, context)
예제 #2
0
def signup_authentication(response):
    username = response.get_field("username")
    password = response.get_field("password")
    c_password = response.get_field("confirm_password")
    fname = response.get_field("fname")
    lname = response.get_field("lname")
    email = response.get_field("email")
    user = User.find(username)
    context = {"error": None}
    if user:
        context["error"] = "Username taken"
    elif not username or not password or not email:
        context["error"] = "Username, password and email are required"
    elif password != c_password:
        context["error"] = "Passwords do not match"
    elif not re.match(r"^[0-9a-zA-Z_\.]+$", username):
        context["error"] = "Invalid username, please use only letters, numbers, underscores and periods"
    elif User.get_email(email) == email:
        context["error"] = "Email already taken"
    elif len(password) < 8:
        context["error"] = "Password must be at least 8 characters"
    else:
        User(username, password, None, email, fname, lname).create()
        response.set_secure_cookie("username", username)
        response.redirect("/")
        return None
    render_page("signup.html", response, context)
예제 #3
0
def location_editor(response, id):
    # file_input = response.get_file('picture')
    # filename_hash = hashlib.sha1(file_input[2]).hexdigest()

    # file_output = open('./static/place-images/{}'.format(filename_hash), 'wb')
    # file_output.write(file_input[2])
    # file_output.close()

    context = {"error": None}
    location = Location.find_id(id)
    orig_name = location.name
    context["location"] = location
    if location is None:
        context["error"] = "Place does not exist"
        render_page("edit_location.html", response, context)
        return
    name = response.get_field("name")
    if orig_name != name:
        if Location.find_name(name):
            context["error"] = "Place already exists"
            render_page("edit_location.html", response, context)
            return None

    description = response.get_field("description")
    address = response.get_field("address")
    username = get_login(response)
    user = User.find(username)
    Location.change_location(id, name, description, location.picture, address, location.latitude, location.longitude)
    response.redirect("/location/" + id)
예제 #4
0
 def post_context(self):
     username = self.get_field('username')
     password = self.get_field('password')
     user = User.find(username)
     if user and username == user.username and password == user.password:
         self.set_secure_cookie('username', username)
         self.redirect('/')
     else:
         self.write('Incorrect username or password')
예제 #5
0
def render_page(filename, response, context):
    context["logged_in"] = get_login(response)
    if context["logged_in"]:
        user = User.find(context["logged_in"])
        context["user"] = user
    if "query" not in context:
        context["query"] = None
    if "tags" not in context:
        context["tags"] = None
    html = render(filename, context)
    response.write(html)
예제 #6
0
def login_authentication(response):
    username = response.get_field("username")
    password = response.get_field("password")
    user = User.find(username)
    context = {"login_error": None}
    if user and username == user.username and password == user.password:
        response.set_secure_cookie("username", username)
        response.redirect("/")
    else:
        context["login_error"] = "Incorrect username or password"
        render_page("login.html", response, context)
예제 #7
0
def location_handler(response, id):
    logged_in = get_login(response)
    context = {}
    user_object = User.find(get_login(response))
    location = Location.find_id(id)
    loc_tags = Tag.find_from_place(location.id)
    if logged_in:
        stars = location.get_user_rating(user_object.id)
        context["user_rating"] = stars
    if location:
        context["location"] = location
        context["loc_tags"] = loc_tags
        context["comments"] = Comment.find_place(location.id)
        render_page("location.html", response, context)
    else:
        error_handler(response)
예제 #8
0
def location_creator(response):
    file_input = response.get_file("picture")
    filename_hash = hashlib.sha1(file_input[2]).hexdigest()

    file_output = open("./static/place-images/{}".format(filename_hash), "wb")
    file_output.write(file_input[2])
    file_output.close()

    context = {"error": None}

    name = response.get_field("name")
    description = response.get_field("description")
    address = response.get_field("address")
    username = get_login(response)
    user = User.find(username)

    try:
        lat = float(response.get_field("lat"))
        long = float(response.get_field("long"))
    except ValueError:
        context["error"] = "Invalid latitude or longitude"
        render_page("create_location.html", response, context)
        return
    if Location.find_name(name):
        context["error"] = "Place already exists"
        render_page("create_location.html", response, context)
    else:
        Location(name, description, filename_hash, user.id, address, long, lat).create()
        response.redirect("/location/{}".format(Location.find_name(name).id))

        tags = response.get_field("tags").split(",")
        if tags == [""]:
            tags = []
        for tag in tags:
            Tag(tag, Location.find_name(name).id).create()
    return
예제 #9
0
def rating(response, location_id):
    if get_login(response):
        user_object = User.find(get_login(response))
        Rating(location_id, response.get_field("stars"), user_object.id).create()
예제 #10
0
def comment_post(response, location_id):
    user_object = User.find(get_login(response))
    comment = response.get_field("comment")
    Comment(user_object.id, comment, location_id).create()
    response.redirect("/location/" + location_id)