Simple Linux Panel
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mdserver-web/plugins/webhook/index.py

203 lines
4.5 KiB

3 years ago
# coding:utf-8
import sys
import io
import os
import time
import re
import json
sys.path.append(os.getcwd() + "/class/core")
import mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
def getPluginName():
return 'webhook'
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 checkArgs(data, ck=[]):
for i in range(len(ck)):
if not ck[i] in data:
return (False, mw.returnJson(False, '参数:(' + ck[i] + ')没有!'))
return (True, mw.returnJson(True, 'ok'))
def getCfgFilePath():
return getServerDir() + "/cfg.json"
def initCfg():
cfg = getCfgFilePath()
data = []
mw.writeFile(cfg, json.dumps(data))
def getCfg():
cfg = getCfgFilePath()
if not os.path.exists(cfg):
initCfg()
data = mw.readFile(cfg)
data = json.loads(data)
return data
def addCfg(val):
cfg = getCfgFilePath()
data = getCfg()
data.append(val)
mw.writeFile(cfg, json.dumps(data))
def status():
return 'start'
def addHook():
args = getArgs()
data = checkArgs(args, ['title', "shell"])
if not data[0]:
return data[1]
hook = {}
hook['title'] = args['title']
hook['access_key'] = mw.getRandomString(48)
hook['count'] = 0
hook['addtime'] = int(time.time())
hook['uptime'] = 0
script_dir = getServerDir() + "/scripts"
if not os.path.exists(script_dir):
os.mkdir(script_dir)
addCfg(hook)
shellFile = script_dir + '/' + hook['access_key']
mw.writeFile(shellFile, args['shell'])
return mw.returnJson(True, '添加成功!')
def getList():
data = getCfg()
rdata = {}
rdata['list'] = data
rdata['script_dir'] = getServerDir() + "/scripts"
return mw.returnJson(True, 'ok', rdata)
def getLog():
args = getArgs()
check_arg = checkArgs(args, ['path'])
if not check_arg[0]:
return check_arg[1]
logPath = args['path']
2 years ago
content = mw.getLastLine(logPath, 16)
3 years ago
return mw.returnJson(True, 'ok', content)
def runShellArgs(args):
data = getCfg()
for i in range(len(data)):
if data[i]['access_key'] == args['access_key']:
script_dir = getServerDir() + "/scripts"
shellFile = script_dir + '/' + args['access_key']
2 years ago
param = args['params']
if param == '':
param = 'no-parameters'
param = re.sub("\"", '', param)
cmd = "bash {} {} >> {}.log 2>&1 &".format(
shellFile, param, shellFile)
# print(cmd)
os.system(cmd)
3 years ago
data[i]['count'] += 1
data[i]['uptime'] = int(time.time())
mw.writeFile(getCfgFilePath(), json.dumps(data))
return mw.returnJson(True, '运行成功!')
return mw.returnJson(False, '指定Hook不存在!')
def runShell():
args = getArgs()
check_arg = checkArgs(args, ['access_key'])
if not check_arg[0]:
return check_arg[1]
2 years ago
args['params'] = 'panel-test'
3 years ago
return runShellArgs(args)
def delHook():
args = getArgs()
check_arg = checkArgs(args, ['access_key'])
if not check_arg[0]:
return check_arg[1]
data = getCfg()
newdata = []
for hook in data:
if hook['access_key'] == args['access_key']:
continue
newdata.append(hook)
jsonFile = getCfgFilePath()
shellFile = getServerDir() + "/scripts/" + args['access_key']
if not os.path.exists(shellFile):
return mw.returnJson(False, '删除失败!')
os.remove(shellFile)
log_file = "{}.log".format(shellFile)
if os.path.exists(log_file):
os.remove(log_file)
mw.writeFile(jsonFile, json.dumps(newdata))
return mw.returnJson(True, '删除成功!')
if __name__ == "__main__":
func = sys.argv[1]
if func == 'status':
print(status())
elif func == "add_hook":
print(addHook())
elif func == "get_list":
print(getList())
elif func == "run_shell":
print(runShell())
elif func == 'del_hook':
print(delHook())
elif func == 'get_log':
print(getLog())
else:
print('error')