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>"""
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)
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)
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)
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)
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)
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()]
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
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()]
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)