mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-18 23:45:52 +08:00
update
This commit is contained in:
+352
-268
@@ -2037,16 +2037,222 @@ function renewSSL(type,id,siteName){
|
||||
}
|
||||
|
||||
function fileCheck(){
|
||||
|
||||
$('#dnsapi_option').css('display','none');
|
||||
}
|
||||
|
||||
function dnsCheck(){
|
||||
$('#dnsapi_option').css('display','block');
|
||||
}
|
||||
|
||||
function renderDnsapiHtml(data){
|
||||
console.log(data);
|
||||
layer.open({
|
||||
type: 1,
|
||||
area: '500px',
|
||||
title: '设置'+data['title']+'接口',
|
||||
closeBtn: 1,
|
||||
shift: 5,
|
||||
shadeClose: true,
|
||||
btn:["确定","取消"],
|
||||
content: "<form class='bt-form pd15'>\
|
||||
<div class='line'>\
|
||||
<span class='tname'>DNSAPI类型</span>\
|
||||
<div class='info-r'>\
|
||||
<select class='bt-input-text mr5' name='type' style='width:100%;'>\
|
||||
<option name='cf'>"+data['name']+"</option>\
|
||||
</select>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='line' id='dnsapi_option'>\
|
||||
<span class='tname'>CF_Key</span>\
|
||||
<div class='info-r'>\
|
||||
<input name='v1' class='bt-input-text mr5' style='width:100%;' placeholder='请输入对应值' type='text'>\
|
||||
</div>\
|
||||
<span class='tname'>CF_Email</span>\
|
||||
<div class='info-r'>\
|
||||
<input name='v2' class='bt-input-text mr5' style='width:100%;' placeholder='请输入对应值' type='text'>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class='line'>\
|
||||
<div>\
|
||||
<ul class='help-info-text c7' style='margin-top:0px;'>\
|
||||
<li>使用【"+data['title']+"】的API接口自动解析申请SSL</li>\
|
||||
</ul>\
|
||||
</div>\
|
||||
</div>\
|
||||
</form>",
|
||||
success:function(){
|
||||
|
||||
},
|
||||
yes:function(index) {
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
//SSL
|
||||
function opSSL(type, id, siteName, callback){
|
||||
function renderDnsapi(){
|
||||
$.post('/site/get_dnsapi', {}, function(data){
|
||||
var dnsapi_option = '';
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
dnsapi_option+='<option value="'+data[i]['name']+'" index="'+i+'">'+data[i]['title']+'</option>';
|
||||
}
|
||||
|
||||
$('#dnsapi_option select').html(dnsapi_option);
|
||||
|
||||
$('#dnsapi_option select').on('change',function(){
|
||||
var val = $(this).val();
|
||||
var index = $('#dnsapi_option option:selected').attr('index');
|
||||
if (val == 'none'){
|
||||
$('#dnsapi_option button').css('display','none');
|
||||
} else {
|
||||
$('#dnsapi_option button').css('display','inline-block');
|
||||
}
|
||||
renderDnsapiHtml(data[index]);
|
||||
});
|
||||
|
||||
$('#dnsapi_set').on('click', function(){
|
||||
var index = $('#dnsapi_option option:selected').attr('index');
|
||||
renderDnsapiHtml(data[index]);
|
||||
});
|
||||
},'json');
|
||||
}
|
||||
|
||||
function opSSLAcme(type, id, siteName, callback){
|
||||
var acme = '<div class="apply_ssl">\
|
||||
<div class="label-input-group">\
|
||||
<div class="line mtb10">\
|
||||
<span class="tname text-center">验证方式</span>\
|
||||
<div style="margin-top:7px;display:inline-block">\
|
||||
<input type="radio" name="dns_type" onclick="fileCheck()" id="check_file" checked="checked"/>\
|
||||
<label class="mr20" for="check_file" style="font-weight:normal">文件验证</label></label>\
|
||||
<input type="radio" name="dns_type" onclick="dnsCheck()" id="check_dns"/>\
|
||||
<label class="mr20" for="check_dns" style="font-weight:normal">DNS验证</label></label>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="line mtb10" id="dnsapi_option" style="display:none;">\
|
||||
<span class="tname text-center"></span>\
|
||||
<div style="margin-top:7px;display:inline-block">\
|
||||
<select class="bt-input-text mr20">\
|
||||
<option value="none">手动解析</option>\
|
||||
</select>\
|
||||
<button id="dnsapi_set" class="btn btn-default btn-sm btn-title" style="display:none;">配置</button>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="check_message line">\
|
||||
<div style="margin-left:100px">\
|
||||
<input type="checkbox" name="checkDomain" id="checkDomain" checked="">\
|
||||
<label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="line mtb10">\
|
||||
<span class="tname text-center">邮箱</span>\
|
||||
<input class="bt-input-text" style="width:240px;" type="text" name="admin_email" />\
|
||||
</div>\
|
||||
<div class="line mtb10">\
|
||||
<span class="tname text-center">域名</span>\
|
||||
<ul id="ymlist" style="padding: 5px 10px;max-height:180px;overflow:auto; width:240px;border:#ccc 1px solid;border-radius:3px"></ul>\
|
||||
</div>\
|
||||
<div class="line mtb10" style="margin-left:100px">\
|
||||
<button class="btn btn-success btn-sm letsApply">申请</button>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7" id="lets_help">\
|
||||
<li>申请之前,请确保域名已解析,如未解析会导致审核失败</li>\
|
||||
<li>由ACME免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
|
||||
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>\
|
||||
</ul>\
|
||||
</div>';
|
||||
|
||||
$(".tab-con").html(acme);
|
||||
|
||||
renderDnsapi();
|
||||
|
||||
$.post('/site/get_ssl','site_name='+siteName+'&ssl_type=acme', function(data){
|
||||
var rdata = data['data'];
|
||||
if(rdata.csr == false){
|
||||
$.post('/site/get_site_domains','id='+id, function(rdata) {
|
||||
var data = rdata['data'];
|
||||
var opt='';
|
||||
for(var i=0;i<data.domains.length;i++){
|
||||
var isIP = isValidIP(data.domains[i].name);
|
||||
var x = isContains(data.domains[i].name, '*');
|
||||
if(!isIP && !x){
|
||||
opt += '<li style="line-height:26px">\
|
||||
<input type="checkbox" style="margin-right:5px; vertical-align:-2px" value="'+data.domains[i].name+'">'+data.domains[i].name
|
||||
+'</li>';
|
||||
}
|
||||
}
|
||||
$("input[name='admin_email']").val(data.email);
|
||||
$("#ymlist").html(opt);
|
||||
$("#ymlist li input").click(function(e){
|
||||
e.stopPropagation();
|
||||
})
|
||||
$("#ymlist li").click(function(){
|
||||
var o = $(this).find("input");
|
||||
if(o.prop("checked")){
|
||||
o.prop("checked",false)
|
||||
}
|
||||
else{
|
||||
o.prop("checked",true);
|
||||
}
|
||||
})
|
||||
$(".letsApply").click(function(){
|
||||
var c = $("#ymlist input[type='checkbox']");
|
||||
var str = [];
|
||||
var domains = '';
|
||||
for(var i=0; i<c.length; i++){
|
||||
if(c[i].checked){
|
||||
str.push(c[i].value);
|
||||
}
|
||||
}
|
||||
domains = JSON.stringify(str);
|
||||
newAcmeSSL(siteName, id, domains);
|
||||
});
|
||||
|
||||
if (typeof (callback) != 'undefined'){
|
||||
callback(rdata);
|
||||
}
|
||||
},'json');
|
||||
return;
|
||||
}
|
||||
var acme = '<div class="myKeyCon ptb15">\
|
||||
<div class="ssl_state_info" style="display:none;"></div>\
|
||||
<div class="custom_certificate_info">\
|
||||
<div class="ssl-con-key pull-left mr20" readonly>密钥(KEY)<br><textarea id="key" class="bt-input-text">'+rdata.key+'</textarea></div>\
|
||||
<div class="ssl-con-key pull-left" readonly>证书(PEM格式)<br><textarea id="csr" class="bt-input-text">'+rdata.csr+'</textarea></div>\
|
||||
</div>\
|
||||
<div class="ssl-btn pull-left mtb15" style="width:100%">\
|
||||
<button class="btn btn-success btn-sm" onclick="deploySSL(\'acme\','+id+',\''+siteName+'\')">部署</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="deleteSSL(\'acme\','+id+',\''+siteName+'\')">删除</button>\
|
||||
</div>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7 pull-left">\
|
||||
<li>已为您自动生成ACME免费证书</li>\
|
||||
<li>由ACME免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。</li>\
|
||||
</ul>';
|
||||
$(".tab-con").html(acme);
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function opSSLNow(type, id, siteName, callback){
|
||||
var now = '<div class="myKeyCon ptb15">\
|
||||
<div class="ssl_state_info" style="display:none;"></div>\
|
||||
<div class="custom_certificate_info">\
|
||||
@@ -2061,10 +2267,66 @@ function opSSL(type, id, siteName, callback){
|
||||
<li>粘贴您的*.key以及*.pem内容,然后保存即可。</li>\
|
||||
<li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt</li>\
|
||||
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li>\
|
||||
</ul>';
|
||||
</ul>';
|
||||
|
||||
// <input type="radio" name="c_type" onclick="dnsCheck()" id="check_dns"/>\
|
||||
// <label class="mr20" for="check_dns" style="font-weight:normal">DNS验证</label></label>\
|
||||
$(".tab-con").html(now);
|
||||
var key = '';
|
||||
var csr = '';
|
||||
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||
$.post('/site/get_ssl','site_name='+siteName,function(data){
|
||||
layer.close(loadT);
|
||||
var rdata = data['data'];
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
<div class='state_item'><span>强制HTTPS:</span><span class='switch'>\
|
||||
<input class='btswitch btswitch-ios' id='toHttps' type='checkbox'>\
|
||||
<label class='btswitch-btn' for='toHttps' onclick=\"httpToHttps('" + siteName + "')\">\
|
||||
</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
|
||||
if(rdata.key == false){
|
||||
rdata.key = '';
|
||||
} else {
|
||||
$(".ssl-btn").append('<button style=\'margin-left:3px;\' class="btn btn-success btn-sm" onclick="deleteSSL(\'now\','+id+',\''+siteName+'\')">删除</button>');
|
||||
}
|
||||
|
||||
if(rdata.csr == false){
|
||||
rdata.csr = '';
|
||||
}
|
||||
$("#key").val(rdata.key);
|
||||
$("#csr").val(rdata.csr);
|
||||
|
||||
$("#toHttps").attr('checked',rdata.httpTohttps);
|
||||
if(rdata.status){
|
||||
$('.warning_info').css('display','none');
|
||||
|
||||
$(".ssl-btn").append("<button class='btn btn-success btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:3px;'>关闭SSL</button>");
|
||||
$('#now_ssl').html('当前证书 - <i style="color:#20a53a;">[已部署SSL]</i>');
|
||||
} else{
|
||||
$('.warning_info').css('display','block');
|
||||
$('#now_ssl').html('当前证书 - <i style="color:red;">[未部署SSL]</i>');
|
||||
}
|
||||
|
||||
|
||||
if (typeof (callback) != 'undefined'){
|
||||
callback(rdata);
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
function opSSLLet(type, id, siteName, callback){
|
||||
var lets = '<div class="apply_ssl">\
|
||||
<div class="label-input-group">\
|
||||
<div class="line mtb10">\
|
||||
@@ -2102,274 +2364,96 @@ function opSSL(type, id, siteName, callback){
|
||||
</ul>\
|
||||
</div>';
|
||||
|
||||
// <input type="radio" name="c_type" onclick="dnsCheck()" id="check_dns"/>\
|
||||
// <label class="mr20" for="check_dns" style="font-weight:normal">DNS验证</label></label>\
|
||||
var acme = '<div class="apply_ssl">\
|
||||
<div class="label-input-group">\
|
||||
<div class="line mtb10">\
|
||||
<form>\
|
||||
<span class="tname text-center">验证方式</span>\
|
||||
<div style="margin-top:7px;display:inline-block">\
|
||||
<input type="radio" name="c_type" onclick="fileCheck()" id="check_file" checked="checked" />\
|
||||
<label class="mr20" for="check_file" style="font-weight:normal">文件验证</label></label>\
|
||||
</div>\
|
||||
</form>\
|
||||
</div>\
|
||||
<div class="check_message line">\
|
||||
<div style="margin-left:100px">\
|
||||
<input type="checkbox" name="checkDomain" id="checkDomain" checked="">\
|
||||
<label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label>\
|
||||
</div>\
|
||||
</div>\
|
||||
</div>\
|
||||
<div class="line mtb10">\
|
||||
<span class="tname text-center">管理员邮箱</span>\
|
||||
<input class="bt-input-text" style="width:240px;" type="text" name="admin_email" />\
|
||||
</div>\
|
||||
<div class="line mtb10">\
|
||||
<span class="tname text-center">域名</span>\
|
||||
<ul id="ymlist" style="padding: 5px 10px;max-height:180px;overflow:auto; width:240px;border:#ccc 1px solid;border-radius:3px"></ul>\
|
||||
</div>\
|
||||
<div class="line mtb10" style="margin-left:100px">\
|
||||
<button class="btn btn-success btn-sm letsApply">申请</button>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7" id="lets_help">\
|
||||
<li>申请之前,请确保域名已解析,如未解析会导致审核失败</li>\
|
||||
<li>由ACME免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
|
||||
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>\
|
||||
</ul>\
|
||||
</div>';
|
||||
|
||||
|
||||
switch(type){
|
||||
case 'lets':
|
||||
$(".tab-con").html(lets);
|
||||
$.post('/site/get_ssl', 'site_name='+siteName+'&ssl_type=lets', function(data){
|
||||
var rdata = data['data'];
|
||||
if(rdata.csr == false){
|
||||
$.post('/site/get_site_domains','id='+id, function(rdata) {
|
||||
var data = rdata['data'];
|
||||
var opt='';
|
||||
for(var i=0;i<data.domains.length;i++){
|
||||
var isIP = isValidIP(data.domains[i].name);
|
||||
var x = isContains(data.domains[i].name, '*');
|
||||
if(!isIP && !x){
|
||||
opt+='<li style="line-height:26px"><input type="checkbox" style="margin-right:5px; vertical-align:-2px" value="'+data.domains[i].name+'">'+data.domains[i].name+'</li>'
|
||||
}
|
||||
$(".tab-con").html(lets);
|
||||
$.post('/site/get_ssl', 'site_name='+siteName+'&ssl_type=lets', function(data){
|
||||
var rdata = data['data'];
|
||||
if(rdata.csr == false){
|
||||
$.post('/site/get_site_domains','id='+id, function(rdata) {
|
||||
var data = rdata['data'];
|
||||
var opt='';
|
||||
for(var i=0;i<data.domains.length;i++){
|
||||
var isIP = isValidIP(data.domains[i].name);
|
||||
var x = isContains(data.domains[i].name, '*');
|
||||
if(!isIP && !x){
|
||||
opt+='<li style="line-height:26px"><input type="checkbox" style="margin-right:5px; vertical-align:-2px" value="'+data.domains[i].name+'">'+data.domains[i].name+'</li>'
|
||||
}
|
||||
}
|
||||
$("input[name='admin_email']").val(data.email);
|
||||
$("#ymlist").html(opt);
|
||||
$("#ymlist li input").click(function(e){
|
||||
e.stopPropagation();
|
||||
})
|
||||
$("#ymlist li").click(function(){
|
||||
var o = $(this).find("input");
|
||||
if(o.prop("checked")){
|
||||
o.prop("checked",false)
|
||||
}
|
||||
else{
|
||||
o.prop("checked",true);
|
||||
}
|
||||
})
|
||||
$(".letsApply").click(function(){
|
||||
var c = $("#ymlist input[type='checkbox']");
|
||||
var str = [];
|
||||
var domains = '';
|
||||
for(var i=0; i<c.length; i++){
|
||||
if(c[i].checked){
|
||||
str.push(c[i].value);
|
||||
}
|
||||
$("input[name='admin_email']").val(data.email);
|
||||
$("#ymlist").html(opt);
|
||||
$("#ymlist li input").click(function(e){
|
||||
e.stopPropagation();
|
||||
})
|
||||
$("#ymlist li").click(function(){
|
||||
var o = $(this).find("input");
|
||||
if(o.prop("checked")){
|
||||
o.prop("checked",false)
|
||||
}
|
||||
else{
|
||||
o.prop("checked",true);
|
||||
}
|
||||
})
|
||||
$(".letsApply").click(function(){
|
||||
var c = $("#ymlist input[type='checkbox']");
|
||||
var str = [];
|
||||
var domains = '';
|
||||
for(var i=0; i<c.length; i++){
|
||||
if(c[i].checked){
|
||||
str.push(c[i].value);
|
||||
}
|
||||
}
|
||||
domains = JSON.stringify(str);
|
||||
newSSL(siteName, id, domains);
|
||||
});
|
||||
|
||||
if (typeof (callback) != 'undefined'){
|
||||
callback(rdata);
|
||||
}
|
||||
},'json');
|
||||
return;
|
||||
}
|
||||
var lets = '<div class="myKeyCon ptb15">\
|
||||
<div class="ssl_state_info" style="display:none;"></div>\
|
||||
<div class="custom_certificate_info">\
|
||||
<div class="ssl-con-key pull-left mr20" readonly>密钥(KEY)<br><textarea id="key" class="bt-input-text">'+rdata.key+'</textarea></div>\
|
||||
<div class="ssl-con-key pull-left" readonly>证书(PEM格式)<br><textarea id="csr" class="bt-input-text">'+rdata.csr+'</textarea></div>\
|
||||
</div>\
|
||||
<div class="ssl-btn pull-left mtb15" style="width:100%">\
|
||||
<button class="btn btn-success btn-sm" onclick="deploySSL(\'lets\','+id+',\''+siteName+'\')">部署</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="renewSSL(\'lets\','+id+',\''+siteName+'\')">续期</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="deleteSSL(\'lets\','+id+',\''+siteName+'\')">删除</button>\
|
||||
</div>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7 pull-left">\
|
||||
<li>已为您自动生成Let\'s Encrypt免费证书</li>\
|
||||
<li>由Let\'s Encrypt免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。</li>\
|
||||
</ul>';
|
||||
$(".tab-con").html(lets);
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
},'json');
|
||||
break;
|
||||
case 'acme':
|
||||
$(".tab-con").html(acme);
|
||||
$.post('/site/get_ssl', 'site_name='+siteName+'&ssl_type=acme', function(data){
|
||||
var rdata = data['data'];
|
||||
if(rdata.csr == false){
|
||||
$.post('/site/get_site_domains','id='+id, function(rdata) {
|
||||
var data = rdata['data'];
|
||||
var opt='';
|
||||
for(var i=0;i<data.domains.length;i++){
|
||||
var isIP = isValidIP(data.domains[i].name);
|
||||
var x = isContains(data.domains[i].name, '*');
|
||||
if(!isIP && !x){
|
||||
opt += '<li style="line-height:26px">\
|
||||
<input type="checkbox" style="margin-right:5px; vertical-align:-2px" value="'+data.domains[i].name+'">'+data.domains[i].name
|
||||
+'</li>';
|
||||
}
|
||||
}
|
||||
$("input[name='admin_email']").val(data.email);
|
||||
$("#ymlist").html(opt);
|
||||
$("#ymlist li input").click(function(e){
|
||||
e.stopPropagation();
|
||||
})
|
||||
$("#ymlist li").click(function(){
|
||||
var o = $(this).find("input");
|
||||
if(o.prop("checked")){
|
||||
o.prop("checked",false)
|
||||
}
|
||||
else{
|
||||
o.prop("checked",true);
|
||||
}
|
||||
})
|
||||
$(".letsApply").click(function(){
|
||||
var c = $("#ymlist input[type='checkbox']");
|
||||
var str = [];
|
||||
var domains = '';
|
||||
for(var i=0; i<c.length; i++){
|
||||
if(c[i].checked){
|
||||
str.push(c[i].value);
|
||||
}
|
||||
}
|
||||
domains = JSON.stringify(str);
|
||||
newAcmeSSL(siteName, id, domains);
|
||||
});
|
||||
|
||||
if (typeof (callback) != 'undefined'){
|
||||
callback(rdata);
|
||||
}
|
||||
},'json');
|
||||
return;
|
||||
}
|
||||
var acme = '<div class="myKeyCon ptb15">\
|
||||
<div class="ssl_state_info" style="display:none;"></div>\
|
||||
<div class="custom_certificate_info">\
|
||||
<div class="ssl-con-key pull-left mr20" readonly>密钥(KEY)<br><textarea id="key" class="bt-input-text">'+rdata.key+'</textarea></div>\
|
||||
<div class="ssl-con-key pull-left" readonly>证书(PEM格式)<br><textarea id="csr" class="bt-input-text">'+rdata.csr+'</textarea></div>\
|
||||
</div>\
|
||||
<div class="ssl-btn pull-left mtb15" style="width:100%">\
|
||||
<button class="btn btn-success btn-sm" onclick="deploySSL(\'acme\','+id+',\''+siteName+'\')">部署</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="deleteSSL(\'acme\','+id+',\''+siteName+'\')">删除</button>\
|
||||
</div>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7 pull-left">\
|
||||
<li>已为您自动生成ACME免费证书</li>\
|
||||
<li>由ACME免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。</li>\
|
||||
</ul>';
|
||||
$(".tab-con").html(acme);
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
},'json');
|
||||
break;
|
||||
case 'now':
|
||||
$(".tab-con").html(now);
|
||||
var key = '';
|
||||
var csr = '';
|
||||
var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
|
||||
$.post('/site/get_ssl','site_name='+siteName,function(data){
|
||||
layer.close(loadT);
|
||||
var rdata = data['data'];
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
<div class='state_item'><span>强制HTTPS:</span><span class='switch'>\
|
||||
<input class='btswitch btswitch-ios' id='toHttps' type='checkbox'>\
|
||||
<label class='btswitch-btn' for='toHttps' onclick=\"httpToHttps('" + siteName + "')\">\
|
||||
</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
|
||||
if(rdata.key == false){
|
||||
rdata.key = '';
|
||||
} else {
|
||||
$(".ssl-btn").append('<button style=\'margin-left:3px;\' class="btn btn-success btn-sm" onclick="deleteSSL(\'now\','+id+',\''+siteName+'\')">删除</button>');
|
||||
}
|
||||
|
||||
if(rdata.csr == false){
|
||||
rdata.csr = '';
|
||||
}
|
||||
$("#key").val(rdata.key);
|
||||
$("#csr").val(rdata.csr);
|
||||
|
||||
$("#toHttps").attr('checked',rdata.httpTohttps);
|
||||
if(rdata.status){
|
||||
$('.warning_info').css('display','none');
|
||||
|
||||
$(".ssl-btn").append("<button class='btn btn-success btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:3px;'>关闭SSL</button>");
|
||||
$('#now_ssl').html('当前证书 - <i style="color:#20a53a;">[已部署SSL]</i>');
|
||||
} else{
|
||||
$('.warning_info').css('display','block');
|
||||
$('#now_ssl').html('当前证书 - <i style="color:red;">[未部署SSL]</i>');
|
||||
}
|
||||
|
||||
}
|
||||
domains = JSON.stringify(str);
|
||||
newSSL(siteName, id, domains);
|
||||
});
|
||||
|
||||
if (typeof (callback) != 'undefined'){
|
||||
callback(rdata);
|
||||
}
|
||||
},'json');
|
||||
break;
|
||||
default:
|
||||
layer.msg("错误类型", {icon:5});
|
||||
break;
|
||||
return;
|
||||
}
|
||||
var lets = '<div class="myKeyCon ptb15">\
|
||||
<div class="ssl_state_info" style="display:none;"></div>\
|
||||
<div class="custom_certificate_info">\
|
||||
<div class="ssl-con-key pull-left mr20" readonly>密钥(KEY)<br><textarea id="key" class="bt-input-text">'+rdata.key+'</textarea></div>\
|
||||
<div class="ssl-con-key pull-left" readonly>证书(PEM格式)<br><textarea id="csr" class="bt-input-text">'+rdata.csr+'</textarea></div>\
|
||||
</div>\
|
||||
<div class="ssl-btn pull-left mtb15" style="width:100%">\
|
||||
<button class="btn btn-success btn-sm" onclick="deploySSL(\'lets\','+id+',\''+siteName+'\')">部署</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="renewSSL(\'lets\','+id+',\''+siteName+'\')">续期</button>\
|
||||
<button class="btn btn-success btn-sm" onclick="deleteSSL(\'lets\','+id+',\''+siteName+'\')">删除</button>\
|
||||
</div>\
|
||||
</div>\
|
||||
<ul class="help-info-text c7 pull-left">\
|
||||
<li>已为您自动生成Let\'s Encrypt免费证书</li>\
|
||||
<li>由Let\'s Encrypt免费申请证书,有效期3个月,支持多域名。默认会自动续签</li>\
|
||||
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。</li>\
|
||||
</ul>';
|
||||
$(".tab-con").html(lets);
|
||||
|
||||
if (rdata['cert_data']){
|
||||
var issuer = rdata['cert_data']['issuer'].split(" ");
|
||||
var domains = rdata['cert_data']['dns'].join("、");
|
||||
|
||||
var cert_data = "<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>证书品牌:</span><span class='ellipsis_text'>"+issuer[0]+"</span></div>\
|
||||
<div class='state_item'><span>到期时间:</span><span class='btlink'>剩余"+rdata['cert_data']['endtime']+"天到期</span></div>\
|
||||
</div>\
|
||||
<div class='state_info_flex'>\
|
||||
<div class='state_item'><span>认证域名:</span><span class='ellipsis_text'>"+domains+"</span></div>\
|
||||
</div>";
|
||||
$(".ssl_state_info").html(cert_data);
|
||||
$(".ssl_state_info").css('display','block');
|
||||
}
|
||||
},'json');
|
||||
}
|
||||
|
||||
//SSL
|
||||
function opSSL(type, id, siteName, callback){
|
||||
switch(type){
|
||||
case 'lets':opSSLLet(type, id, siteName, callback);break;
|
||||
case 'acme':opSSLAcme(type, id, siteName, callback);break;
|
||||
case 'now':opSSLNow(type, id, siteName, callback);break;
|
||||
default:layer.msg("错误类型", {icon:5});break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user