Ejemplo n.º 1
0
def get_navbar(environ):
    current_user = users.user_from_cookie(db, environ)
    navbar_1 = """<div class="collapse navbar-collapse">
                <ul class="nav navbar-nav">
            <li><a href="/">Home</a></li><li><a href="/about.html">About</a></li>"""
    if current_user == None:
        my_images = """ """
        form = """<form id='loginform' class="navbar-form navbar-right" role="login" method='post' action='/login'>
                <div class="form-group">
                  <input type="text" name='email' class="form-control" placeholder="Email">
                </div>
                <div class="form-group">
                  <input type="password" name='password' class="form-control" placeholder="Password">
                </div>                
                <input type="submit" class="btn btn-default" value='Login' >
        </form>"""
    # if user is logged in, logged in user is shown, my image link and logout button
    else:
        my_images = """<li><a href="/my">My Images</a></li>"""
        form = (
            """<form id='logoutform' class="navbar-form navbar-right pull-right" role="logout" method='post' action='/logout'>
            <input type="submit" class="btn btn-default" name='logout' value='Logout' >
        </form>
     
        <div class='navbar-text pull-right'>Logged in as """
            + current_user
            + """</div>"""
        )
    navbar_2 = """</ul>"""
    return navbar_1 + my_images + navbar_2 + form + """</div>"""
Ejemplo n.º 2
0
def my(environ, start_response):
    current_user = users.user_from_cookie(db, environ)
    if current_user != None:
        content = "<p>Hello World!</p>"
        mapping = {"title": "Welcome to FlowTow", "content": my_content(environ), "navbar": get_navbar(environ)}
        start_response("200 OK", [("content-type", "text/html")])
        return render("index.html", mapping)
    else:
        return index(environ, start_response)
Ejemplo n.º 3
0
def render_page(environ, template_name, page_title, template_mapping=()):
    logged_user = user_from_cookie(db, environ)
    if logged_user:
        template_mapping['useremail'] = logged_user
        template_mapping['account_area'] = render_plain('includes/account_details.html', template_mapping)
    else:
        template_mapping['login_error'] = ''
        if 'QUERY_STRING' in environ and environ['QUERY_STRING'].startswith('login_failed'):
            template_mapping['login_error'] = 'Login Failed, please try again'
        template_mapping['account_area'] = render_plain('includes/login_form.html', template_mapping)
    return render_template(template_name, template_mapping, page_title)
Ejemplo n.º 4
0
def action_upload(environ):
    form = cgi.FieldStorage(environ=environ, fp=environ['wsgi.input'])
    logged_user = user_from_cookie(db, environ)
    if logged_user and 'image' in form and form['image'].filename != '':
        file_data = form['image'].file.read()
        filename = form['image'].filename
        # write the content of the uploaded file to a local file
        target = os.path.join('static/images', filename)
        f = open(target, 'wb')
        f.write(file_data)
        f.close()
        add_image(db, filename, logged_user)
Ejemplo n.º 5
0
def flowtow_app(environ, start_response):
    headers = [('content-type', 'text/html')]

    # about page
    if environ['PATH_INFO'] == '/about':
        start_response("200 OK", headers)
        return page_about(environ)
    # action comment
    elif environ['PATH_INFO'] == '/comment':
        action_comment(environ)
        headers.append(('location', '/'))
        start_response("303 See Other", headers)
        return page_index(environ)
    # action upload
    elif environ['PATH_INFO'] == '/upload':
        action_upload(environ)
        start_response("200 OK", headers)
        return page_my_images(environ, start_response)
    # action login
    elif environ['PATH_INFO'] == '/login':
        form = cgi.FieldStorage(environ=environ, fp=environ['wsgi.input'])
        if 'email' in form and 'password' in form:
            useremail = form.getvalue('email')
            can_login = check_login(db, useremail, form.getvalue('password'))
            if can_login:
                cookie = generate_session(db, useremail)
                headers.append(('Set-Cookie', cookie[COOKIE_NAME].OutputString()))
                headers.append(('location', '/'))
                start_response("303 See Other", headers)
                return page_index(environ)
        headers.append(('location', '/?login_failed'))
        start_response("303 See Other", headers)
        return page_index(environ)
    # action logout
    elif environ['PATH_INFO'] == '/logout':
        logged_user = user_from_cookie(db, environ)
        if logged_user:
            delete_session(db, logged_user)
        headers.append(('location', '/'))
        start_response("303 See Other", headers)
        return page_index(environ)
    # my images
    elif environ['PATH_INFO'] == '/my_images':
        start_response("200 OK", headers)
        return page_my_images(environ, start_response)
    # index page
    elif environ['PATH_INFO'] == '/':
        start_response("200 OK", headers)
        return page_index(environ)
    # 404
    else:
        return page_404(start_response)
