Newer
Older
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from flask import Flask
from flask import render_template, send_from_directory
from flask import session
from flask import url_for
from flask_compress import Compress
################################################################################
debug = os.environ.get( "DEBUG", False )
baseurl = os.environ.get( "BASEURL", "" )
################################################################################
# Generic routing
def ping():
return "pong"
################################################################################
# App serving
@app.route( baseurl + '/app/<path>' )
def send_app_files( path ):
return send_from_directory( 'app', path )
################################################################################
# Sessions
@app.before_request
def renew_session():
session.permanent = True
app.permanent_session_lifetime = timedelta( seconds = config.session_timeout )
@app.route( baseurl + '/logout' )
def logout():
session.clear()
return redirect( url_for( 'home' ) )
@app.route( baseurl + '/login' )
def login():
return render_template(
"login.html",
baseurl = baseurl,
js = config.cdnjs,
css = config.cdncss
)
@app.route( baseurl + '/do_login', methods = [ 'POST' ] )
def do_login():
q = config.db.query( 'SELECT * FROM users WHERE username = %s', ( request.form.get( "username" ), ) )
user = q.fetchone()
if pbkdf2( request.form.get( "password" ), user[ 'password' ] ):
session[ 'logged' ] = True
session[ 'session_id' ] = str( uuid4() )
session[ 'username' ] = user[ 'username' ]
return redirect( url_for( 'home' ) )
else:
session.clear()
return redirect( url_for( 'home' ) )
################################################################################
# Home page
@app.route( baseurl + '/' )
def home():
if not 'session_id' in session:
return redirect( url_for( 'login' ) )
else:
return render_template(
"index.html",
baseurl = baseurl
)
################################################################################
# Main startup
if __name__ == '__main__':
app.run( debug = debug, host = "0.0.0.0", threaded = True )