diff --git a/livestreams.py b/livestreams.py index d5f726e2abf0f61c3b0765f55dc0166fed8e7cb9..80d02eaaf3f392e1c7ecfafe7616961e1bc3fc85 100644 --- a/livestreams.py +++ b/livestreams.py @@ -7,3 +7,37 @@ def livestream_thumbnail(): for v in genlive(livestreams): sorter.schedule_thumbnail(v['lecture_id'], v['path']) +@app.route('/internal/streaming/legacy_auth', methods=['GET', 'POST']) +def streamauth(): + internal = False + for net in config.get('FSMPI_IP_RANGES', []): + if ip_address(request.headers['X-Real-IP']) in ip_network(net): + internal = True + if request.values['app'] != 'live': + return 'Bad request', 400 + if not internal: + return 'Forbidden', 403 + if request.values['pass'] != 'caisoh8aht0wuSu': + return 'Forbidden', 403 + if request.values['call'] == 'publish': + matches = query("SELECT lectures.* FROM lectures JOIN courses ON lectures.course_id = courses.id WHERE courses.handle = ? ORDER BY lectures.time DESC", request.values['name']) + now = datetime.now() + match = {'id': -1} + for lecture in matches: + if lecture['time']-timedelta(minutes=30) <= now and \ + now <= lecture['time']+timedelta(minutes=lecture['duration']): + match = lecture + break + if 'lecture' in request.values: + match = {'id': request.values['lecture']} + try: + modify("INSERT INTO streams (handle, active, visible, lecture_id, description, poster) VALUES (?, 0, 1, -1, "", "")", request.values['name']) + except: + pass + modify("UPDATE streams SET active = 1, lecture_id = ? WHERE handle = ?", match['id'], request.values['name']) + elif request.values['call'] == 'publish_done': + modify("UPDATE streams SET active = 0 WHERE handle = ?", request.values['name']) + else: + return 'Bad request', 400 + return 'OK', 200 +