# 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'] content = mw.getLastLine(logPath, 16) 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'] 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) 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] args['params'] = 'panel-test' 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')