aboutsummaryrefslogtreecommitdiffstats
path: root/server.py
diff options
context:
space:
mode:
Diffstat (limited to 'server.py')
-rw-r--r--server.py17
1 files changed, 11 insertions, 6 deletions
diff --git a/server.py b/server.py
index 04d2d58..6c39f21 100644
--- a/server.py
+++ b/server.py
@@ -21,8 +21,6 @@ import re
import sys
-
-
def youtu_be(env, start_response):
id = env['PATH_INFO'][1:]
env['PATH_INFO'] = '/watch'
@@ -32,6 +30,7 @@ def youtu_be(env, start_response):
env['QUERY_STRING'] += '&v=' + id
yield from yt_app(env, start_response)
+
def proxy_site(env, start_response, video=False):
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)',
@@ -79,12 +78,14 @@ def proxy_site(env, start_response, video=False):
cleanup_func(response)
+
def proxy_video(env, start_response):
yield from proxy_site(env, start_response, video=True)
+
site_handlers = {
- 'youtube.com':yt_app,
- 'youtu.be':youtu_be,
+ 'youtube.com': yt_app,
+ 'youtu.be': youtu_be,
'ytimg.com': proxy_site,
'yt3.ggpht.com': proxy_site,
'lh3.googleusercontent.com': proxy_site,
@@ -92,6 +93,7 @@ site_handlers = {
'googlevideo.com': proxy_video,
}
+
def split_url(url):
''' Split https://sub.example.com/foo/bar.html into ('sub.example.com', '/foo/bar.html')'''
# XXX: Is this regex safe from REDOS?
@@ -103,11 +105,11 @@ def split_url(url):
return match.group(1), match.group(2)
-
def error_code(code, start_response):
start_response(code, ())
return code.encode()
+
def site_dispatch(env, start_response):
client_address = env['REMOTE_ADDR']
try:
@@ -117,7 +119,7 @@ def site_dispatch(env, start_response):
method = env['REQUEST_METHOD']
path = env['PATH_INFO']
- if method=="POST" and client_address not in ('127.0.0.1', '::1'):
+ if method == "POST" and client_address not in ('127.0.0.1', '::1'):
yield error_code('403 Forbidden', start_response)
return
@@ -159,12 +161,15 @@ def site_dispatch(env, start_response):
class FilteredRequestLog:
'''Don't log noisy thumbnail and avatar requests'''
filter_re = re.compile(r'"GET /https://(i\.ytimg\.com/|www\.youtube\.com/data/subscription_thumbnails/|yt3\.ggpht\.com/|www\.youtube\.com/api/timedtext).*" 200')
+
def __init__(self):
pass
+
def write(self, s):
if not self.filter_re.search(s):
sys.stderr.write(s)
+
if __name__ == '__main__':
if settings.allow_foreign_addresses:
server = WSGIServer(('0.0.0.0', settings.port_number), site_dispatch,