mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2025-06-14 10:00:40 +00:00
Change the Subscription Logic for Socket.IO Data exchange
This commit is contained in:
@ -5,6 +5,19 @@ from flask_login import current_user
|
||||
from flask_socketio import join_room, leave_room
|
||||
|
||||
|
||||
@socketio.on('GET /users/<user_id>')
|
||||
@socketio_login_required
|
||||
def subscribe_user(user_hashid):
|
||||
user_id = hashids.decode(user_hashid)
|
||||
user = User.query.get(user_id)
|
||||
if user is None:
|
||||
return {'code': 404, 'msg': 'Not found'}
|
||||
if not (user == current_user or current_user.is_administrator):
|
||||
return {'code': 403, 'msg': 'Forbidden'}
|
||||
dict_user = user.to_dict(backrefs=True, relationships=True)
|
||||
return {'code': 200, 'msg': 'OK', 'payload': dict_user}
|
||||
|
||||
|
||||
@socketio.on('SUBSCRIBE /users/<user_id>')
|
||||
@socketio_login_required
|
||||
def subscribe_user(user_hashid):
|
||||
@ -14,9 +27,10 @@ def subscribe_user(user_hashid):
|
||||
return {'code': 404, 'msg': 'Not found'}
|
||||
if not (user == current_user or current_user.is_administrator):
|
||||
return {'code': 403, 'msg': 'Forbidden'}
|
||||
dict_user = user.to_dict(backrefs=True, relationships=True)
|
||||
# dict_user = user.to_dict(backrefs=True, relationships=True)
|
||||
join_room(f'/users/{user.hashid}')
|
||||
return {'code': 200, 'msg': 'OK', 'payload': dict_user}
|
||||
# return {'code': 200, 'msg': 'OK', 'payload': dict_user}
|
||||
return {'code': 200, 'msg': 'OK'}
|
||||
|
||||
|
||||
@socketio.on('UNSUBSCRIBE /users/<user_id>')
|
||||
|
@ -1,50 +1,17 @@
|
||||
from app.decorators import admin_required
|
||||
from app.models import User
|
||||
from flask import render_template, request, url_for
|
||||
from flask import render_template, request
|
||||
from flask_login import login_required
|
||||
from . import bp
|
||||
|
||||
|
||||
@bp.route('/')
|
||||
@login_required
|
||||
@admin_required
|
||||
def users():
|
||||
dict_users = [u.to_dict(backrefs=True, relationships=False) for u in User.query.all()]
|
||||
return render_template(
|
||||
'users/users.html.j2',
|
||||
title='Users'
|
||||
title='Users',
|
||||
dict_users=dict_users
|
||||
)
|
||||
|
||||
|
||||
@bp.route('/api_users')
|
||||
def api_users():
|
||||
query = User.query
|
||||
|
||||
# search filter
|
||||
search = request.args.get('search')
|
||||
if search:
|
||||
query = query.filter(User.username.like(f'%{search}%') | User.email.like(f'%{search}%'))
|
||||
total = query.count()
|
||||
|
||||
# sorting
|
||||
sort = request.args.get('sort')
|
||||
if sort:
|
||||
order = []
|
||||
for s in sort.split(','):
|
||||
direction = s[0]
|
||||
name = s[1:]
|
||||
if name not in ['username', 'email']:
|
||||
name = 'username'
|
||||
col = getattr(User, name)
|
||||
if direction == '-':
|
||||
col = col.desc()
|
||||
order.append(col)
|
||||
if order:
|
||||
query = query.order_by(*order)
|
||||
|
||||
# pagination
|
||||
offset = request.args.get('offset', type=int, default=-1)
|
||||
limit = request.args.get('limit', type=int, default=-1)
|
||||
if offset != -1 and limit != -1:
|
||||
query = query.offset(offset).limit(limit)
|
||||
|
||||
# response
|
||||
return {
|
||||
'data': [user.to_dict() for user in query],
|
||||
'total': total
|
||||
}
|
||||
|
Reference in New Issue
Block a user