import socket from gs.classes.http_request import HttpRequest class LittleApache(): available_wifis = [] keep_webserver_alive = True def __init__(self, net): self.net = net addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1] self.s = socket.socket() self.s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.s.bind(addr) self.s.listen() # print('Listening on', addr) def start(self): print("Webserver started. Connect to: " + self.net.ifconfig()[0]) print(self.net.ifconfig()) while self.keep_webserver_alive: try: conn, addr = self.s.accept() #print('Got a connection from', addr) # Receive and parse the request request = conn.recv(1024) # print("Request (RAW)", request) http_request = HttpRequest(request) self.http_request = http_request request = str(request) # print('Request content = %s' % request) #try: # request = request.split()[1] # print('Request:', request) #except IndexError: # pass response = self.response(http_request) # Send the HTTP response and close the connection conn.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n') conn.send(response) conn.close() except OSError as e: conn.close() print('Connection closed') return self def response(self, request: HttpRequest): #print("Webpage: ", request) print("Request method: ", request.method, "Request path: ", request.path) header = f""" Growsystem """ footer = f""" """ body = "" if self.is_path_match(request, '/test1'): body = f"""
Test 1!!!
""" elif (self.is_path_match(request, '') or self.is_path_match(request, '/')): options = [] for w in self.available_wifis: options.append(''.format(w, w)) body = """

Setup Pico

SSID:
Password:
PIN:
""" body = body.format(''.join(options)) elif self.is_path_match(request, '/save', 'POST'): print("Save config path: ", request) self.keep_webserver_alive = False body = """

Setup Pico

Setup abgeschlossen. Bitte ein paar Sekunden warten, dann neu starten.
""" else: body = f"""
Unknown page
""" html = '' html_arr = [header, body, footer] html = html.join(html_arr) return str(html) def is_path_match(self, request, path, method='GET'): return path == request.path and method == request.method