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 += ''+
+ '' + list[i]['name']+' | ' +
+ '' + list[i]['path']+' | ' +
+ '' + list[i]['comment']+' | ' +
+ '改密|删除 |
';
+ }
+
+ con += '';
+ con += '
';
+
+ $(".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 = '
';
- readme += '';
+ readme += '- 如需将其他服务器数据同步到本地服务器,请在接受配置中 "创建接受任务"
';
readme += '
';
$('.soft-man-con').html(readme);