From afb2a39f8c7650044689c255cd80df55cf1d9159 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Fri, 13 Sep 2024 20:54:22 +0800 Subject: [PATCH] update --- plugins/acme_pandominassl_apply/conf/acme.sql | 8 +- plugins/acme_pandominassl_apply/index.html | 6 +- plugins/acme_pandominassl_apply/index.py | 566 +++++++----------- plugins/acme_pandominassl_apply/install.sh | 3 +- plugins/acme_pandominassl_apply/js/common.js | 331 +++++++++- 5 files changed, 564 insertions(+), 350 deletions(-) diff --git a/plugins/acme_pandominassl_apply/conf/acme.sql b/plugins/acme_pandominassl_apply/conf/acme.sql index c2f40610b..73da8e17a 100644 --- a/plugins/acme_pandominassl_apply/conf/acme.sql +++ b/plugins/acme_pandominassl_apply/conf/acme.sql @@ -1,14 +1,16 @@ CREATE TABLE IF NOT EXISTS `dnsapi` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, + `name` TEXT, + `type` TEXT, `val` TEXT, - `mark` TEXT, + `remark` TEXT, `addtime` TEXT ); CREATE TABLE IF NOT EXISTS `email` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `addr` TEXT, - `mark` TEXT, + `remark` TEXT, `addtime` TEXT ); @@ -17,7 +19,7 @@ CREATE TABLE IF NOT EXISTS `domain` ( `domain` TEXT, `email` TEXT, `dnsapi_id` TEXT, - `mark` TEXT, + `remark` TEXT, `addtime` TEXT ); diff --git a/plugins/acme_pandominassl_apply/index.html b/plugins/acme_pandominassl_apply/index.html index 43f36c6a0..468a586b3 100755 --- a/plugins/acme_pandominassl_apply/index.html +++ b/plugins/acme_pandominassl_apply/index.html @@ -12,9 +12,9 @@

服务

-

DNSAPI

-

邮件地址

-

域名SSL

+

DNSAPI

+

邮件地址

+

域名SSL

HOOK脚本

日志

相关说明

