mirror of
https://gitlab.ub.uni-bielefeld.de/sfb1288inf/nopaque.git
synced 2024-12-26 19:34:19 +00:00
46 lines
1.4 KiB
Python
46 lines
1.4 KiB
Python
|
from flask_login import current_user
|
||
|
from flask_socketio import join_room
|
||
|
from app import hashids, socketio
|
||
|
from app.decorators import socketio_login_required
|
||
|
from app.models import Corpus
|
||
|
|
||
|
|
||
|
@socketio.on('GET /corpora/<corpus_id>')
|
||
|
@socketio_login_required
|
||
|
def get_corpus(corpus_hashid):
|
||
|
corpus_id = hashids.decode(corpus_hashid)
|
||
|
corpus = Corpus.query.get(corpus_id)
|
||
|
if corpus is None:
|
||
|
return {'options': {'status': 404, 'statusText': 'Not found'}}
|
||
|
if not (
|
||
|
corpus.is_public
|
||
|
or corpus.user == current_user
|
||
|
or current_user.is_administrator()
|
||
|
):
|
||
|
return {'options': {'status': 403, 'statusText': 'Forbidden'}}
|
||
|
return {
|
||
|
'body': corpus.to_json_serializable(),
|
||
|
'options': {
|
||
|
'status': 200,
|
||
|
'statusText': 'OK',
|
||
|
'headers': {'Content-Type: application/json'}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
@socketio.on('SUBSCRIBE /corpora/<corpus_id>')
|
||
|
@socketio_login_required
|
||
|
def subscribe_corpus(corpus_hashid):
|
||
|
corpus_id = hashids.decode(corpus_hashid)
|
||
|
corpus = Corpus.query.get(corpus_id)
|
||
|
if corpus is None:
|
||
|
return {'options': {'status': 404, 'statusText': 'Not found'}}
|
||
|
if not (
|
||
|
corpus.is_public
|
||
|
or corpus.user == current_user
|
||
|
or current_user.is_administrator()
|
||
|
):
|
||
|
return {'options': {'status': 403, 'statusText': 'Forbidden'}}
|
||
|
join_room(f'/corpora/{corpus.hashid}')
|
||
|
return {'options': {'status': 200, 'statusText': 'OK'}}
|