From 961dd5a56e9a15643351bbaa7bf0cee6d76a7c57 Mon Sep 17 00:00:00 2001 From: dami Date: Sat, 17 May 2025 21:07:59 +0800 Subject: [PATCH 1/7] Update index.py --- plugins/webhook/index.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/webhook/index.py b/plugins/webhook/index.py index 15189f727..61d65721f 100755 --- a/plugins/webhook/index.py +++ b/plugins/webhook/index.py @@ -129,7 +129,7 @@ def getLog(): logPath = args['path'] - content = mw.getLastLine(logPath, 16) + content = mw.getLastLine(logPath, 100) return mw.returnJson(True, 'ok', content) From ffd96b03e5bc91b59d7d139d32c91a337423afcc Mon Sep 17 00:00:00 2001 From: dami Date: Sat, 17 May 2025 21:17:50 +0800 Subject: [PATCH 2/7] Update commit.tpl --- plugins/gitea/hook/commit.tpl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/gitea/hook/commit.tpl b/plugins/gitea/hook/commit.tpl index 2f26a67e3..727a2b9cc 100755 --- a/plugins/gitea/hook/commit.tpl +++ b/plugins/gitea/hook/commit.tpl @@ -30,7 +30,8 @@ unset GIT_DIR -cd $GIT_PROJECT_DIR && git pull +# cd $GIT_PROJECT_DIR && git pull +cd $GIT_PROJECT_DIR && sudo git pull # func 2 # cd $GIT_PROJECT_DIR && env -i git pull origin master From 6a41f68289b49ce79e675649845fa3207050dba9 Mon Sep 17 00:00:00 2001 From: dami Date: Sun, 18 May 2025 09:40:10 +0800 Subject: [PATCH 3/7] update --- plugins/webhook/index.py | 42 +++++++++++++++++++++++- plugins/webhook/js/webhook.js | 76 ++++++++++++++++++++++++++++++++++++++----- plugins/webhook/tpl/git.tpl | 21 ++++++++++++ 3 files changed, 129 insertions(+), 10 deletions(-) create mode 100644 plugins/webhook/tpl/git.tpl diff --git a/plugins/webhook/index.py b/plugins/webhook/index.py index 61d65721f..03cd23ca4 100755 --- a/plugins/webhook/index.py +++ b/plugins/webhook/index.py @@ -97,7 +97,10 @@ def addHook(): hook = {} hook['title'] = args['title'] - hook['access_key'] = mw.getRandomString(48) + if hook['title'] == '': + return mw.returnJson(False, '名称不能为空!') + + hook['access_key'] = mw.md5(hook['title']) hook['count'] = 0 hook['addtime'] = int(time.time()) hook['uptime'] = 0 @@ -191,6 +194,39 @@ def delHook(): mw.writeFile(jsonFile, json.dumps(newdata)) return mw.returnJson(True, '删除成功!') + +def contentReplace(content): + service_path = mw.getServerDir() + content = content.replace('{$ROOT_PATH}', mw.getFatherDir()) + return content + + +def configTpl(): + path = getPluginDir() + '/tpl' + pathFile = os.listdir(path) + tmp = [] + for one in pathFile: + file = path + '/' + one + tmp.append(file) + return mw.getJson(tmp) + +def readConfigTpl(): + args = getArgs() + data = checkArgs(args, ['file', 'title']) + if not data[0]: + return data[1] + + if args['title'] == '': + return mw.returnJson(False, '名称不能为空!') + + content = mw.readFile(args['file']) + content = contentReplace(content) + + content = content.replace('{$REPO}', args['title']) + content = content.replace('{$REPO_NAME}', mw.md5(args['title'])) + + return mw.returnJson(True, 'ok', content) + if __name__ == "__main__": func = sys.argv[1] if func == 'status': @@ -205,5 +241,9 @@ if __name__ == "__main__": print(delHook()) elif func == 'get_log': print(getLog()) + elif func == 'config_tpl': + print(configTpl()) + elif func == 'read_config_tpl': + print(readConfigTpl()) else: print('error') diff --git a/plugins/webhook/js/webhook.js b/plugins/webhook/js/webhook.js index 231219989..97daf5854 100755 --- a/plugins/webhook/js/webhook.js +++ b/plugins/webhook/js/webhook.js @@ -26,7 +26,6 @@ function whPost(method, args,callback){ },'json'); } - function whPostNoMessage(method, args,callback){ var req_data = {}; @@ -79,29 +78,43 @@ function whPostCallbak(method, version, args,callback){ },'json'); } +function getFileName(file){ + var list = file.split('/'); + var f = list[list.length-1]; + return f; +} + var whEditor = null; //添加 function addHook(){ layer.open({ type: 1, - area: '600px', + area: '650px', title: '添加Hook', - closeBtn: 1, + closeBtn: 2, shift: 5, shadeClose: false, btn:['提交','关闭'], content: "
\
\ - 名称\ -
\ + 名称\ +
\
\
\ - 执行脚本\ -
\ - \ + 执行脚本\ +
\ + \ +
\ +
\ +
\ + 模板选择\ +
\ + \ +
\
\ -
\
", success:function(){ @@ -121,6 +134,51 @@ function addHook(){ $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); whEditor.focus(); + + + whPostNoMessage('config_tpl','', function(data){ + var rdata = $.parseJSON(data.data); + for (var i = 0; i < rdata.length; i++) { + $('#hook_tpl').append(''); + } + + $('#hook_tpl').change(function(){ + var selected = $(this).val(); + if (selected == '0') { + return; + } + + var title = $('#hook_title').val(); + var loadT = layer.msg('配置模版获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + whPostNoMessage('read_config_tpl', {file:selected,title:title}, function(data){ + layer.close(loadT); + var rdata = $.parseJSON(data.data); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:0,time:2000,shade: [5, '#000']}); + return; + } + + $("#hook_shell").empty().text(rdata.data); + $(".CodeMirror").remove(); + whEditor = CodeMirror.fromTextArea(document.getElementById("hook_shell"), { + extraKeys: { + "Ctrl-Space": "autocomplete", + "Ctrl-F": "findPersistent", + "Ctrl-H": "replaceAll", + "Ctrl-S": function() {} + }, + lineNumbers: true, + matchBrackets:true, + mode:"sh", + }); + + $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); + whEditor.focus(); + + }); + }); + }); + }, yes:function(indexs){ var loadT = layer.msg("提交中...",{icon:16,time:0}); diff --git a/plugins/webhook/tpl/git.tpl b/plugins/webhook/tpl/git.tpl new file mode 100644 index 000000000..40d8f937b --- /dev/null +++ b/plugins/webhook/tpl/git.tpl @@ -0,0 +1,21 @@ +echo "" > {$ROOT_PATH}/server/webhook/scripts/{$REPO_NAME}.log + +export HOME=/tmp +date "+%Y-%m-%d %H:%M:%S" + +git config --global credential.helper store +git config --global pull.rebase false + + +if [ -d {$ROOT_PATH}/gitcode/{$REPO} ];then + cd {$ROOT_PATH}/gitcode/{$REPO} && sudo git pull +else + git clone http://0.0.0.0:6660/xx/{$REPO} +fi + + +rsync -vauP '--exclude=.*' {$ROOT_PATH}/gitcode/{$REPO}/ {$ROOT_PATH}/wwwroot/{$REPO} +chown -R www:www {$ROOT_PATH}/wwwroot/{$REPO} + + + From 64883aa424941ad4eb4a075dec6413aee3b3eb9b Mon Sep 17 00:00:00 2001 From: dami Date: Sun, 18 May 2025 10:20:03 +0800 Subject: [PATCH 4/7] update --- plugins/webhook/index.py | 20 ++++++++++++++++++++ plugins/webhook/js/webhook.js | 16 ++++++++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/plugins/webhook/index.py b/plugins/webhook/index.py index 03cd23ca4..8a5cf2fb4 100755 --- a/plugins/webhook/index.py +++ b/plugins/webhook/index.py @@ -114,6 +114,26 @@ def addHook(): mw.writeFile(shellFile, args['shell']) return mw.returnJson(True, '添加成功!') +def addHookShell(args): + if args['title'] == '': + return mw.returnJson(False, '名称不能为空!') + + hook = {} + hook['title'] = args['title'] + hook['access_key'] = mw.md5(hook['title']) + 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() diff --git a/plugins/webhook/js/webhook.js b/plugins/webhook/js/webhook.js index 97daf5854..14e5d2801 100755 --- a/plugins/webhook/js/webhook.js +++ b/plugins/webhook/js/webhook.js @@ -154,7 +154,7 @@ function addHook(){ layer.close(loadT); var rdata = $.parseJSON(data.data); if (!rdata.status){ - layer.msg(rdata.msg,{icon:0,time:2000,shade: [5, '#000']}); + layer.msg(rdata.msg,{icon:16,time:2000,shade: [5, '#000']}); return; } @@ -186,7 +186,19 @@ function addHook(){ title: $("#hook_title").val(), shell: whEditor.getValue(), } - whPost('add_hook', data, function(rdata){ + // whPost('add_hook', data, function(rdata){ + // var rdata = $.parseJSON(rdata.data); + // if (!rdata.status){ + // layer.msg(rdata.msg,{icon:2}); + // return; + // } + // layer.close(indexs); + // showMsg(rdata.msg, function(){ + // getHookList(); + // }, {icon:1}, 2000); + // }); + + whPostCallbak('addHookShell', '', data, function(rdata){ var rdata = $.parseJSON(rdata.data); if (!rdata.status){ layer.msg(rdata.msg,{icon:2}); From 8ad3018fe72d38f7c1ccc4f8686b9a0c47ab1238 Mon Sep 17 00:00:00 2001 From: dami Date: Sun, 18 May 2025 10:22:33 +0800 Subject: [PATCH 5/7] Update git.tpl --- plugins/webhook/tpl/git.tpl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/webhook/tpl/git.tpl b/plugins/webhook/tpl/git.tpl index 40d8f937b..2b41e9d76 100644 --- a/plugins/webhook/tpl/git.tpl +++ b/plugins/webhook/tpl/git.tpl @@ -14,6 +14,10 @@ else fi +if [ ! -d {$ROOT_PATH}/wwwroot/{$REPO} ];then + mkdir -p {$ROOT_PATH}/wwwroot/{$REPO} +fi + rsync -vauP '--exclude=.*' {$ROOT_PATH}/gitcode/{$REPO}/ {$ROOT_PATH}/wwwroot/{$REPO} chown -R www:www {$ROOT_PATH}/wwwroot/{$REPO} From 9fdfa1c22f34e2559cf1b213b8b6951cc7ac9c55 Mon Sep 17 00:00:00 2001 From: dami Date: Sun, 18 May 2025 10:23:23 +0800 Subject: [PATCH 6/7] Update git.tpl --- plugins/webhook/tpl/git.tpl | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/webhook/tpl/git.tpl b/plugins/webhook/tpl/git.tpl index 2b41e9d76..e7f6776d0 100644 --- a/plugins/webhook/tpl/git.tpl +++ b/plugins/webhook/tpl/git.tpl @@ -7,13 +7,16 @@ git config --global credential.helper store git config --global pull.rebase false +if [ ! -d {$ROOT_PATH}/gitcode ];then + mkdir -p {$ROOT_PATH}/gitcode +fi + if [ -d {$ROOT_PATH}/gitcode/{$REPO} ];then cd {$ROOT_PATH}/gitcode/{$REPO} && sudo git pull else - git clone http://0.0.0.0:6660/xx/{$REPO} + cd {$ROOT_PATH}/gitcode && git clone http://0.0.0.0:6660/xx/{$REPO} fi - if [ ! -d {$ROOT_PATH}/wwwroot/{$REPO} ];then mkdir -p {$ROOT_PATH}/wwwroot/{$REPO} fi From c2f4171ee95bc5598927b09b442d1bcde5f42c9f Mon Sep 17 00:00:00 2001 From: dami Date: Sun, 18 May 2025 11:04:56 +0800 Subject: [PATCH 7/7] update --- plugins/webhook/index.html | 10 +++++----- plugins/webhook/index.py | 17 +++++++++++++++++ plugins/webhook/js/webhook.js | 31 +++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/plugins/webhook/index.html b/plugins/webhook/index.html index b50d38710..0de594878 100755 --- a/plugins/webhook/index.html +++ b/plugins/webhook/index.html @@ -14,11 +14,11 @@ 名称 - 添加时间 - 近期调用 - 调用次数 - 密钥 - 操作 + 添加时间 + 近期调用 + 调用次数 + 密钥 + 操作 diff --git a/plugins/webhook/index.py b/plugins/webhook/index.py index 8a5cf2fb4..9d92ee009 100755 --- a/plugins/webhook/index.py +++ b/plugins/webhook/index.py @@ -178,6 +178,21 @@ def runShellArgs(args): return mw.returnJson(True, '运行成功!') return mw.returnJson(False, '指定Hook不存在!') +def getRunShellCmd(): + args = getArgs() + check_arg = checkArgs(args, ['access_key']) + if not check_arg[0]: + return check_arg[1] + + script_dir = getServerDir() + "/scripts" + shellFile = script_dir + '/' + args['access_key'] + param = '' + if 'params' in args: + param = args['params'] + param = re.sub("\"", '', param) + cmd = "bash {} {}".format(shellFile, param) + return mw.returnJson(True, 'ok', cmd) + def runShell(): args = getArgs() @@ -257,6 +272,8 @@ if __name__ == "__main__": print(getList()) elif func == "run_shell": print(runShell()) + elif func == 'run_shell_cmd': + print(getRunShellCmd()) elif func == 'del_hook': print(delHook()) elif func == 'get_log': diff --git a/plugins/webhook/js/webhook.js b/plugins/webhook/js/webhook.js index 14e5d2801..72111a09f 100755 --- a/plugins/webhook/js/webhook.js +++ b/plugins/webhook/js/webhook.js @@ -227,6 +227,7 @@ function getHookList(){ +''+mlist[i].count+'' +'查看密钥' +'测试 | ' + +'命令 | ' +'编辑 | ' +'日志 | ' +'删除' @@ -316,6 +317,36 @@ function runHook(key){ },{icon:1},2000); }); } + + +function getRunHookCmd(key) { + whPost('run_shell_cmd', {"access_key":key}, function(rdata){ + var rdata = $.parseJSON(rdata.data); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:2}); + } + layer.open({ + title: "手动执行命令CMD", + area: ['600px', '180px'], + type:1, + closeBtn: 1, + shadeClose: false, + btn:["复制","取消"], + content: '
\ +
\ +
'+rdata.data+'
\ +
\ +
', + success:function(){ + copyText(rdata.data); + }, + yes:function(){ + copyText(rdata.data); + } + }); + }); +} + //删除 function deleteHook(key, title){ layer.confirm('删除Hook-['+ title +']',{