mdserver-web/plugins/xui/index.py

224 lines
5.0 KiB
Python
Raw Permalink Normal View History

2024-12-03 03:14:47 -05:00
# coding:utf-8
import sys
import io
import os
import time
import re
web_dir = os.getcwd() + "/web"
if os.path.exists(web_dir):
sys.path.append(web_dir)
os.chdir(web_dir)
import core.mw as mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'xui'
def getPluginDir():
return mw.getPluginDir() + '/' + getPluginName()
def getServerDir():
return mw.getServerDir() + '/' + getPluginName()
def getArgs():
args = sys.argv[2:]
tmp = {}
args_len = len(args)
if args_len == 1:
t = args[0].strip('{').strip('}')
t = t.split(':')
tmp[t[0]] = t[1]
elif args_len > 1:
for i in range(len(args)):
t = args[i].split(':')
tmp[t[0]] = t[1]
return tmp
def status():
2024-12-03 04:12:37 -05:00
cmd = "ps -ef|grep x-ui |grep -v grep | grep -v python | awk '{print $2}'"
2024-12-03 03:14:47 -05:00
data = mw.execShell(cmd)
if data[0] == '':
return 'stop'
return 'start'
def getServiceFile():
systemDir = mw.systemdCfgDir()
2024-12-03 04:28:12 -05:00
return systemDir + '/xui.service'
2024-12-03 03:14:47 -05:00
2024-12-03 04:28:12 -05:00
def getXuiPort():
2024-12-03 03:14:47 -05:00
return '8349'
def __release_port(port):
from collections import namedtuple
try:
from utils.firewall import Firewall as MwFirewall
2024-12-03 04:28:12 -05:00
MwFirewall.instance().addAcceptPort(port, 'xui', 'port')
2024-12-03 03:14:47 -05:00
return port
except Exception as e:
return "Release failed {}".format(e)
def __delete_port(port):
from collections import namedtuple
try:
from utils.firewall import Firewall as MwFirewall
MwFirewall.instance().delAcceptPortCmd(port, 'tcp')
return port
except Exception as e:
return "Delete failed {}".format(e)
2024-12-03 04:25:53 -05:00
def pSqliteDb(dbname='databases'):
conn = mw.M(dbname).dbPos('/etc/x-ui', 'x-ui')
return conn
2024-12-03 03:14:47 -05:00
def initDreplace():
return 'ok'
2024-12-03 04:25:53 -05:00
def xuiOp(method):
2024-12-03 03:14:47 -05:00
file = initDreplace()
if not mw.isAppleSystem():
mw.execShell('systemctl daemon-reload')
2024-12-03 04:28:12 -05:00
data = mw.execShell('systemctl ' + method + ' x-ui')
2024-12-03 03:14:47 -05:00
if data[1] == '':
return 'ok'
return data[1]
return 'fail'
def start():
2024-12-03 05:48:56 -05:00
openPort()
2024-12-03 04:25:53 -05:00
return xuiOp('start')
2024-12-03 03:14:47 -05:00
def stop():
2024-12-03 05:46:45 -05:00
closePort()
2024-12-03 04:25:53 -05:00
return xuiOp('stop')
2024-12-03 03:14:47 -05:00
def restart():
2024-12-03 04:25:53 -05:00
return xuiOp('restart')
2024-12-03 03:14:47 -05:00
def reload():
return redisOp('reload')
def initdStatus():
if mw.isAppleSystem():
return "Apple Computer does not support"
2024-12-03 04:14:31 -05:00
shell_cmd = 'systemctl status x-ui | grep loaded | grep "enabled;"'
2024-12-03 03:14:47 -05:00
data = mw.execShell(shell_cmd)
if data[0] == '':
return 'fail'
return 'ok'
def initdInstall():
if mw.isAppleSystem():
return "Apple Computer does not support"
2024-12-03 04:14:31 -05:00
mw.execShell('systemctl enable x-ui')
2024-12-03 03:14:47 -05:00
return 'ok'
def initdUinstall():
if mw.isAppleSystem():
return "Apple Computer does not support"
2024-12-03 04:14:31 -05:00
mw.execShell('systemctl disable x-ui')
2024-12-03 03:14:47 -05:00
return 'ok'
2024-12-03 05:46:45 -05:00
def openPort():
2024-12-03 05:48:56 -05:00
setting = pSqliteDb('settings')
2024-12-03 05:46:45 -05:00
port_data = setting.field('id,key,value').where("key=?", ('webPort',)).find()
port = port_data['value']
__release_port(port)
def closePort():
2024-12-03 05:48:56 -05:00
setting = pSqliteDb('settings')
2024-12-03 05:46:45 -05:00
port_data = setting.field('id,key,value').where("key=?", ('webPort',)).find()
port = port_data['value']
__delete_port(port)
2024-12-03 04:30:41 -05:00
def getXuiInfo():
2024-12-03 03:14:47 -05:00
2024-12-03 04:38:12 -05:00
data = {}
2024-12-03 04:25:53 -05:00
user = pSqliteDb('users')
info = user.field('username,password').where("id=?", (1,)).find()
2024-12-03 03:14:47 -05:00
2024-12-03 04:29:50 -05:00
setting = pSqliteDb('settings')
2024-12-03 05:33:47 -05:00
port_data = setting.field('id,key,value').where("key=?", ('webPort',)).find()
path_data = setting.field('id,key,value').where("key=?", ('webBasePath',)).find()
2024-12-03 05:38:44 -05:00
if path_data is not None:
data['path'] = path_data['value']
else:
2024-12-03 05:39:51 -05:00
data['path'] = '/'
2024-12-03 05:38:44 -05:00
2024-12-03 04:38:12 -05:00
data['username'] = info['username']
data['password'] = info['password']
2024-12-03 05:33:47 -05:00
data['port'] = port_data['value']
data['ip'] = mw.getHostAddr()
2024-12-03 04:38:12 -05:00
return mw.returnJson(True, 'ok', data)
2024-12-03 03:14:47 -05:00
def installPreInspection():
sys = mw.execShell("cat /etc/*-release | grep PRETTY_NAME |awk -F = '{print $2}' | awk -F '\"' '{print $2}'| awk '{print $1}'")
if sys[1] != '':
return '不支持该系统'
sys_id = mw.execShell("cat /etc/*-release | grep VERSION_ID | awk -F = '{print $2}' | awk -F '\"' '{print $2}'")
sysName = sys[0].strip().lower()
sysId = sys_id[0].strip()
if sysName in ('opensuse'):
return '不支持该系统'
return 'ok'
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
print(status())
elif func == 'start':
print(start())
elif func == 'stop':
print(stop())
elif func == 'restart':
print(restart())
elif func == 'reload':
print(reload())
elif func == 'initd_status':
print(initdStatus())
elif func == 'initd_install':
print(initdInstall())
elif func == 'initd_uninstall':
print(initdUinstall())
elif func == 'install_pre_inspection':
print(installPreInspection())
elif func == 'conf':
print(getServiceFile())
2024-12-03 04:30:41 -05:00
elif func == 'info':
print(getXuiInfo())
2024-12-03 03:14:47 -05:00
else:
print('error')