Newer
Older
#!/usr/bin/python
# -*- coding: UTF-8 -*-
from cStringIO import StringIO
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from logging.config import dictConfig
from threading import Thread
import functools
from flask import render_template, send_from_directory
from flask import request, has_request_context
from flask import send_file
from flask import session
from flask import url_for
from flask_compress import Compress
from werkzeug import abort, redirect
from werkzeug.middleware.proxy_fix import ProxyFix
import pytz
import time
from PiAnoS import caseExistsInDB
import utils
from functions import redis_cache
from functions import dek_generate, do_encrypt_dek, do_decrypt_dek, dek_check
from functions import do_encrypt_user_session, do_decrypt_user_session
from functions import no_preview_image
################################################################################
from version import __version__, __branch__, __commit__, __commiturl__, __treeurl__
################################################################################

Marco De Donno
committed
Image.MAX_IMAGE_PIXELS = 1 * 1024 * 1024 * 1024
################################################################################
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 )
return super( RequestFormatter, self ).format( record )
dictConfig( {
'version': 1,
'formatters': {
'default': {
'()': 'module.RequestFormatter',
'format': '[%(asctime)s] %(levelname)s: \t%(message)s',
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default'
}
},
'root': {
'level': 'INFO',
'handlers': [ 'console' ]
}
} )
################################################################################
if config.PROXY:
app.wsgi_app = ProxyFix( app.wsgi_app )
baseurl = os.environ.get( "BASEURL", "" )
envtype = os.environ.get( "ENVTYPE", "" )
################################################################################
gnupg._parsers.Verify.TRUST_LEVELS[ "ENCRYPTION_COMPLIANCE_MODE" ] = 23
################################################################################

Marco De Donno
committed
# Decorators

Marco De Donno
committed
def session_field_required( field, value ):
def decorator( func ):
@functools.wraps( func )
def wrapper_login_required( *args, **kwargs ):
if not field in session:
return redirect( url_for( "login" ) )
elif not session.get( field ) == value:
return redirect( url_for( "login" ) )
return func( *args, **kwargs )
return wrapper_login_required
return decorator
def login_required( func ):
@functools.wraps( func )
def wrapper_login_required( *args, **kwargs ):
return redirect( url_for( "login" ) )
return func( *args, **kwargs )
return wrapper_login_required
def referer_required( func ):
@functools.wraps( func )
def wrapper_login_required( *args, **kwargs ):
if not request.headers.get( "Referer", False ):
return "referrer needed", 404
return func( *args, **kwargs )
return wrapper_login_required
def admin_required( func ):
@functools.wraps( func )
def wrapper_login_required( *args, **kwargs ):
if not session.get( "logged", False ) or not session.get( "account_type_name", None ) == "Administrator":
return redirect( url_for( "login" ) )
return func( *args, **kwargs )
return wrapper_login_required
@redis_cache( 15 * 60 )
def check_correct_submitter( submission_id, submitter_id ):
sql = """
SELECT count( * )
FROM submissions
WHERE uuid = %s AND submitter_id = %s
"""
check = config.db.query_fetchone( sql, ( submission_id, submitter_id, ) )[ "count" ]
return check == 1
def submission_has_access( func ):
@functools.wraps( func )
def wrapper_login_required( *args, **kwargs ):
submission_id = request.view_args.get( "submission_id", None )
user_id = session.get( "user_id" )
if not session.get( "logged", False ) or not session.get( "account_type_name", None ) == "Submitter":
return redirect( url_for( "login" ) )
elif submission_id != None and not check_correct_submitter( submission_id, user_id ):
return abort( 403 )
else:
return func( *args, **kwargs )
return wrapper_login_required
################################################################################
# Overloads
def my_render_template( *args, **kwargs ):
kwargs[ "baseurl" ] = baseurl
kwargs[ "envtype" ] = envtype
kwargs[ "js" ] = config.cdnjs
kwargs[ "css" ] = config.cdncss
kwargs[ "session_timeout" ] = config.session_timeout
kwargs[ "session_security_key" ] = session.get( "session_security_key" )
Loading
Loading full blame...