#!/usr/bin/env python3 from http.server import BaseHTTPRequestHandler, HTTPServer import datetime from time import perf_counter import os import socket import requests from userio import * import time import sqlite3 import urllib.parse server = None db_name = None webServer = None server_name="ADMIN : " connectionResults = None data_begin = None data_end = None conn = None c = None class MyServer(BaseHTTPRequestHandler): def log_message(self, format, *args): # To silence the default output of server (too verbose) return def do_GET(self): rootdir = '.' if not os.path.exists(rootdir + self.path) or self.path == '/index.html' or self.path == '/': sourceIP="" if self.headers['X-Real-IP'] is None: sourceIP="From: "+self.client_address[0]+" GET" else: sourceIP="From: "+self.headers['X-Real-IP']+" GET" page=[] data_page = ""; data_page += "
\n" data_page += ""+server['name']+"\n" data_page += "Message\n" data_page += "Addresses\n" data_page += "
\n" s = self.path urlArgs = urllib.parse.parse_qs(s[2:]) try: action = None if "action" in urlArgs: action = urlArgs['action'][0] #data_page += "
["+action+"]
" except: return if action == "message": sqlquery='select * from sms order by epoch desc limit 10;' c.execute(sqlquery) rows = c.fetchall() data_page+="\n" data_page+="\n" data_page+=" \n" data_page+=" \n" data_page+=" \n" data_page+=" \n" data_page+="\n" data_page+="\n" for row in rows: data_page+="\n" data_page+="\n" data_page+="
DateFromToContent
"+row[5]+""+row[1]+""+row[2]+""+row[4]+"
\n" elif action == "address": sqlquery='select * from address;' c.execute(sqlquery) rows = c.fetchall() data_page+="
\n" data_page+="\n" data_page+=" \n" data_page+=" \n" data_page+=" \n" data_page+="\n" data_page+="\n" for row in rows: data_page+="\n" data_page+="\n" data_page+="
DevEUISubscriberIDSMSid
"+row[0]+""+row[1]+""+str(row[2])+"
\n" else: data_page+="

Pick one action in the bar above

\n" page.append(data_begin) page.append(data_page) page.append(data_end) content = ''.join(page) self.send_response(200) self.send_header("Content-type", "text/html") self.send_header('Server',server['name']+" v"+server['version']) self.end_headers() self.wfile.write(content.encode('utf-8')) return elif not os.path.exists(rootdir + self.path): self.send_header('Server',server['name']+" v"+server['version']) self.send_error(404, 'file not found') else: try: f = open(rootdir + self.path,'rb') #open requested file self.send_response(200) if self.path.endswith('.css'): self.send_header('Content-type','text/css') elif self.path.endswith('.bmp'): self.send_header('Content-type','image/x-ms-bmp') elif self.path.endswith('.ico'): self.send_header('Content-type','image/x-icon') elif self.path.endswith('.png'): self.send_header('Content-type','image/png') elif self.path.endswith('.jpg'): self.send_header('Content-type','image/jpeg') else: self.send_header('Content-type','text/html') self.send_header('Server',server['name']+" v"+server['version']) self.end_headers() self.wfile.write(f.read()) f.close() return except IOError: self.send_header('Server',server['name']+" v"+server['version']) self.send_error(404, 'file not found') def start(server_config): # global server global data_begin global data_end global conn global c server = server_config['server'] db_name = server_config['database'] conn = sqlite3.connect(db_name) c = conn.cursor() data_begin = "" with open('pageBegin.skel','r') as fStart: data_begin += fStart.read().replace( 'CSTAPPNAME', server['name'] ) data_end = "" with open('pageEnd.skel','r') as fStart: data_end += fStart.read().replace( 'CSTAPPNAME', server['name'] ) say(server_name+server['name']+" v"+server['version']) webServer = HTTPServer((server['address'], server['port']), MyServer) say(server['address']+":"+str(server['port'])) webServer.serve_forever() if __name__ == "__main__": #global server server = configuration.get_server() say("----------------------") say(server['name']+" v"+server['version']) webServer = HTTPServer((server['address'], server['port']), MyServer) say("Server started http://%s:%s" % (server['address'], server['port'])) getMenuItems() try: thWidget = threading.Thread(target=thCreateWidget) thWidget.start() thMqtt = threading.Thread(target=thMqttProbe) thMqtt.start() thMetar = threading.Thread(target=thCreateMetar) thMetar.start() thLightning = threading.Thread(target=thCreateLightning) thLightning.start() thIp = threading.Thread(target=thCreateIp) thIp.start() webServer.serve_forever() except KeyboardInterrupt: thWidget.join() thMqtt.join() thMetar.join() thLightning.join() thLightning.join() thIp.join() pass webServer.server_close() print("Server stopped.")