summaryrefslogtreecommitdiff
path: root/WebInterface
diff options
context:
space:
mode:
authornatrixaeria <janng@gmx.de>2019-05-31 15:24:57 +0200
committernatrixaeria <janng@gmx.de>2019-05-31 15:24:57 +0200
commit205402f5f2b26b92fb40769ad25046c5baa7bcca (patch)
tree164a1674e4fad61ec214b65d8701b6068c743a66 /WebInterface
parenta8908cac9524fabdcf4232c1394a51848f0335af (diff)
Add easy-to-use python webserver
Diffstat (limited to 'WebInterface')
-rwxr-xr-xWebInterface/wasm/webhogg/deploy5
-rwxr-xr-xWebInterface/wasm/webhogg/deploy.py73
-rwxr-xr-xWebInterface/wasm/webhogg/killpy2
-rw-r--r--WebInterface/wasm/webhogg/lighttpd.config34
-rw-r--r--WebInterface/wasm/webhogg/mimes1
5 files changed, 59 insertions, 56 deletions
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