diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..19214caa52bffe947c31a6775c809d65f0987de8 --- /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 5ee69920e9757af06b126d63a696fdcf4725c67c..d0732fccae631c3d58aa125b9105f90585e5f911 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 0000000000000000000000000000000000000000..3617388e36902e9973cc7c0aaee2e0b9c7891d25 --- /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 0000000000000000000000000000000000000000..c3d9d2b044540bbcddb33c16ee256ad93c0fce22 --- /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()