From 0253aea6eae9fbf1547539350dc9ec10accdfe91 Mon Sep 17 00:00:00 2001
From: Kajetan Dvoracek <kajetan.dvoracek@slub-dresden.de>
Date: Tue, 30 Aug 2022 14:54:32 +0200
Subject: [PATCH] Technisches (Serve-Skript, .editorconfig)

---
 .editorconfig | 11 +++++++++++
 README.md     |  5 +++++
 keygen.sh     | 10 ++++++++++
 serve.py      | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+)
 create mode 100644 .editorconfig
 create mode 100755 keygen.sh
 create mode 100755 serve.py

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..19214ca
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,11 @@
+# top-most EditorConfig file
+root = true
+
+# Unix-style newlines with a newline ending every file
+[*]
+charset = utf-8
+end_of_line = lf
+indent_style = space
+indent_size = 4
+insert_final_newline = true
+trim_trailing_whitespace = true
diff --git a/README.md b/README.md
index 5ee6992..d0732fc 100644
--- a/README.md
+++ b/README.md
@@ -3,3 +3,8 @@
 Beispieldateien zur A/V-Implementierung in Kitodo.Presentation.
 
 Ausgangspunkt: https://intranet.slub-dresden.de/display/SAEH/AV-Metadaten-Schema
+
+## Technisches
+
+- [serve.py](serve.py): Einfacher HTTP-Server zum lokalen Ausliefern der Dateien. IP-Adressen müssen angepasst werden.<br>
+  [keygen.sh](keygen.sh): SSL-Zertifikat für `serve.py` generieren
diff --git a/keygen.sh b/keygen.sh
new file mode 100755
index 0000000..3617388
--- /dev/null
+++ b/keygen.sh
@@ -0,0 +1,10 @@
+#!/usr/bin/bash
+
+# https://stackoverflow.com/questions/19705785/python-3-simple-https-server
+openssl req -new -x509 -keyout localhost.pem -out localhost.pem -days 365 -nodes
+
+# https://gist.github.com/fntlnz/cf14feb5a46b2eda428e000157447309
+# set -e
+# openssl genrsa -out mets-av.local.key 2048
+# openssl req -new -sha256 -key mets-av.local.key -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=mets-av.local" -out mets-av.local.csr
+# openssl x509 -req -in mets-av.local.csr -CA /var/mkcert/rootCA.pem -CAkey /var/mkcert/rootCA-key.pem -CAcreateserial -out mets-av.local.crt -days 500 -sha256
diff --git a/serve.py b/serve.py
new file mode 100755
index 0000000..c3d9d2b
--- /dev/null
+++ b/serve.py
@@ -0,0 +1,48 @@
+#!/usr/bin/env python3
+
+# https://stackoverflow.com/questions/19705785/python-3-simple-https-server
+# https://stackoverflow.com/questions/21956683/enable-access-control-on-simple-http-server
+
+from http.server import HTTPServer, SimpleHTTPRequestHandler
+import ssl
+from threading import Thread
+
+
+class CORSRequestHandler (SimpleHTTPRequestHandler):
+    def end_headers(self):
+        self.send_header('Access-Control-Allow-Origin', '*')
+        SimpleHTTPRequestHandler.end_headers(self)
+
+
+def start_server(address_candidates, port, https):
+    for address in address_candidates:
+        try:
+            server_address = (address, port)
+            httpd = HTTPServer(server_address, CORSRequestHandler)
+            if https:
+                httpd.socket = ssl.wrap_socket(httpd.socket,
+                                               server_side=True,
+                                               certfile='localhost.pem',
+                                               ssl_version=ssl.PROTOCOL_TLS)
+
+            httpd.serve_forever()
+        except OSError:
+            pass
+
+
+ips = ['192.168.2.33', '172.16.69.244']
+
+servers = [
+    Thread(name='HTTPS', target=start_server, args=(ips, 4443, True)),
+    Thread(name='HTTPS', target=start_server,
+           args=(['localhost'], 4443, True)),
+    Thread(name='HTTP', target=start_server, args=(ips, 4480, False)),
+    Thread(name='HTTP', target=start_server,
+           args=(['localhost'], 4480, False)),
+]
+
+for srv in servers:
+    srv.start()
+
+for srv in servers:
+    srv.join()
-- 
GitLab