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
import base64
import hashlib
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.http import http_date
from werkzeug.middleware.proxy_fix import ProxyFix
from PiAnoS import caseExistsInDB
from utils.decorator import admin_required, login_required, submission_has_access
from utils.template import my_render_template
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
################################################################################
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() )
"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" ]
}
} )
################################################################################
if config.PROXY:
app.wsgi_app = ProxyFix( app.wsgi_app )
################################################################################
from views.base import base
app.register_blueprint( base, url_prefix = "/" )
app.register_blueprint( base, 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 )
################################################################################
# Headers
@app.after_request
def add_header( r ):
for c in [ "/cdn", "/static" ]:
if request.path.startswith( config.baseurl + c ):
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"
################################################################################
@app.route( config.baseurl + "/upload", methods = [ "POST" ] )
@login_required
def upload_file():
Main function dealing with the upload of files (tenprint, mark and consent forms).
This function accept traditionals images and NIST files for the fingerprint data,
and PDFs for the consent forms.
"""
app.logger.info( "Processing of the uploaded file" )
upload_type = request.form.get( "upload_type", None )
app.logger.debug( "Upload type: {}".format( upload_type ) )
file_extension = request.form.get( "extension", None )
if isinstance( file_extension, str ):
file_extension = file_extension.lower()
app.logger.debug( "File extension: {}".format( file_extension ) )
if upload_type == None:
"message": "Must specify a file type to upload a file"
if "file" not in request.files:
app.logger.error( "No file in the upload request" )
return jsonify( {
"error": True,
"message": "No file in the POST request"
} )
elif "submission_id" not in request.form:
app.logger.error( "No submission identification number" )
return jsonify( {
"error": True,
"message": "No submission_id"
} )
else:
try:
submission_uuid = request.form.get( "submission_id" )
sql = "SELECT id FROM submissions WHERE uuid = %s"
submission_id = config.db.query_fetchone( sql, ( submission_uuid, ) )[ "id" ]
app.logger.debug( "Submission UUID: {}".format( submission_uuid ) )
except:
Loading
Loading full blame...