From e33f186b002ede23072052ac723698f7f1361db3 Mon Sep 17 00:00:00 2001 From: Thibault Coupin Date: Thu, 27 Dec 2018 10:32:17 +0100 Subject: [PATCH 1/4] Travis build tcoupin/picamera image --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8194e2e..63e51aa 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,8 +1,6 @@ sudo: required services: - docker -env: - - DOCKER_IMAGE=pschmitt/picamera script: - docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD" - docker run --rm --privileged multiarch/qemu-user-static:register --reset From 1a53be57ea1242b2b906e0b7edf23ebf17cda7d7 Mon Sep 17 00:00:00 2001 From: Thibault Coupin Date: Sun, 30 Dec 2018 14:10:48 +0100 Subject: [PATCH 2/4] add PATH_PREFIX env var --- web_streaming.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/web_streaming.py b/web_streaming.py index f13c66a..0035f22 100644 --- a/web_streaming.py +++ b/web_streaming.py @@ -11,16 +11,19 @@ # Parameters AUTH_USERNAME = os.environ.get('AUTH_USERNAME', 'pi') AUTH_PASSWORD = os.environ.get('AUTH_PASSWORD', 'picamera') -AUTH_BASE64 = base64.b64encode('{}:{}'.format( - AUTH_USERNAME, AUTH_PASSWORD).encode('utf-8')) -BASIC_AUTH = 'Basic {}'.format(AUTH_BASE64.decode('utf-8')) RESOLUTION = os.environ.get('RESOLUTION', '800x600').split('x') -RESOLUTION_X = int(RESOLUTION[0]) -RESOLUTION_Y = int(RESOLUTION[1]) FRAMERATE = int(os.environ.get('FRAMERATE', '24')) ROTATION = int(os.environ.get('ROTATE', 0)) HFLIP = os.environ.get('HFLIP', 'false').lower() == 'true' VFLIP = os.environ.get('VFLIP', 'false').lower() == 'true' +PATH_PREFIX = os.environ.get('PATH_PREFIX','') + +AUTH_BASE64 = base64.b64encode('{}:{}'.format( + AUTH_USERNAME, AUTH_PASSWORD).encode('utf-8')) +BASIC_AUTH = 'Basic {}'.format(AUTH_BASE64.decode('utf-8')) +RESOLUTION_X = int(RESOLUTION[0]) +RESOLUTION_Y = int(RESOLUTION[1]) + PAGE = """\ @@ -71,18 +74,18 @@ def do_AUTHHEAD(self): self.end_headers() def authorized_get(self): - if self.path == '/': + if self.path == PATH_PREFIX + '/': self.send_response(301) - self.send_header('Location', '/index.html') + self.send_header('Location', PATH_PREFIX + '/index.html') self.end_headers() - elif self.path == '/index.html': + elif self.path == PATH_PREFIX + '/index.html': content = PAGE.encode('utf-8') self.send_response(200) self.send_header('Content-Type', 'text/html') self.send_header('Content-Length', len(content)) self.end_headers() self.wfile.write(content) - elif self.path == '/stream.mjpg': + elif self.path == PATH_PREFIX + '/stream.mjpg': self.send_response(200) self.send_header('Age', 0) self.send_header('Cache-Control', 'no-cache, private') From 846970e1aae90cff9b3a4f7b0a34567694b1b9a4 Mon Sep 17 00:00:00 2001 From: Thibault Coupin Date: Sun, 30 Dec 2018 14:13:13 +0100 Subject: [PATCH 3/4] add NO_AUTH env var --- web_streaming.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/web_streaming.py b/web_streaming.py index 0035f22..f5c4c48 100644 --- a/web_streaming.py +++ b/web_streaming.py @@ -9,6 +9,7 @@ # Parameters +NO_AUTH = os.environ.get('NO_AUTH', 'false').lower() == 'true' AUTH_USERNAME = os.environ.get('AUTH_USERNAME', 'pi') AUTH_PASSWORD = os.environ.get('AUTH_PASSWORD', 'picamera') RESOLUTION = os.environ.get('RESOLUTION', '800x600').split('x') @@ -58,7 +59,9 @@ def write(self, buf): class StreamingHandler(server.BaseHTTPRequestHandler): def do_GET(self): - if self.headers.get('Authorization') is None: + if NO_AUTH: + self.authorized_get() + elif self.headers.get('Authorization') is None: self.do_AUTHHEAD() self.wfile.write(b'no auth header received') elif self.headers.get('Authorization') == BASIC_AUTH: From 344996ed7a7f0ce0993238f69900b7c4383450d9 Mon Sep 17 00:00:00 2001 From: Thibault Coupin Date: Sun, 30 Dec 2018 14:14:24 +0100 Subject: [PATCH 4/4] Fix redirect when no trailing / --- web_streaming.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_streaming.py b/web_streaming.py index f5c4c48..3f378bb 100644 --- a/web_streaming.py +++ b/web_streaming.py @@ -77,7 +77,7 @@ def do_AUTHHEAD(self): self.end_headers() def authorized_get(self): - if self.path == PATH_PREFIX + '/': + if self.path == PATH_PREFIX + '/' or self.path == PATH_PREFIX: self.send_response(301) self.send_header('Location', PATH_PREFIX + '/index.html') self.end_headers()