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 + diff --git a/server.py b/server.py index 3bea935fbd33af301a4ad91ab07364f491925586..92f5b840332157d46679d8949bafb550bef0667c 100644 --- a/server.py +++ b/server.py @@ -379,7 +379,7 @@ def index(): item['courses'] = query('SELECT * FROM courses WHERE (visible AND listed) AND `%s` = ? ORDER BY `%s`'%(item['param'], item['param']), item['param2']) elif item['type'] == 'video': item['lecture'] = {'id': item['param']} - livestreams = query('''SELECT streams.handle AS livehandle, streams.lecture_id, "formats" AS sep, formats.* + streams = query('''SELECT streams.handle AS livehandle, streams.lecture_id, "formats" AS sep, formats.* FROM streams JOIN lectures ON lectures.id = streams.lecture_id JOIN formats ON formats.keywords = "hls" @@ -391,7 +391,7 @@ def index(): JOIN formats ON (videos.video_format = formats.id) WHERE videos.lecture_id = ? AND videos.visible ORDER BY formats.prio DESC - ''', item['param'])+genlive(livestreams) + ''', item['param'])+genlive(streams) return render_template('index.html', latestvideos=livestreams+latestvideos, upcomming=upcomming, featured=featured) @app.route('/courses') diff --git a/templates/macros.html b/templates/macros.html index 060b061c678d8c23ed1d423fda214caf30c657d4..4431f9a6c448a54b0334c801d42f97b3659acb33 100644 --- a/templates/macros.html +++ b/templates/macros.html @@ -404,7 +404,7 @@ $('#embedcodebtn').popover( {% endfor %} </ul> </div></li> - <li>{{ moderator_editor(('featured',item.id,'param2'), item.param2) }}</li> + <li>{{ moderator_editor(('featured',item.id,'param2'), item.param2, reload=True) }}</li> </ul> {% endif %} Die vollständige Liste findest du <a href="{{ url_for('courses') }}">hier</a>. @@ -416,7 +416,7 @@ $('#embedcodebtn').popover( {{ player(item.lecture, item.videos, autoplay=False)}} {% endif %} {% if ismod() %} - <div>ID des Videos: {{ moderator_editor(('featured',item.id,'param'), item.param) }}</div> + <div>ID des Videos: {{ moderator_editor(('featured',item.id,'param'), item.param, reload=True) }}</div> {% endif %} <div>{{ moderator_editor(('featured',item.id,'param2'), item.param2) }}</div> </div>