From 477eea23f169fc2a6e26173e480f4e8b67682d0f Mon Sep 17 00:00:00 2001 From: Julian Rother <julianr@fsmpi.rwth-aachen.de> Date: Sat, 25 Feb 2017 14:45:59 +0100 Subject: [PATCH] Implement permission checking for livestreams --- server.py | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/server.py b/server.py index 111eece..a9a19bc 100644 --- a/server.py +++ b/server.py @@ -559,17 +559,28 @@ def auth(): # For use with nginx auth_request cookie = int(request.cookies['tracking']) else: cookie = random.getrandbits(8*8-1) - if url.endswith('jpg') or ismod() or url.startswith('pub/hls/'): + if url.endswith('jpg') or ismod(): return "OK", 200 - perms = query('''SELECT videos.path, videos.id AS vid, perm.* - FROM videos - JOIN lectures ON (videos.lecture_id = lectures.id) - JOIN courses ON (lectures.course_id = courses.id) - LEFT JOIN perm ON ((videos.id = perm.video_id OR lectures.id = perm.lecture_id OR courses.id = perm.course_id) AND NOT perm.deleted) - WHERE videos.path = ? - AND (courses.visible AND lectures.visible AND videos.visible) - ORDER BY perm.video_id DESC, perm.lecture_id DESC, perm.course_id DESC''', - url) + if url.startswith('pub/hls/'): + handle = url[len('pub/hls/'):].split('_')[0].split('.')[0] + perms = query('''SELECT perm.* + FROM streams + JOIN lectures ON (streams.lecture_id = lectures.id) + JOIN courses ON (lectures.course_id = courses.id) + LEFT JOIN perm ON ((lectures.id = perm.lecture_id OR courses.id = perm.course_id) AND NOT perm.deleted) + WHERE streams.handle = ? + AND (courses.visible AND lectures.visible AND streams.visible) + ORDER BY perm.video_id DESC, perm.lecture_id DESC, perm.course_id DESC''', handle) + else: + perms = query('''SELECT videos.path, videos.id AS vid, perm.* + FROM videos + JOIN lectures ON (videos.lecture_id = lectures.id) + JOIN courses ON (lectures.course_id = courses.id) + LEFT JOIN perm ON ((videos.id = perm.video_id OR lectures.id = perm.lecture_id OR courses.id = perm.course_id) AND NOT perm.deleted) + WHERE videos.path = ? + AND (courses.visible AND lectures.visible AND videos.visible) + ORDER BY perm.video_id DESC, perm.lecture_id DESC, perm.course_id DESC''', + url) if not perms: return "Not allowed", 403 auth = request.authorization @@ -579,7 +590,8 @@ def auth(): # For use with nginx auth_request password = auth.password if checkperm(perms, username=username, password=password): try: - modify('INSERT INTO log (id, `time`, `date`, video, source) VALUES (?, ?, ?, ?, 1)', cookie, datetime.now(), datetime.combine(date.today(), time()), perms[0]['vid']) + if not url.startswith('pub/hls/'): + modify('INSERT INTO log (id, `time`, `date`, video, source) VALUES (?, ?, ?, ?, 1)', cookie, datetime.now(), datetime.combine(date.today(), time()), perms[0]['vid']) except: pass r = make_response('OK', 200) -- GitLab