mirror of
				https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
				synced 2025-11-03 20:02:47 +00:00 
			
		
		
		
	Replace the default function decorators with new socketio specific ones
This commit is contained in:
		@@ -1,9 +1,10 @@
 | 
				
			|||||||
from app import db, logger, socketio
 | 
					from app import db, logger, socketio
 | 
				
			||||||
 | 
					from app.decorators import socketio_login_required
 | 
				
			||||||
from app.events import connected_sessions
 | 
					from app.events import connected_sessions
 | 
				
			||||||
from app.models import Corpus, User
 | 
					from app.models import Corpus, User
 | 
				
			||||||
from .cqi import CQiClient
 | 
					from .cqi import CQiClient
 | 
				
			||||||
from flask import current_app, request
 | 
					from flask import current_app, request
 | 
				
			||||||
from flask_login import current_user, login_required
 | 
					from flask_login import current_user
 | 
				
			||||||
import math
 | 
					import math
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,13 +24,13 @@ corpus_analysis_clients_status = {}
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('send_analysis_status_cli')
 | 
					@socketio.on('send_analysis_status_cli')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
def update_status(response):
 | 
					def update_status(response):
 | 
				
			||||||
    update_analysis_status(response['status'])
 | 
					    update_analysis_status(response['status'])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('corpus_analysis_init')
 | 
					@socketio.on('corpus_analysis_init')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
