#!/usr/bin/python # -*- coding: UTF-8 -*- from datetime import datetime from logging.config import dictConfig import logging from flask import Flask from flask import request, has_request_context from flask import session from flask import url_for from flask_compress import Compress from flask_session import Session from werkzeug import redirect from werkzeug.http import http_date from werkzeug.middleware.proxy_fix import ProxyFix import re from utils.decorator import login_required from utils.template import my_render_template import config ################################################################################ logrequestre = re.compile( "(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*\[[^\]]+\]\s(.*)" ) class RequestFormatter( logging.Formatter ): def format( self, record ): if has_request_context(): try: username = session[ "username" ] except: username = "-" record.msg = "{REMOTE_ADDR} (" + username + ") - " + record.msg record.msg = record.msg.format( **request.headers.environ ) m = logrequestre.match( record.msg ) if m: record.msg = m.group( 2 ) return super( RequestFormatter, self ).format( record ) class myFilter( object ): def filter( self, record ): if "{}/ping".format( config.baseurl ) in record.msg and " 200 " in record.msg: return 0 else: return 1 class myStreamHandler( logging.StreamHandler ): def __init__( self ): logging.StreamHandler.__init__( self ) self.addFilter( myFilter() ) dictConfig( { "version": 1, "formatters": { "default": { "()": "module.RequestFormatter", "format": "[%(asctime)s] %(levelname)s: \t%(message)s", } }, "handlers": { "console": { "class": "module.myStreamHandler", "formatter": "default" } }, "root": { "level": "INFO", "handlers": [ "console" ] } } ) ################################################################################ app = Flask( __name__ ) app.config.from_pyfile( "config.py" ) Compress( app ) Session( app ) if config.PROXY: app.wsgi_app = ProxyFix( app.wsgi_app ) ################################################################################ # Import the views from views.base import base app.register_blueprint( base, url_prefix = config.baseurl ) from views.adm import adm app.register_blueprint( adm, url_prefix = "/" ) app.register_blueprint( adm, url_prefix = config.baseurl ) from views.files import files app.register_blueprint( files, url_prefix = config.baseurl ) from views.login import login_view app.register_blueprint( login_view, url_prefix = config.baseurl ) from views.newuser import newuser_view app.register_blueprint( newuser_view, url_prefix = config.baseurl ) from views.donor import donor_view app.register_blueprint( donor_view, url_prefix = config.baseurl ) from views.submission import submission_view app.register_blueprint( submission_view, url_prefix = config.baseurl ) from views.tp_template import tp_template_view app.register_blueprint( tp_template_view, url_prefix = config.baseurl ) from views.images import image_view app.register_blueprint( image_view, url_prefix = config.baseurl ) from views.pianos import pianos_view app.register_blueprint( pianos_view, url_prefix = config.baseurl ) ################################################################################ # Headers @app.after_request def add_header( r ): for c in [ "/cdn", "/static" ]: if request.path.startswith( config.baseurl + c ): break else: r.headers[ "Last-Modified" ] = http_date( datetime.now() ) r.headers[ "Cache-Control" ] = "no-cache, no-store, must-revalidate, max-age=0, s-maxage=0" r.headers[ "Pragma" ] = "no-cache" r.headers[ "Expires" ] = "0" return r