diff --git a/plugins/acme_pandominassl_apply/index.py b/plugins/acme_pandominassl_apply/index.py index 3e4f3490c..a009ca89a 100755 --- a/plugins/acme_pandominassl_apply/index.py +++ b/plugins/acme_pandominassl_apply/index.py @@ -116,6 +116,31 @@ def contentReplace(content): return content +def pSqliteDb(dbname='dnsapi'): + file = getServerDir() + '/acme.db' + name = 'acme' + + import_sql = mw.readFile(getPluginDir() + '/conf/acme.sql') + md5_sql = mw.md5(import_sql) + + import_sign = False + save_md5_file = getServerDir() + '/acme.md5' + if os.path.exists(save_md5_file): + save_md5_sql = mw.readFile(save_md5_file) + if save_md5_sql != md5_sql: + import_sign = True + mw.writeFile(save_md5_file, md5_sql) + else: + mw.writeFile(save_md5_file, md5_sql) + + if not os.path.exists(file) or import_sql: + conn = mw.M(dbname).dbPos(getServerDir(), name) + csql_list = import_sql.split(';') + for index in range(len(csql_list)): + conn.execute(csql_list[index], ()) + + conn = mw.M(dbname).dbPos(getServerDir(), name) + return conn def initDreplace(): @@ -134,22 +159,6 @@ def initDreplace(): mw.writeFile(file_bin, content) mw.execShell('chmod +x ' + file_bin) - # log - dataLog = getServerDir() + '/data' - if not os.path.exists(dataLog): - mw.execShell('chmod +x ' + file_bin) - - # config replace - dst_conf = getServerDir() + '/redis.conf' - dst_conf_init = getServerDir() + '/init.pl' - if not os.path.exists(dst_conf_init): - conf_content = mw.readFile(getConfTpl()) - conf_content = conf_content.replace('{$SERVER_PATH}', service_path) - conf_content = conf_content.replace( - '{$REDIS_PASS}', mw.getRandomString(10)) - - mw.writeFile(dst_conf, conf_content) - mw.writeFile(dst_conf_init, 'ok') # systemd systemDir = mw.systemdCfgDir() @@ -165,7 +174,7 @@ def initDreplace(): return file_bin -def redisOp(method): +def apaOp(method): file = initDreplace() current_os = mw.getOs() @@ -188,338 +197,219 @@ def redisOp(method): def start(): - return redisOp('start') + return apaOp('start') def stop(): - return redisOp('stop') + return apaOp('stop') def restart(): - status = redisOp('restart') - - log_file = runLog() - mw.execShell("echo '' > " + log_file) + status = apaOp('restart') return status def reload(): - return redisOp('reload') - - -def getPort(): - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - - rep = r"^(" + r'port' + r')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if tmp: - return tmp.groups()[1] - - return '6379' - - -def getRedisCmd(): - requirepass = "" - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - rep = r"^(requirepass" + r')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if tmp: - requirepass = tmp.groups()[1] - - default_ip = '127.0.0.1' - port = getPort() - # findDebian = mw.execShell('cat /etc/issue |grep Debian') - # if findDebian[0] != '': - # default_ip = mw.getLocalIp() - cmd = getServerDir() + "/bin/redis-cli -h " + \ - default_ip + ' -p ' + port + " " - - if requirepass != "": - cmd = getServerDir() + '/bin/redis-cli -h ' + default_ip + \ - ' -p ' + port + ' -a "' + requirepass + '" ' - - return cmd - -def runInfo(): - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - - cmd = getRedisCmd() - cmd = cmd + 'info' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - res = [ - 'tcp_port', - 'uptime_in_days', # 已运行天数 - 'connected_clients', # 连接的客户端数量 - 'used_memory', # Redis已分配的内存总量 - 'used_memory_rss', # Redis占用的系统内存总量 - 'used_memory_peak', # Redis所用内存的高峰值 - 'mem_fragmentation_ratio', # 内存碎片比率 - 'total_connections_received', # 运行以来连接过的客户端的总数量 - 'total_commands_processed', # 运行以来执行过的命令的总数量 - 'instantaneous_ops_per_sec', # 服务器每秒钟执行的命令数量 - 'keyspace_hits', # 查找数据库键成功的次数 - 'keyspace_misses', # 查找数据库键失败的次数 - 'latest_fork_usec' # 最近一次 fork() 操作耗费的毫秒数 - ] - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - return mw.getJson(result) - -def infoReplication(): - # 复制信息 - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'info replication' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - res = [ - #slave - 'role',#角色 - 'master_host', # 连接主库HOST - 'master_port', # 连接主库PORT - 'master_link_status', # 连接主库状态 - 'master_last_io_seconds_ago', # 上次同步时间 - 'master_sync_in_progress', # 正在同步中 - 'slave_read_repl_offset', # 从库读取复制位置 - 'slave_repl_offset', # 从库复制位置 - 'slave_priority', # 从库同步优先级 - 'slave_read_only', # 从库是否仅读 - 'replica_announced', # 已复制副本 - 'connected_slaves', # 连接从库数量 - 'master_failover_state', # 主库故障状态 - 'master_replid', # 主库复制ID - 'master_repl_offset', # 主库复制位置 - 'second_repl_offset', # 主库复制位置时间 - 'repl_backlog_active', # 复制状态 - 'repl_backlog_size', # 复制大小 - 'repl_backlog_first_byte_offset', # 第一个字节偏移量 - 'repl_backlog_histlen', # backlog中数据的长度 - ] - - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - - if 'role' in result and result['role'] == 'master': - connected_slaves = int(result['connected_slaves']) - slave_l = [] - for x in range(connected_slaves): - slave_l.append('slave'+str(x)) - - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in slave_l: - continue - result[t[0]] = t[1] - - return mw.getJson(result) - - -def clusterInfo(): - #集群信息 - # https://redis.io/commands/cluster-info/ - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'cluster info' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - - res = [ - 'cluster_state',#状态 - 'cluster_slots_assigned', # 被分配的槽 - 'cluster_slots_ok', # 被分配的槽状态 - 'cluster_slots_pfail', # 连接主库状态 - 'cluster_slots_fail', # 失败的槽 - 'cluster_known_nodes', # 知道的节点 - 'cluster_size', # 大小 - 'cluster_current_epoch', # - 'cluster_my_epoch', # - 'cluster_stats_messages_sent', # 发送 - 'cluster_stats_messages_received', # 接受 - 'total_cluster_links_buffer_limit_exceeded', # - ] - - data = data.split("\n") - result = {} - for d in data: - if len(d) < 3: - continue - t = d.strip().split(':') - if not t[0] in res: - continue - result[t[0]] = t[1] - - return mw.getJson(result) - -def clusterNodes(): - s = status() - if s == 'stop': - return mw.returnJson(False, '未启动') - - cmd = getRedisCmd() - cmd = cmd + 'cluster nodes' - - # print(cmd) - data = mw.execShell(cmd)[0] - # print(data) - - data = data.strip().split("\n") - return mw.getJson(data) + return apaOp('reload') -def initdStatus(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" - if current_os.startswith('freebsd'): - initd_bin = getInitDFile() - if os.path.exists(initd_bin): - return 'ok' +def dnsapiAdd(): + args = getArgs() + data = checkArgs(args,['name', 'remark']) + if not data[0]: + return data[1] - shell_cmd = 'systemctl status ' + \ - getPluginName() + ' | grep loaded | grep "enabled;"' - data = mw.execShell(shell_cmd) - if data[0] == '': - return 'fail' - return 'ok' + name = args['name'].strip() + remark = args['remark'].strip() + conn = pSqliteDb('dnsapi') -def initdInstall(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" + addTime = time.strftime('%Y-%m-%d %X', time.localtime()) + conn.add('name,remark,addtime', (name, remark, addTime)) + return mw.returnJson(True, '添加成功!') - # freebsd initd install - if current_os.startswith('freebsd'): - import shutil - source_bin = initDreplace() - initd_bin = getInitDFile() - shutil.copyfile(source_bin, initd_bin) - mw.execShell('chmod +x ' + initd_bin) - mw.execShell('sysrc ' + getPluginName() + '_enable="YES"') - return 'ok' +def dnsapiDel(): + args = getArgs() + data = checkArgs(args, ['id', 'name']) + if not data[0]: + return data[1] - mw.execShell('systemctl enable ' + getPluginName()) - return 'ok' + conn = pSqliteDb('dnsapi') + try: + sid = args['id'] + name = args['name'] + conn.where("id=?", (sid,)).delete() + return mw.returnJson(True, '删除成功!') + except Exception as ex: + return mw.returnJson(False, '删除失败!' + str(ex)) +def dnsapiList(): + args = getArgs() + page = 1 + page_size = 10 + search = '' + data = {} + if 'page' in args: + page = int(args['page']) + + if 'page_size' in args: + page_size = int(args['page_size']) + + if 'search' in args: + search = args['search'] + + conn = pSqliteDb('dnsapi') + limit = str((page - 1) * page_size) + ',' + str(page_size) + condition = '' + if not search == '': + condition = "name like '%" + search + "%'" + field = 'id,name,val,remark,addtime' + clist = conn.where(condition, ()).field( + field).limit(limit).order('id desc').select() + + count = conn.where(condition, ()).count() + _page = {} + _page['count'] = count + _page['p'] = page + _page['row'] = page_size + _page['tojs'] = 'dbList' + data['page'] = mw.getPage(_page) + data['data'] = clist -def initdUinstall(): - current_os = mw.getOs() - if current_os == 'darwin': - return "Apple Computer does not support" + return mw.getJson(data) - if current_os.startswith('freebsd'): - initd_bin = getInitDFile() - os.remove(initd_bin) - mw.execShell('sysrc ' + getPluginName() + '_enable="NO"') - return 'ok' +def emailList(): + args = getArgs() + page = 1 + page_size = 10 + search = '' + data = {} + if 'page' in args: + page = int(args['page']) + + if 'page_size' in args: + page_size = int(args['page_size']) + + if 'search' in args: + search = args['search'] + + conn = pSqliteDb('email') + limit = str((page - 1) * page_size) + ',' + str(page_size) + condition = '' + if not search == '': + condition = "addr like '%" + search + "%'" + field = 'id,addr,remark,addtime' + clist = conn.where(condition, ()).field( + field).limit(limit).order('id desc').select() + + count = conn.where(condition, ()).count() + _page = {} + _page['count'] = count + _page['p'] = page + _page['row'] = page_size + _page['tojs'] = 'dbList' + data['page'] = mw.getPage(_page) + data['data'] = clist - mw.execShell('systemctl disable ' + getPluginName()) - return 'ok' + return mw.getJson(data) +def emailAdd(): + args = getArgs() + data = checkArgs(args,['addr', 'remark']) + if not data[0]: + return data[1] -def runLog(): - return getServerDir() + '/data/redis.log' + addr = args['addr'].strip() + remark = args['remark'].strip() + conn = pSqliteDb('email') -def getRedisConfInfo(): - conf = getServerDir() + '/redis.conf' - - gets = [ - {'name': 'bind', 'type': 2, 'ps': '绑定IP(修改绑定IP可能会存在安全隐患)','must_show':1}, - {'name': 'port', 'type': 2, 'ps': '绑定端口','must_show':1}, - {'name': 'timeout', 'type': 2, 'ps': '空闲链接超时时间,0表示不断开','must_show':1}, - {'name': 'maxclients', 'type': 2, 'ps': '最大连接数','must_show':1}, - {'name': 'databases', 'type': 2, 'ps': '数据库数量','must_show':1}, - {'name': 'requirepass', 'type': 2, 'ps': 'redis密码,留空代表没有设置密码','must_show':1}, - {'name': 'maxmemory', 'type': 2, 'ps': 'MB,最大使用内存,0表示不限制','must_show':1}, - {'name': 'slaveof', 'type': 2, 'ps': '同步主库地址','must_show':0}, - {'name': 'masterauth', 'type': 2, 'ps': '同步主库密码', 'must_show':0} - ] - content = mw.readFile(conf) - - result = [] - for g in gets: - rep = r"^(" + g['name'] + r')\s*([.0-9A-Za-z_& ~]+)' - tmp = re.search(rep, content, re.M) - if not tmp: - if g['must_show'] == 0: - continue - - g['value'] = '' - result.append(g) - continue - g['value'] = tmp.groups()[1] - if g['name'] == 'maxmemory': - g['value'] = g['value'].strip("mb") - result.append(g) - - return result - - -def getRedisConf(): - data = getRedisConfInfo() - return mw.getJson(data) + addTime = time.strftime('%Y-%m-%d %X', time.localtime()) + conn.add('addr,remark,addtime', (addr, remark, addTime)) + return mw.returnJson(True, '添加成功!') + +def emailDel(): + args = getArgs() + data = checkArgs(args, ['id', 'name']) + if not data[0]: + return data[1] + + conn = pSqliteDb('email') + try: + sid = args['id'] + name = args['name'] + conn.where("id=?", (sid,)).delete() + return mw.returnJson(True, '删除成功!') + except Exception as ex: + return mw.returnJson(False, '删除失败!' + str(ex)) + +def domainAdd(): + args = getArgs() + data = checkArgs(args,['domain', 'remark']) + if not data[0]: + return data[1] + + domain = args['domain'].strip() + remark = args['remark'].strip() + + conn = pSqliteDb('domain') + + addTime = time.strftime('%Y-%m-%d %X', time.localtime()) + conn.add('domain,remark,addtime', (domain, remark, addTime)) + return mw.returnJson(True, '添加成功!') + +def domainDel(): + args = getArgs() + data = checkArgs(args, ['id', 'name']) + if not data[0]: + return data[1] + conn = pSqliteDb('domain') + try: + sid = args['id'] + name = args['name'] + conn.where("id=?", (sid,)).delete() + return mw.returnJson(True, '删除成功!') + except Exception as ex: + return mw.returnJson(False, '删除失败!' + str(ex)) -def submitRedisConf(): - gets = ['bind', 'port', 'timeout', 'maxclients', - 'databases', 'requirepass', 'maxmemory','slaveof','masterauth'] +def domainList(): args = getArgs() - conf = getServerDir() + '/redis.conf' - content = mw.readFile(conf) - for g in gets: - if g in args: - rep = g + r'\s*([.0-9A-Za-z_& ~]+)' - val = g + ' ' + args[g] - - if g == 'maxmemory': - val = g + ' ' + args[g] + "mb" - - if g == 'requirepass' and args[g] == '': - content = re.sub('requirepass', '#requirepass', content) - if g == 'requirepass' and args[g] != '': - content = re.sub('#requirepass', 'requirepass', content) - content = re.sub(rep, val, content) - - if g != 'requirepass': - content = re.sub(rep, val, content) - mw.writeFile(conf, content) - reload() - return mw.returnJson(True, '设置成功') + page = 1 + page_size = 10 + search = '' + data = {} + if 'page' in args: + page = int(args['page']) + + if 'page_size' in args: + page_size = int(args['page_size']) + + if 'search' in args: + search = args['search'] + + conn = pSqliteDb('domain') + limit = str((page - 1) * page_size) + ',' + str(page_size) + condition = '' + if not search == '': + condition = "domain like '%" + search + "%'" + field = 'id,domain,email,dnsapi_id,remark,addtime' + clist = conn.where(condition, ()).field( + field).limit(limit).order('id desc').select() + + count = conn.where(condition, ()).count() + _page = {} + _page['count'] = count + _page['p'] = page + _page['row'] = page_size + _page['tojs'] = 'dbList' + data['page'] = mw.getPage(_page) + data['data'] = clist + + return mw.getJson(data) + +def runLog(): + return getServerDir() + '/data/redis.log' if __name__ == "__main__": func = sys.argv[1] @@ -533,31 +423,33 @@ if __name__ == "__main__": print(restart()) elif func == 'reload': print(reload()) - elif func == 'initd_status': - print(initdStatus()) - elif func == 'initd_install': - print(initdInstall()) - elif func == 'initd_uninstall': - print(initdUinstall()) elif func == 'run_info': print(runInfo()) - elif func == 'info_replication': - print(infoReplication()) - elif func == 'cluster_info': - print(clusterInfo()) - elif func == 'cluster_nodes': - print(clusterNodes()) elif func == 'conf': print(getConf()) elif func == 'run_log': print(runLog()) - elif func == 'get_redis_conf': - print(getRedisConf()) - elif func == 'submit_redis_conf': - print(submitRedisConf()) elif func == 'config_tpl': print(configTpl()) elif func == 'read_config_tpl': print(readConfigTpl()) + elif func == 'dnsapi_list': + print(dnsapiList()) + elif func == 'dnsapi_add': + print(dnsapiAdd()) + elif func == 'dnsapi_del': + print(dnsapiDel()) + elif func == 'email_list': + print(emailList()) + elif func == 'email_add': + print(emailAdd()) + elif func == 'email_del': + print(emailDel()) + elif func == 'domain_list': + print(domainList()) + elif func == 'domain_add': + print(domainAdd()) + elif func == 'domain_del': + print(domainDel()) else: print('error') diff --git a/plugins/acme_pandominassl_apply/install.sh b/plugins/acme_pandominassl_apply/install.sh index cc61838ec..9f5272a00 100755 --- a/plugins/acme_pandominassl_apply/install.sh +++ b/plugins/acme_pandominassl_apply/install.sh @@ -16,12 +16,11 @@ Install_App() mkdir -p $serverPath/source mkdir -p $serverPath/acme_pandominassl_apply echo "${VERSION}" > $serverPath/acme_pandominassl_apply/version.pl - echo '安装完成' + echo '安装[ACME泛域名SSL]完成' } Uninstall_App() { - echo "卸载[ACME泛域名SSL]成功" } diff --git a/plugins/acme_pandominassl_apply/js/common.js b/plugins/acme_pandominassl_apply/js/common.js index cd5a60a67..e59361c25 100755 --- a/plugins/acme_pandominassl_apply/js/common.js +++ b/plugins/acme_pandominassl_apply/js/common.js @@ -1,10 +1,10 @@ -function apaPost(method, version, args,callback){ +function apaPost(method, args,callback){ var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 }); var req_data = {}; req_data['name'] = 'acme_pandominassl_apply'; req_data['func'] = method; - req_data['version'] = version; + req_data['version'] = $('.plugin_version').attr('version'); if (typeof(args) == 'string'){ req_data['args'] = JSON.stringify(toArrayObject(args)); @@ -53,13 +53,334 @@ function apaPostCallbak(method, version, args,callback){ },'json'); } - function apaReadme(){ - var readme = '
    '; readme += '
  • ACME泛域名SSL申请/管理/HOOK
  • '; + readme += '
  • 通过DNS验证获取SSL证书!
  • '; + readme += '
  • HOOK: ssl发生变动时调用!
  • '; readme += '
