/
server.py
90 lines (67 loc) · 2.32 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import network
import usocket as socket
import ure as re
import json
import routes
# Connect to wifi
def connect(secrets):
net = network.WLAN(network.STA_IF)
if not net.isconnected():
net.active(True)
net.connect(secrets["ssid"], secrets["password"])
while not net.isconnected():
pass
print(net.ifconfig())
# Parse GET parameters
def qs_parse(qs):
parameters = {}
ampersandSplit = qs.split("&")
for element in ampersandSplit:
equalSplit = element.split("=")
parameters[equalSplit[0]] = equalSplit[1] if len(equalSplit) == 2 else equalSplit[0]
return parameters
# Process GET request
def get(path):
route = path
params = []
pos = path.find('?')
fname = path
if pos > -1:
fname = path[0:pos]
params = qs_parse(path[pos+1:])
route = list(filter(lambda x: not x == "", fname.split('/')))
if not (fname == "" or fname == "/"):
try:
f = open('client/' + fname, "r")
return {"cmd": "static", "content": f.read()}
except OSError:
return {"cmd": "get", "route": route, "params": params}
else:
f = open('client/index.html', "r")
return {"cmd": "static", "content": f.read()}
# Socket server
def server(config, stripData, micropython_optimize = False):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind(('',80))
s.listen(5)
while True:
try:
conn,addr=s.accept()
request=conn.recv(4096)
print(conn)
request = re.compile('\r?\n').split(request.decode('utf-8'))
method,path,protocol = request[0].split()
response = ""
parseGet = get(path)
if parseGet["cmd"] == "static":
response = parseGet["content"]
else:
if parseGet["cmd"] == "get" and parseGet["route"][0] in routes.routes:
response = routes.routes[parseGet["route"][0]](parseGet["route"][1:], parseGet["params"], stripData)
print(response, response == "")
if response == "":
response = open('client/index.html', 'r').read();
except ValueError:
response = open('client/index.html', 'r').read();
conn.send(response)
conn.close()