From b7d614644b37f40f20733fea9e3cea267b3c8271 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Wed, 6 Mar 2019 18:47:43 +0800 Subject: [PATCH] =?UTF-8?q?rsyncd=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/rsyncd/index.html | 2 +- plugins/rsyncd/index.py | 103 ++++++++++++++++++++++++++- plugins/rsyncd/js/rsyncd.js | 134 +++++++++++++++++++++++++++++++++++- 3 files changed, 236 insertions(+), 3 deletions(-) diff --git a/plugins/rsyncd/index.html b/plugins/rsyncd/index.html index 413109223..9f478665b 100755 --- a/plugins/rsyncd/index.html +++ b/plugins/rsyncd/index.html @@ -6,7 +6,7 @@

配置修改

接收配置

日志

- +

说明

diff --git a/plugins/rsyncd/index.py b/plugins/rsyncd/index.py index 84cd13b48..9d1f342a0 100755 --- a/plugins/rsyncd/index.py +++ b/plugins/rsyncd/index.py @@ -82,7 +82,6 @@ def getLog(): def initConf(): - import re conf_path = appConf() conf = public.readFile(conf_path) conf = re.sub('#*(.*)', '', conf) @@ -105,6 +104,7 @@ def start(): def stop(): + initConf() if public.isAppleSystem(): return "Apple Computer does not support" data = public.execShell('systemctl stop rsyncd.service') @@ -114,6 +114,7 @@ def stop(): def restart(): + initConf() if public.isAppleSystem(): return "Apple Computer does not support" data = public.execShell('systemctl restart rsyncd.service') @@ -123,6 +124,7 @@ def restart(): def reload(): + initConf() if public.isAppleSystem(): return "Apple Computer does not support" @@ -161,6 +163,99 @@ def initdUinstall(): return 'ok' +def getRecListData(): + path = appConf() + content = public.readFile(path) + + flist = re.findall("\[(.*)\]", content) + flist_len = len(flist) + ret_list = [] + for i in range(flist_len): + tmp = {} + tmp['name'] = flist[i] + n = i + 1 + reg = '' + if n == flist_len: + reg = '\[' + flist[i] + '\](.*)\[?' + else: + reg = '\[' + flist[i] + '\](.*)\[' + flist[n] + '\]' + + t1 = re.search(reg, content, re.S) + if t1: + args = t1.groups()[0] + # print 'args start', args, 'args_end' + t2 = re.findall('\s*(.*)\s*=\s*(.*)', args, re.M) + for i in range(len(t2)): + tmp[t2[i][0].strip()] = t2[i][1] + ret_list.append(tmp) + return ret_list + + +def getRecList(): + ret_list = getRecListData() + return public.returnJson(True, 'ok', ret_list) + + +def addRec(): + args = getArgs() + + data = checkArgs(args, ['name', 'path', 'ps']) + if not data[0]: + return data[1] + + args_name = args['name'] + args_path = args['path'] + args_ps = args['ps'] + + path = appConf() + content = public.readFile(path) + + con = "\n\n" + '[' + args_name + ']' + "\n" + con += 'path = ' + args_path + "\n" + con += 'comment = ' + args_ps + "\n" + con += 'read only = false' + + content = content + con + public.writeFile(path, content) + return public.returnJson(True, '添加成功') + + +def delRec(): + args = getArgs() + + data = checkArgs(args, ['name']) + if not data[0]: + return data[1] + + args_name = args['name'] + + path = appConf() + content = public.readFile(path) + + ret_list = getRecListData() + ret_list_len = len(ret_list) + is_end = False + next_name = '' + for x in range(ret_list_len): + tmp = ret_list[x] + if tmp['name'] == args_name: + if x == ret_list_len: + is_end = True + else: + next_name = ret_list[x + 1]['name'] + + reg = '' + if is_end: + reg = '\[' + args_name + '\]\s*(.*)' + else: + reg = '\[' + args_name + '\]\s*(.*)\s*\[' + next_name + '\]' + + conre = re.search(reg, content, re.S) + content = content.replace("[" + args_name + "]\n" + conre.groups()[0], '') + public.writeFile(path, content) + return public.returnJson(True, '删除成功!') + + # rsyncdReceive if __name__ == "__main__": func = sys.argv[1] @@ -184,5 +279,11 @@ if __name__ == "__main__": print appConf() elif func == 'run_log': print getLog() + elif func == 'rec_list': + print getRecList() + elif func == 'add_rec': + print addRec() + elif func == 'del_rec': + print delRec() else: print 'error' diff --git a/plugins/rsyncd/js/rsyncd.js b/plugins/rsyncd/js/rsyncd.js index e8e9b34e5..e6895ea99 100755 --- a/plugins/rsyncd/js/rsyncd.js +++ b/plugins/rsyncd/js/rsyncd.js @@ -1,8 +1,140 @@ +function str2Obj(str){ + var data = {}; + kv = str.split('&'); + for(i in kv){ + v = kv[i].split('='); + data[v[0]] = v[1]; + } + return data; +} + +function rsPost(method,args,callback, title){ + + var _args = null; + if (typeof(args) == 'string'){ + _args = JSON.stringify(str2Obj(args)); + } else { + _args = JSON.stringify(args); + } + + var _title = '正在获取...'; + if (typeof(title) != 'undefined'){ + _title = title; + } + + var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 }); + $.post('/plugins/run', {name:'rsyncd', func:method, args:_args}, function(data) { + layer.close(loadT); + if (!data.status){ + layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + if(typeof(callback) == 'function'){ + callback(data); + } + },'json'); +} + + +function rsyncdReceive(){ + rsPost('rec_list', '', function(data){ + var rdata = $.parseJSON(data.data); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']}); + return; + } + console.log(rdata); + var list = rdata.data; + var con = ''; + con += '
'; + con += ''; + con += ''; + con += ''; + con += ''; + con += ''; + con += ''; + + con += ''; + + for (var i = 0; i < list.length; i++) { + con += ''+ + '' + + '' + + '' + + ''; + } + + con += ''; + con += '
服务名路径备注操作(添加)
' + list[i]['name']+'' + list[i]['path']+'' + list[i]['comment']+'改密|删除
'; + + $(".soft-man-con").html(con); + }); +} + +function addReceive(){ + var loadOpen = layer.open({ + type: 1, + title: '创建接收', + area: '400px', + content:"
\ +
\ + 项目名\ +
\ + \ +
\ +
\ +
\ + 同步到\ +
\ + \ + \ +
\ +
\ +
\ + 备注\ +
\ + \ +
\ +
\ +
\ + \ +
\ +
" + }); + + $('#add_ok').click(function(){ + _data = {}; + _data['name'] = $('#name').val(); + _data['path'] = $('#inputPath').val(); + _data['ps'] = $('#ps').val(); + var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); + rsPost('add_rec', _data, function(data){ + var rdata = $.parseJSON(data.data); + layer.close(loadOpen); + layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']}); + setTimeout(function(){rsyncdReceive();},2000); + }); + }); +} + + +function delReceive(name){ + safeMessage('删除['+name+']', '您真的要删除['+name+']吗?', function(){ + var _data = {}; + _data['name'] = name; + rsPost('del_rec', _data, function(data){ + var rdata = $.parseJSON(data.data); + layer.msg(rdata.msg,{icon:rdata.status?1:2,time:2000,shade: [0.3, '#000']}); + setTimeout(function(){rsyncdReceive();},2000); + }); + }); +} function rsRead(){ var readme = ''; $('.soft-man-con').html(readme);