2024-01-05 08:59:40 -07:00
|
|
|
import json
|
|
|
|
|
import importlib
|
|
|
|
|
import sys
|
|
|
|
|
|
|
|
|
|
import src.web as web
|
|
|
|
|
import src.utils as utils
|
|
|
|
|
|
|
|
|
|
class module():
|
|
|
|
|
def __init__(self):
|
|
|
|
|
self.name = None
|
|
|
|
|
self.module = None
|
|
|
|
|
self.rootdir = None
|
|
|
|
|
self.tabs = []
|
|
|
|
|
|
2024-01-22 17:04:09 -07:00
|
|
|
def add(self):
|
2024-01-05 08:59:40 -07:00
|
|
|
spec = importlib.util.spec_from_file_location(self.name, utils.getRoot(self.entrypoint))
|
|
|
|
|
module = importlib.util.module_from_spec(spec)
|
|
|
|
|
spec.loader.exec_module(module)
|
|
|
|
|
self.module = module
|
2024-01-22 17:04:09 -07:00
|
|
|
|
|
|
|
|
def init(self, moduleMaster):
|
|
|
|
|
self.module.init(moduleMaster)
|
|
|
|
|
|
|
|
|
|
def run(self):
|
|
|
|
|
self.module.main()
|
|
|
|
|
|
2024-01-05 08:59:40 -07:00
|
|
|
|
|
|
|
|
class moduleMaster():
|
|
|
|
|
def __init__(self):
|
|
|
|
|
self.modules = []
|
2024-01-22 17:04:09 -07:00
|
|
|
|
2024-01-05 08:59:40 -07:00
|
|
|
self.webserv = None
|
|
|
|
|
self.app = None
|
|
|
|
|
self.rawServer = None
|
|
|
|
|
self.authServer = None
|
2024-01-22 17:04:09 -07:00
|
|
|
# self.addRawEventListener('test1', test1)
|
2024-01-05 08:59:40 -07:00
|
|
|
|
2024-01-22 17:04:09 -07:00
|
|
|
def addModules(self, webserv):
|
2024-01-05 08:59:40 -07:00
|
|
|
self.webserv = webserv
|
|
|
|
|
|
|
|
|
|
mdirs = utils.listSubdirs(utils.getRoot('modules/'))
|
|
|
|
|
|
|
|
|
|
for mname in mdirs:
|
|
|
|
|
mjson = json.loads(open(utils.getRoot(f'modules/{mname}/module.json')).read())
|
|
|
|
|
m = module()
|
|
|
|
|
m.name = mjson['name']
|
|
|
|
|
m.entrypoint = mjson['entrypoint']
|
|
|
|
|
|
|
|
|
|
for tab in mjson['tabs']:
|
|
|
|
|
mtab = utils.getatribinarr(self.webserv.webtabs, 'name', tab['name'])
|
|
|
|
|
|
|
|
|
|
if mtab == None:
|
|
|
|
|
mtab = web.webtab()
|
|
|
|
|
mtab.name = tab['name']
|
|
|
|
|
m.tabs.append(mtab)
|
|
|
|
|
|
|
|
|
|
def recursiveAdder(objs):
|
|
|
|
|
tmpPages = []
|
|
|
|
|
for obj in objs:
|
|
|
|
|
if obj['type'] == 'folder':
|
|
|
|
|
folder = web.webpagefolder()
|
|
|
|
|
folder.name = obj['name']
|
|
|
|
|
tmpTmpPages = recursiveAdder(obj['pages'])
|
|
|
|
|
for tmpobj in tmpTmpPages:
|
|
|
|
|
folder.pages.append(tmpobj)
|
|
|
|
|
tmpPages.append(folder)
|
|
|
|
|
else:
|
|
|
|
|
mpage = web.webpage()
|
|
|
|
|
mpage.name = obj['name']
|
|
|
|
|
mpage.location = obj['location']
|
|
|
|
|
tmpPages.append(mpage)
|
|
|
|
|
return tmpPages
|
|
|
|
|
|
|
|
|
|
tmpPages = recursiveAdder(tab['pages'])
|
|
|
|
|
|
|
|
|
|
for obj in tmpPages:
|
|
|
|
|
mtab.pages.append(obj)
|
|
|
|
|
|
|
|
|
|
mtab.defaultPage = tab['defaultPage']
|
|
|
|
|
|
|
|
|
|
self.webserv.webtabs.append(mtab)
|
|
|
|
|
|
2024-01-22 17:04:09 -07:00
|
|
|
m.add()
|
2024-01-05 08:59:40 -07:00
|
|
|
self.modules.append(m)
|
|
|
|
|
|
|
|
|
|
for tab in webserv.webtabs:
|
|
|
|
|
tab.addHtml()
|
|
|
|
|
|
2024-01-22 17:04:09 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def initModules(self, webserv):
|
|
|
|
|
self.webserv = webserv
|
|
|
|
|
self.app = webserv.app
|
|
|
|
|
self.rawServer = webserv.rawServer
|
|
|
|
|
self.authServer = webserv.authServer
|
2024-01-05 08:59:40 -07:00
|
|
|
|
|
|
|
|
for module in self.modules:
|
2024-01-22 17:04:09 -07:00
|
|
|
module.init(self)
|
|
|
|
|
|
|
|
|
|
def runModules(self):
|
|
|
|
|
for module in self.modules:
|
|
|
|
|
module.run()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-01-05 08:59:40 -07:00
|
|
|
def getRawClients(self):
|
|
|
|
|
return self.rawServer.clients
|
2024-01-22 17:04:09 -07:00
|
|
|
|
2024-01-05 08:59:40 -07:00
|
|
|
def getAuthClients(self):
|
|
|
|
|
return self.authServer.clients
|
2024-01-22 17:04:09 -07:00
|
|
|
|
|
|
|
|
def addRawEventListener(self, eventName, func):
|
|
|
|
|
self.rawServer.eventListeners.append({
|
|
|
|
|
'type': eventName,
|
|
|
|
|
'func': func
|
|
|
|
|
})
|
2024-01-05 08:59:40 -07:00
|
|
|
|
|
|
|
|
def addAuthEventListener(self, eventName, func):
|
2024-01-22 17:04:09 -07:00
|
|
|
def tmpfunc(c, data):
|
2024-01-05 08:59:40 -07:00
|
|
|
if not c in self.rawServer.clients:
|
|
|
|
|
return
|
|
|
|
|
ac = utils.getatribinarr(self.authServer.clients, 'rawClient', c)
|
|
|
|
|
if ac == None:
|
|
|
|
|
return
|
2024-01-22 17:04:09 -07:00
|
|
|
if not self.authServer.validAc(ac):
|
|
|
|
|
return
|
2024-01-05 08:59:40 -07:00
|
|
|
|
|
|
|
|
func(ac, data)
|
|
|
|
|
|
2024-01-22 17:04:09 -07:00
|
|
|
self.rawServer.addEventListener(eventName, tmpfunc)
|
|
|
|
|
|
|
|
|
|
def getRawClientByID(self, ID):
|
|
|
|
|
return utils.getatribinarr(self.rawServer.clients, 'clientid', ID)
|
|
|
|
|
|
|
|
|
|
def getAuthClientByID(self, ID):
|
|
|
|
|
c = utils.getatribinarr(self.rawServer.clients, 'clientid', ID)
|
|
|
|
|
if c == None:
|
|
|
|
|
return None
|
|
|
|
|
return utils.getatribinarr(self.authServer.clients, 'rawClient', c)
|
|
|
|
|
|
|
|
|
|
def sendPopupInfo(self, c, title, msg):
|
|
|
|
|
c.send('popupInfo', {
|
|
|
|
|
'title': title,
|
|
|
|
|
'msg': msg
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def sendPopupSuccess(self, c, title, msg):
|
|
|
|
|
c.send('popupSuccess', {
|
|
|
|
|
'title': title,
|
|
|
|
|
'msg': msg
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def sendPopupWarning(self, c, title, msg):
|
|
|
|
|
c.send('popupWarning', {
|
|
|
|
|
'title': title,
|
|
|
|
|
'msg': msg
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def sendPopupError(self, c, title, msg):
|
|
|
|
|
c.send('popupError', {
|
|
|
|
|
'title': title,
|
|
|
|
|
'msg': msg
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
def sendPopupColor(self, c, title, msg, color, isDark):
|
|
|
|
|
c.send('popupColor', {
|
|
|
|
|
'title': title,
|
|
|
|
|
'msg': msg,
|
|
|
|
|
'color': color,
|
|
|
|
|
'isDark': isDark
|
|
|
|
|
})
|