108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from flask import Flask, send_file, request
 | |
| from time import sleep
 | |
| from werkzeug.serving import make_server
 | |
| from threading import Thread
 | |
| from mysql.connector import connect, Error
 | |
| from macros import *
 | |
| import os, json, config, requests, logging
 | |
| 
 | |
| 
 | |
| class WSThread(Thread):
 | |
| 	app = Flask(__name__)
 | |
| 	conn = None
 | |
| 
 | |
| 	def __init__(self, event):
 | |
| 		super(WSThread, self).__init__()
 | |
| 		self.event = event
 | |
| 
 | |
| 		log = logging.getLogger('werkzeug')
 | |
| 		log.disabled = True
 | |
| 
 | |
| 
 | |
| 	@app.route('/')
 | |
| 	@app.route('/index')
 | |
| 	def index():
 | |
| 		return '<meta charset="UTF-8"><script defer src="/index.js"></script>'
 | |
| 
 | |
| 
 | |
| 	@app.route('/index.js')
 | |
| 	def indexjs():
 | |
| 		return send_file('index.js')
 | |
| 
 | |
| 
 | |
| 	@app.route('/curstatus.json')
 | |
| 	def curstatus():
 | |
| 		j = {}
 | |
| 		j['info'] = {}
 | |
| 		j['info']['asics'] = {}
 | |
| 
 | |
| 		return json.dumps(j), 200, {'ContentType':'application/json'}
 | |
| 
 | |
| 
 | |
| 	def dbinit(self):
 | |
| 		with self.conn.cursor() as c:
 | |
| 			c.execute("""
 | |
| 				CREATE TABLE IF NOT EXISTS `ips` (
 | |
| 					`id` INT AUTO_INCREMENT PRIMARY KEY,
 | |
| 					`ip` VARCHAR(64) NOT NULL,
 | |
| 					`location` VARCHAR(64) NOT NULL
 | |
| 				)
 | |
| 			""")
 | |
| 			c.execute("""
 | |
| 				CREATE TABLE IF NOT EXISTS `laststate` (
 | |
| 					`id` INT AUTO_INCREMENT PRIMARY KEY,
 | |
| 					`ip` VARCHAR(64) NOT NULL,
 | |
| 					`mac` VARCHAR(32) NOT NULL,
 | |
| 					`type` INT(11) NOT NULL,
 | |
| 					`location` VARCHAR(64) NOT NULL,
 | |
| 					`status` VARCHAR(32) NOT NULL,
 | |
| 					`time` INT(11) NOT NULL
 | |
| 				)
 | |
| 			""")
 | |
| 			c.execute("""
 | |
| 				CREATE TABLE IF NOT EXISTS `asiclogs` (
 | |
| 					`id` INT AUTO_INCREMENT PRIMARY KEY,
 | |
| 					`ip` VARCHAR(64) NOT NULL,
 | |
| 					`mac` VARCHAR(64) NOT NULL,
 | |
| 					`type` VARCHAR(64) NOT NULL,
 | |
| 					`time` INT(11) NOT NULL,
 | |
| 					`log` TEXT NOT NULL
 | |
| 				)
 | |
| 			""")
 | |
| 
 | |
| 			self.conn.commit()
 | |
| 
 | |
| 
 | |
| 	def runweb(self):
 | |
| 		self.server = make_server('0.0.0.0', CONF.get('port'), self.app)
 | |
| 		self.server.serve_forever()
 | |
| 
 | |
| 
 | |
| 	def run(self):
 | |
| 		try:
 | |
| 			with connect(host=CONF.get('db', 'host'), user=CONF.get('db', 'user'), password=CONF.get('db', 'password')) as conn:
 | |
| 				with conn.cursor() as c:
 | |
| 					c.execute(f"CREATE DATABASE IF NOT EXISTS {CONF.get('db', 'name')}")
 | |
| 
 | |
| 			self.conn = connect(
 | |
| 				host=CONF.get('db', 'host'),
 | |
| 				user=CONF.get('db', 'user'),
 | |
| 				password=CONF.get('db', 'password'),
 | |
| 				database=CONF.get('db', 'name'))
 | |
| 			self.dbinit()
 | |
| 
 | |
| 			web = Thread(target=self.runweb)
 | |
| 			web.daemon = True
 | |
| 			web.start()
 | |
| 
 | |
| 			SUCC(f"Web interface started at port {CONF.get('port')}!")
 | |
| 
 | |
| 			while not self.event.is_set():
 | |
| 				sleep(1)
 | |
| 
 | |
| 			SUCC(f"Web server stopped!")
 | |
| 			self.server.shutdown()
 | |
| 		except Exception as e:
 | |
| 			CRIT(str(e))
 | |
| 			os._exit(1)
 |