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)
|