Ejemplo n.º 6
0
    def test_user_from_cookie(self):
        """The user_from_cookie procedure finds the name of the logged in
        user from the session cookie if present

        Test relies on working generate_cookie
        """

        # first test with no cookie
        environ = dict()
        email_from_cookie = users.user_from_cookie(self.db, environ)
        self.assertEqual(
            email_from_cookie, None, "Expected None in case with no cookie, got %s" % str(email_from_cookie)
        )

        cookie = SimpleCookie()
        cookie[users.COOKIE_NAME] = "fake sessionid"
        environ = {"HTTP_COOKIE": cookie[users.COOKIE_NAME].OutputString()}

        email_from_cookie = users.user_from_cookie(self.db, environ)

        self.assertEqual(
            email_from_cookie, None, "Expected None in case with invalid session id, got %s" % str(email_from_cookie)
        )

        # run tests for all test users
        for email, password, nick, avatar in self.users:

            cookie = users.generate_session(self.db, email)

            self.assertIsInstance(cookie, SimpleCookie, "generate_session failing, can't run user_from_cookie tests")

            environ = {"HTTP_COOKIE": cookie[users.COOKIE_NAME].OutputString()}

            email_from_cookie = users.user_from_cookie(self.db, environ)

            self.assertEqual(email_from_cookie, email)
Ejemplo n.º 7
0
def logout(environ, start_response):
    #     success = False
    current_user = users.user_from_cookie(db, environ)
    headers = [("content-type", "text/html")]
    #     formdata = cgi.FieldStorage(environ=environ, fp=environ['wsgi.input'])
    #     if 'password' in formdata:
    #         email = formdata.getvalue("email","")
    #         password = formdata.getvalue("password","")
    #         success = users.check_login(db, email, password)
    #     if success:
    #         cookie = users.generate_session(db, email)
    #         headers.append(('Set-Cookie', cookie['sessionid'].OutputString()))
    #         headers.append(("Location", "/"))
    users.delete_session(db, current_user)
    start_response("303 See Other", headers)
    return [redirect_page.encode()]
Ejemplo n.º 8
0
def my_content(environ):
    # gets current logged in user
    current_user = users.user_from_cookie(db, environ)
    image_list = interface.list_images_for_user(db, current_user)
    result = []
    for index in range(len(image_list)):
        comments = interface.list_comments(db, image_list[index][0])
        new_row = image_list[index] + (comments,)
        result.append(new_row)
    image_list = result
    # html form for image upload
    item = (
        """<div class="well uploadform">
    <form id="uploadform" method="post" action="/upload" enctype="multipart/form-data">
    <fieldset class="form-group">
      <legend>Upload New Image</legend>
       <input class="form-control" type="file" name="file">
       <input type="hidden" name="user" value="""
        + current_user
        + """>
       <br><div class="text-center"><input class="btn btn-primary" type="submit" value="Upload File"></div>
      </fieldset>
    </form>  
    </div> 
    """
    )
    # constructs html for each image div
    for index in range(len(image_list)):
        comments = "<ul>"
        item += '<div class="flowtow">'
        item += '<span class="date"> ' + image_list[index][1] + "</span>"
        item += '<span class="name"> ' + image_list[index][2] + "</span>"
        item += '<img src="/static/images/' + image_list[index][0] + '">'
        for comment in range(len(image_list[index][3])):
            comments = comments + "<li>" + image_list[index][3][comment] + "</li>"
        item += '<div class="comments">' + comments + "</ul></div>"
        # creates a form for commenting
        item += (
            """<form method="post" action="/add_comment"> 
                        <input type="hidden" name="image" value="""
            + image_list[index][0]
            + """>
                        <input type="text" class="form-control" name="comment" id="comment" placeholder="Enter your comment here"><br>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        </form></div>"""
        )
    return item
Ejemplo n.º 9
0
def upload(environ, start_response):
    current_user = users.user_from_cookie(db, environ)
    formdata = cgi.FieldStorage(environ=environ, fp=environ["wsgi.input"])
    if "file" in formdata and formdata["file"].filename != "":
        file_data = formdata["file"].file.read()
        filename = formdata["file"].filename
        # write the content of the uploaded file to the static image directory
        target = os.path.join("static/images", filename)
        f = open(target, "wb")
        f.write(file_data)
        f.close()
        interface.add_image(db, filename, current_user)
    start_response("301 Redirect", [("content-type", "text/html")])
    # refresh my_page
    redirect_my_page = """<html><head><meta http-equiv="refresh" content="0; url=/my" />
                </head></html>"""
    return [redirect_my_page.encode()]
Ejemplo n.º 10
0
def page_my_images(environ, start_response):
    logged_user = user_from_cookie(db, environ)
    if logged_user:
        template_mapping = dict(image_list_for_user=render_image_list(list_images_for_user(db, logged_user)))
        return render_page(environ, 'my_images.html', 'Flowtow - My Images', template_mapping)
    return page_404(start_response)