From 205402f5f2b26b92fb40769ad25046c5baa7bcca Mon Sep 17 00:00:00 2001 From: natrixaeria Date: Fri, 31 May 2019 15:24:57 +0200 Subject: Add easy-to-use python webserver --- WebInterface/wasm/webhogg/deploy | 5 +-- WebInterface/wasm/webhogg/deploy.py | 73 +++++++++++++++++++++++-------- WebInterface/wasm/webhogg/killpy | 2 + WebInterface/wasm/webhogg/lighttpd.config | 34 -------------- WebInterface/wasm/webhogg/mimes | 1 - 5 files changed, 59 insertions(+), 56 deletions(-) create mode 100755 WebInterface/wasm/webhogg/killpy delete mode 100644 WebInterface/wasm/webhogg/lighttpd.config delete mode 100644 WebInterface/wasm/webhogg/mimes (limited to 'WebInterface/wasm') diff --git a/WebInterface/wasm/webhogg/deploy b/WebInterface/wasm/webhogg/deploy index 01bc036..6284564 100755 --- a/WebInterface/wasm/webhogg/deploy +++ b/WebInterface/wasm/webhogg/deploy @@ -1,4 +1,3 @@ #!/bin/sh -#killall darkhttpd -#darkhttpd . --addr 127.0.0.1 --port 8080 --mimetypes mimes -python3 deploy.py +killall python3 +python3 deploy.py -d diff --git a/WebInterface/wasm/webhogg/deploy.py b/WebInterface/wasm/webhogg/deploy.py index 21d9a5e..278becd 100755 --- a/WebInterface/wasm/webhogg/deploy.py +++ b/WebInterface/wasm/webhogg/deploy.py @@ -2,10 +2,8 @@ from socket import socket, SOL_SOCKET, SO_REUSEADDR -ws = socket() -ws.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) -ws.bind(('localhost', 8080)) -ws.listen() +ADD_HEADERS = 'Content-Security-Policy: worker-src localhost:*' +ADD_HEADERS = "Content-Security-Policy: script-src 'inline' *; worker-src *" class Client: def __init__(self, sock, addr): @@ -19,24 +17,63 @@ class Client: method, loc, ver = lines[0].split(' ') print(f'request from \'{self.addr}\': "{loc}"') attrs = {key: value for key, value in (i.split(': ') for i in lines[1:])} - return method, loc, attrs + return method, loc, attrs, ver def sen(self, loc, ver): - f = open(loc, 'rb') - c = f.read() - f.close() - self.sock.send(f'HTTP/1.1 200'.encode('utf-8') + c) + print(f'request {loc}') + if loc.startswith('/'): + loc = loc[1:] + if not loc: + loc = 'index.html' + try: + if loc == 'favicon.ico': + raise FileNotFoundError + f = open(loc, 'rb') + c = f.read() + f.close() + print(f'successfully requested {loc}') + if loc.endswith('.js'): + mime = 'application/javascript' + elif loc.endswith('.html'): + mime = 'text/html' + elif loc.endswith('.wasm'): + mime = 'application/wasm' + else: + mime = 'text/plain' + packet = f'HTTP/1.1 200 Success\r\nContent-Length: {len(c)}\r\nContent-Type: {mime}\r\n{ADD_HEADERS}\r\n\r\n'.encode('utf-8') + c + self.sock.send(packet) + except FileNotFoundError: + print(f'error request {loc}') + self.sock.send(f'HTTP/1.1 404 Not Found\r\nContent-Length: 0\r\nContent-Type: text/plain\r\n\r\n'.encode('utf-8')) def run(self): - method, loc, attrs = self.rec() - self.sen(loc, ver) + while True: + method, loc, attrs, ver = self.rec() + self.sen(loc, ver) -clients = [] +def run_server(): + ws = socket() + ws.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) + ws.bind(('localhost', 8080)) + ws.listen() -while True: - c, a = ws.accept() - print(f'{a[0]}:{a[1]} connected') - client = Client(c, a) - clients.append(clients) - client.run() + clients = [] + + while True: + c, a = ws.accept() + print(f'{a[0]}:{a[1]} connected') + client = Client(c, a) + clients.append(clients) + client.run() + + +if __name__ == '__main__': + from sys import argv + if len(argv) > 1 and argv[1] in ('-d', '--daemon'): + from os import getcwd + from daemon import DaemonContext + with DaemonContext(working_directory=getcwd()): + run_server() + else: + run_server() diff --git a/WebInterface/wasm/webhogg/killpy b/WebInterface/wasm/webhogg/killpy new file mode 100755 index 0000000..5e2b9bc --- /dev/null +++ b/WebInterface/wasm/webhogg/killpy @@ -0,0 +1,2 @@ +#!/bin/sh +killall python3 diff --git a/WebInterface/wasm/webhogg/lighttpd.config b/WebInterface/wasm/webhogg/lighttpd.config deleted file mode 100644 index 4072b30..0000000 --- a/WebInterface/wasm/webhogg/lighttpd.config +++ /dev/null @@ -1,34 +0,0 @@ -server.http-parseopts = ( - "header-strict" => "enable", - "host-strict" => "enable", - "host-normalize" => "enable", - "url-normalize" => "enable", - "url-normalize-unreserved" => "enable", - "url-normalize-required" => "enable", - "url-ctrls-reject" => "enable", - "url-path-2f-decode" => "enable", - "url-path-dotseg-remove" => "enable", - "url-query-20-plus" => "enable" -) - -server.modules += ( "mod_setenv" ) - -server.document-root = "/home/jan/projects/DiscoBot/WebInterface/wasm/webhogg" -server.port = 8080 -dir-listing.activate = "enable" -index-file.names = ( "index.html" ) -mimetype.assign = ( - ".html" => "text/html", - ".txt" => "text/plain", - ".css" => "text/css", - ".js" => "application/javascript", - ".jpg" => "image/jpeg", - ".jpeg" => "image/jpeg", - ".gif" => "image/gif", - ".png" => "image/png", - ".wasm" => "application/wasm", - "" => "application/octet-stream" -) -sentenv.add-response-header = ( - "Content-Security-Policy" => "worker-src localhost:*" -) diff --git a/WebInterface/wasm/webhogg/mimes b/WebInterface/wasm/webhogg/mimes deleted file mode 100644 index 007445d..0000000 --- a/WebInterface/wasm/webhogg/mimes +++ /dev/null @@ -1 +0,0 @@ -application/wasm wasm -- cgit v1.2.3-54-g00ecf