def init_corpus_analysis(corpus_id):
 | 
					def init_corpus_analysis(corpus_id):
 | 
				
			||||||
    logger.warning('Initiating corpus analysis.')
 | 
					    logger.warning('Initiating corpus analysis.')
 | 
				
			||||||
    socketio.start_background_task(corpus_analysis_session_handler,
 | 
					    socketio.start_background_task(corpus_analysis_session_handler,
 | 
				
			||||||
@@ -39,7 +40,7 @@ def init_corpus_analysis(corpus_id):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('corpus_analysis_query')
 | 
					@socketio.on('corpus_analysis_query')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
def corpus_analysis_query(query):
 | 
					def corpus_analysis_query(query):
 | 
				
			||||||
    update_analysis_status('running')
 | 
					    update_analysis_status('running')
 | 
				
			||||||
    logger.warning('Recieved a query.')
 | 
					    logger.warning('Recieved a query.')
 | 
				
			||||||
@@ -113,7 +114,7 @@ def get_analysis_status():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('inspect_match')
 | 
					@socketio.on('inspect_match')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
def inspect_match(message):
 | 
					def inspect_match(message):
 | 
				
			||||||
    client = corpus_analysis_clients.get(request.sid)
 | 
					    client = corpus_analysis_clients.get(request.sid)
 | 
				
			||||||
    if client is None:
 | 
					    if client is None:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,19 +1,34 @@
 | 
				
			|||||||
from functools import wraps
 | 
					from functools import wraps
 | 
				
			||||||
from flask import abort
 | 
					from flask import abort
 | 
				
			||||||
from flask_login import current_user
 | 
					from flask_login import current_user
 | 
				
			||||||
 | 
					from flask_socketio import disconnect
 | 
				
			||||||
from .models import Permission
 | 
					from .models import Permission
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def permission_required(permission):
 | 
					 | 
				
			||||||
    def decorator(f):
 | 
					 | 
				
			||||||
        @wraps(f)
 | 
					 | 
				
			||||||
        def decorated_function(*args, **kwargs):
 | 
					 | 
				
			||||||
            if not current_user.can(permission):
 | 
					 | 
				
			||||||
                abort(403)
 | 
					 | 
				
			||||||
            return f(*args, **kwargs)
 | 
					 | 
				
			||||||
        return decorated_function
 | 
					 | 
				
			||||||
    return decorator
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def admin_required(f):
 | 
					def admin_required(f):
 | 
				
			||||||
    return permission_required(Permission.ADMIN)(f)
 | 
					    @wraps(f)
 | 
				
			||||||
 | 
					    def wrapped(*args, **kwargs):
 | 
				
			||||||
 | 
					        if not current_user.can(Permission.ADMIN):
 | 
				
			||||||
 | 
					            abort(403)
 | 
				
			||||||
 | 
					        return f(*args, **kwargs)
 | 
				
			||||||
 | 
					    return wrapped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def socketio_login_required(f):
 | 
				
			||||||
 | 
					    @wraps(f)
 | 
				
			||||||
 | 
					    def wrapped(*args, **kwargs):
 | 
				
			||||||
 | 
					        if not current_user.is_authenticated:
 | 
				
			||||||
 | 
					            disconnect()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return f(*args, **kwargs)
 | 
				
			||||||
 | 
					    return wrapped
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def socketio_admin_required(f):
 | 
				
			||||||
 | 
					    @wraps(f)
 | 
				
			||||||
 | 
					    def wrapped(*args, **kwargs):
 | 
				
			||||||
 | 
					        if not current_user.can(Permission.ADMIN):
 | 
				
			||||||
 | 
					            disconnect()
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            return f(*args, **kwargs)
 | 
				
			||||||
 | 
					    return wrapped
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,7 @@
 | 
				
			|||||||
from flask import current_app, request
 | 
					from flask import current_app, request
 | 
				
			||||||
from flask_login import current_user, login_required
 | 
					from flask_login import current_user
 | 
				
			||||||
from . import socketio
 | 
					from . import socketio
 | 
				
			||||||
from .decorators import admin_required
 | 
					from .decorators import socketio_admin_required, socketio_login_required
 | 
				
			||||||
from .models import User
 | 
					from .models import User
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
import jsonpatch
 | 
					import jsonpatch
 | 
				
			||||||
@@ -16,7 +16,6 @@ connected_sessions = []
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('connect')
 | 
					@socketio.on('connect')
 | 
				
			||||||
@login_required
 | 
					 | 
				
			||||||
def connect():
 | 
					def connect():
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    ' The Socket.IO module creates a session id (sid) for each request.
 | 
					    ' The Socket.IO module creates a session id (sid) for each request.
 | 
				
			||||||
@@ -26,7 +25,6 @@ def connect():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('disconnect')
 | 
					@socketio.on('disconnect')
 | 
				
			||||||
@login_required
 | 
					 | 
				
			||||||
def disconnect():
 | 
					def disconnect():
 | 
				
			||||||
    '''
 | 
					    '''
 | 
				
			||||||
    ' On disconnect the session id gets removed from the connected sessions
 | 
					    ' On disconnect the session id gets removed from the connected sessions
 | 
				
			||||||
@@ -36,7 +34,7 @@ def disconnect():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('user_ressources_init')
 | 
					@socketio.on('user_ressources_init')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
def subscribe_user_ressources():
 | 
					def subscribe_user_ressources():
 | 
				
			||||||
    socketio.start_background_task(user_ressource_session_handler,
 | 
					    socketio.start_background_task(user_ressource_session_handler,
 | 
				
			||||||
                                   current_app._get_current_object(),
 | 
					                                   current_app._get_current_object(),
 | 
				
			||||||
@@ -44,8 +42,8 @@ def subscribe_user_ressources():
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@socketio.on('foreign_user_ressources_init')
 | 
					@socketio.on('foreign_user_ressources_init')
 | 
				
			||||||
@login_required
 | 
					@socketio_login_required
 | 
				
			||||||
@admin_required
 | 
					@socketio_admin_required
 | 
				
			||||||
def subscribe_foreign_user_ressources(user_id):
 | 
					def subscribe_foreign_user_ressources(user_id):
 | 
				
			||||||
    socketio.start_background_task(user_ressource_session_handler,
 | 
					    socketio.start_background_task(user_ressource_session_handler,
 | 
				
			||||||
                                   current_app._get_current_object(),
 | 
					                                   current_app._get_current_object(),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user