From 92732788dec540765cb588603b562fff9cfd0a9c Mon Sep 17 00:00:00 2001 From: Julian Rother <julianr@fsmpi.rwth-aachen.de> Date: Mon, 23 Jul 2018 12:14:20 +0200 Subject: [PATCH] Allow playback by vpn hosts and differentiate between public and vpn ips --- config.py.example | 1 + db_schema.sql | 1 + livestreams.py | 11 +++++++---- templates/streaming.html | 2 +- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/config.py.example b/config.py.example index f2fbb81..bbbed17 100644 --- a/config.py.example +++ b/config.py.example @@ -30,6 +30,7 @@ LDAP_GROUPS = ['fachschaft'] ERROR_PAGE = 'static/500.html' RWTH_IP_RANGES = ['134.130.0.0/16', '137.226.0.0/16', '134.61.0.0/16', '192.35.229.0/24', '2a00:8a60::/32'] FSMPI_IP_RANGES = ['137.226.35.192/29', '137.226.75.0/27', '137.226.127.32/27', '137.226.231.192/26', '134.130.102.0/26', '127.0.0.1/32'] +INTERNAL_IP_RANGES = ['127.0.0.0/8', '192.168.155.0/24', 'fd78:4d90:6fe4::/48'] DISABLE_SCHEDULER = False #MAIL_SERVER = 'mail.fsmpi.rwth-aachen.de' MAIL_FROM = 'Video AG-Website <videoag-it@lists.fsmpi.rwth-aachen.de>' diff --git a/db_schema.sql b/db_schema.sql index 67e2787..0feb9ca 100644 --- a/db_schema.sql +++ b/db_schema.sql @@ -187,6 +187,7 @@ CREATE TABLE IF NOT EXISTS `live_sources` ( `description` text NOT NULL DEFAULT '', `options` text NOT NULL DEFAULT '', `server` varchar(32), + `server_public` varchar(32), `clientid` INTEGER, `last_active` datetime, `time_created` datetime NOT NULL, diff --git a/livestreams.py b/livestreams.py index 1146185..52b8f0c 100644 --- a/livestreams.py +++ b/livestreams.py @@ -125,7 +125,7 @@ def streamauth(server): sources = query('SELECT * FROM live_sources WHERE NOT deleted AND `key` = ?', request.values['name']) if not sources: return 'Not found', 404 - modify('UPDATE live_sources SET server = ?, clientid = ?, last_active = ?, preview_key = ? WHERE id = ?', server, request.values['clientid'], datetime.now(), gentoken(), sources[0]['id']) + modify('UPDATE live_sources SET server = ?, server_public = ?, clientid = ?, last_active = ?, preview_key = ? WHERE id = ?', server, request.args.get('public_ip', server), request.values['clientid'], datetime.now(), gentoken(), sources[0]['id']) ret = Response('Redirect', 301, {'Location': '%i'%sources[0]['id']}) ret.autocorrect_location_header = False return ret @@ -133,9 +133,12 @@ def streamauth(server): source = (query('SELECT * FROM live_sources WHERE NOT deleted AND id = ?', request.values['name']) or [None])[0] if not source: return 'Not found', 404 - if source['preview_key'] != request.values.get('preview_key'): - return 'Forbidden', 403 - return 'Ok', 200 + for net in config.get('INTERNAL_IP_RANGES', []): + if ip_address(request.values['addr']) in ip_network(net): + return 'Ok', 200 + if source['preview_key'] == request.values.get('preview_key'): + return 'Ok', 200 + return 'Forbidden', 403 elif request.values['call'] == 'publish_done': modify('UPDATE live_sources SET server = NULL, clientid = NULL, preview_key = NULL WHERE server = ? AND clientid = ?', server, request.values['clientid']) return 'Ok', 200 diff --git a/templates/streaming.html b/templates/streaming.html index 6a385d0..647f92f 100644 --- a/templates/streaming.html +++ b/templates/streaming.html @@ -32,7 +32,7 @@ </ul> <ul class="list-unstyled col-sm-3 col-xs-12"> {% if source.clientid %} - <li><a href="rtmp://{{ source.server }}/src/{{ source.id }}?preview_key={{ source.preview_key }}">rtmp://{{ source.server }}/src/{{ source.id }}</a></li> + <li><a href="rtmp://{{ source.server_public }}/src/{{ source.id }}?preview_key={{ source.preview_key }}">rtmp://{{ source.server_public }}/src/{{ source.id }}</a></li> {% if source.stat and source.video and source.audio %} <li>Quelladresse: {{ source.stat.address }}</li> <li>Framedrops: {{ source.stat.dropped }}</li> -- GitLab