'; - $('.soft-man-con').html(readme); } + +function emailDel(id, name){ + safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){ + var data='id='+id+'&name='+name; + apaPost('email_del', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + emailList(); + },{icon: rdata.status ? 1 : 2}, 600); + }); + }); +} + +function emailAdd(type){ + layer.open({ + type: 1, + area: '500px', + title: '添加邮件地址', + closeBtn: 1, + shift: 5, + shadeClose: true, + btn:["提交","关闭"], + content: "
\ +
\ + 邮件地址\ +
\ +
\ +
\ + 备注\ +
\ +
\ +
", + success:function(){ + $("input[name='addr']").keyup(function(){ + var v = $(this).val(); + $("input[name='remark']").val(v); + }); + }, + yes:function(index) { + var data = $("#email_add").serialize(); + data = decodeURIComponent(data); + // data = toArrayObject(data); + apaPost('email_add', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + if (rdata.status){ + layer.close(index); + emailList(); + } + },{icon: rdata.status ? 1 : 2}, 2000); + }); + } + }); +} + + +function emailList(page, search){ + var _data = {}; + if (typeof(page) =='undefined'){ + var page = 1; + } + + _data['page'] = page; + _data['page_size'] = 10; + if(typeof(search) != 'undefined'){ + _data['search'] = search; + } + + apaPost('email_list', _data, function(data){ + var rdata = $.parseJSON(data.data); + var list = ''; + for(i in rdata.data){ + list += ''; + list +=''; + list += '' + rdata.data[i]['addr'] +''; + list += '' + rdata.data[i]['remark'] +''; + list += ''; + list += '删除' + + ''; + list += ''; + } + + var con = '
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + '+ list +'\ +
邮件地址备注操作
\ +
\ +
\ +
\ +
'; + + $(".soft-man-con").html(con); + $('.dataTables_paginate').html(rdata.page); + + readerTableChecked(); + }); +} + + +function dnsapiDel(id, name){ + safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){ + var data='id='+id+'&name='+name; + apaPost('email_del', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + emailList(); + },{icon: rdata.status ? 1 : 2}, 600); + }); + }); +} + +function dnsapiAdd(type){ + layer.open({ + type: 1, + area: '500px', + title: '添加DNSAPI', + closeBtn: 1, + shift: 5, + shadeClose: true, + btn:["提交","关闭"], + content: "
\ +
\ + 名称\ +
\ +
\ +
\ + 备注\ +
\ +
\ +
", + success:function(){ + $("input[name='name']").keyup(function(){ + var v = $(this).val(); + $("input[name='remark']").val(v); + }); + }, + yes:function(index) { + var data = $("#dnsapi_add").serialize(); + data = decodeURIComponent(data); + // data = toArrayObject(data); + apaPost('dnsapi_add', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + if (rdata.status){ + layer.close(index); + dnsapiList(); + } + },{icon: rdata.status ? 1 : 2}, 2000); + }); + } + }); +} + + +function dnsapiList(page, search){ + var _data = {}; + if (typeof(page) =='undefined'){ + var page = 1; + } + + _data['page'] = page; + _data['page_size'] = 10; + if(typeof(search) != 'undefined'){ + _data['search'] = search; + } + + apaPost('dnsapi_list', _data, function(data){ + var rdata = $.parseJSON(data.data); + var list = ''; + for(i in rdata.data){ + list += ''; + list +=''; + list += '' + rdata.data[i]['name'] +''; + list += '' + rdata.data[i]['remark'] +''; + list += ''; + list += '删除' + + ''; + list += ''; + } + + var con = '
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + '+ list +'\ +
名称备注操作
\ +
\ +
\ +
\ +
'; + + $(".soft-man-con").html(con); + $('.dataTables_paginate').html(rdata.page); + + readerTableChecked(); + }); +} + + +function domainDel(id, name){ + safeMessage('删除['+name+']','您真的要删除['+name+']吗?',function(){ + var data='id='+id+'&name='+name; + apaPost('domain_del', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + domainList(); + },{icon: rdata.status ? 1 : 2}, 600); + }); + }); +} + +function domainAdd(type){ + layer.open({ + type: 1, + area: '500px', + title: '添加顶级域名', + closeBtn: 1, + shift: 5, + shadeClose: true, + btn:["提交","关闭"], + content: "
\ +
\ + 域名\ +
\ +
\ +
\ + 备注\ +
\ +
\ +
", + success:function(){ + $("input[name='domain']").keyup(function(){ + var v = $(this).val(); + $("input[name='remark']").val(v); + }); + }, + yes:function(index) { + var data = $("#domain_add").serialize(); + data = decodeURIComponent(data); + apaPost('domain_add', data, function(data){ + var rdata = $.parseJSON(data.data); + showMsg(rdata.msg,function(){ + if (rdata.status){ + layer.close(index); + domainList(); + } + },{icon: rdata.status ? 1 : 2}, 2000); + }); + } + }); +} + +function domainList(page, search){ + var _data = {}; + if (typeof(page) =='undefined'){ + var page = 1; + } + + _data['page'] = page; + _data['page_size'] = 10; + if(typeof(search) != 'undefined'){ + _data['search'] = search; + } + + apaPost('domain_list', _data, function(data){ + var rdata = $.parseJSON(data.data); + // console.log(rdata); + var list = ''; + for(i in rdata.data){ + list += ''; + list +=''; + list += '' + rdata.data[i]['domain'] +''; + list += '' + rdata.data[i]['remark'] +''; + list += ''; + list += '删除' + + ''; + list += ''; + } + + var con = '
\ + \ + \ + \ + \ +
\ +
\ + \ + \ + \ + \ + \ + '+ list +'\ +
域名备注操作
\ +
\ +
\ +
\ +
'; + + $(".soft-man-con").html(con); + $('.dataTables_paginate').html(rdata.page); + + readerTableChecked(); + }); +}