Browse code

Add server error handling

Robert Cranston authored on 18/07/2025 19:34:06
Showing 1 changed files
... ...
@@ -20,13 +20,19 @@ class Handler(http.server.SimpleHTTPRequestHandler):
20 20
         super().__init__(*args, **kwargs, directory=PUBLIC)
21 21
 
22 22
     def do_POST(self):
23
-        length = int(self.headers["Content-Length"])
24
-        ext    = str(self.headers["Content-Type"]).split("/")[1]
25
-        base   = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f")
26
-        name   = f"{CAMERA}/{base}.{ext}"
27
-        self.log_message("Receiving '%s'", name)
28
-        with open(name, "wb") as f:
29
-            f.write(self.rfile.read(length))
23
+        try:
24
+            length = int(self.headers["Content-Length"])
25
+            ext    = str(self.headers["Content-Type"]).split("/")[1]
26
+        except:
27
+            return self.send_error(400)
28
+        try:
29
+            base = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f")
30
+            name = f"{CAMERA}/{base}.{ext}"
31
+            self.log_message("Receiving '%s'", name)
32
+            with open(name, "wb") as f:
33
+                f.write(self.rfile.read(length))
34
+        except:
35
+            return self.send_error(500)
30 36
         self.send_response(200, name)
31 37
         self.end_headers()
32 38
 
Browse code

Add posting of "environment" camera

Robert Cranston authored on 18/07/2025 19:27:33
Showing 1 changed files
... ...
@@ -1,6 +1,8 @@
1 1
 #!/usr/bin/env python3
2 2
 
3 3
 import sys
4
+import os
5
+import datetime
4 6
 import http.server
5 7
 import ssl
6 8
 
... ...
@@ -8,13 +10,26 @@ import ssl
8 10
 PORT   = 8000
9 11
 HOST   = ""
10 12
 PUBLIC = "public"
13
+CAMERA = "camera"
11 14
 
12 15
 
13 16
 class Handler(http.server.SimpleHTTPRequestHandler):
14 17
 
15 18
     def __init__(self, *args, **kwargs):
19
+        os.makedirs(CAMERA, exist_ok=True)
16 20
         super().__init__(*args, **kwargs, directory=PUBLIC)
17 21
 
22
+    def do_POST(self):
23
+        length = int(self.headers["Content-Length"])
24
+        ext    = str(self.headers["Content-Type"]).split("/")[1]
25
+        base   = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S_%f")
26
+        name   = f"{CAMERA}/{base}.{ext}"
27
+        self.log_message("Receiving '%s'", name)
28
+        with open(name, "wb") as f:
29
+            f.write(self.rfile.read(length))
30
+        self.send_response(200, name)
31
+        self.end_headers()
32
+
18 33
 
19 34
 args = iter(sys.argv[1:])
20 35
 port = int(next(args, PORT))
Browse code

Add HTTPS server with self-signed certificate

Robert Cranston authored on 17/07/2025 18:22:31
Showing 1 changed files
1 1
new file mode 100755
... ...
@@ -0,0 +1,29 @@
1
+#!/usr/bin/env python3
2
+
3
+import sys
4
+import http.server
5
+import ssl
6
+
7
+
8
+PORT   = 8000
9
+HOST   = ""
10
+PUBLIC = "public"
11
+
12
+
13
+class Handler(http.server.SimpleHTTPRequestHandler):
14
+
15
+    def __init__(self, *args, **kwargs):
16
+        super().__init__(*args, **kwargs, directory=PUBLIC)
17
+
18
+
19
+args = iter(sys.argv[1:])
20
+port = int(next(args, PORT))
21
+host = str(next(args, HOST))
22
+
23
+context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
24
+context.load_cert_chain("cert.pem", "key.pem")
25
+
26
+httpd = http.server.HTTPServer((host, port), Handler)
27
+httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
28
+
29
+httpd.serve_forever()