ssl功能80%

pull/109/head
midoks 6 years ago
parent 0eed6843a3
commit 05fcf85c41
  1. 35
      class/core/site_api.py
  2. 397
      route/static/app/site.js

@ -471,7 +471,7 @@ class site_api:
public.writeFile(file, conf) public.writeFile(file, conf)
msg = public.getInfo('网站[{1}]关闭SSL成功!', (siteName,)) msg = public.getInfo('网站[{1}]关闭SSL成功!', (siteName,))
public.writeLog('TYPE_SITE', msg) public.writeLog('网站管理', msg)
public.restartWeb() public.restartWeb()
return public.returnJson(True, 'SSL已关闭!') return public.returnJson(True, 'SSL已关闭!')
@ -625,6 +625,39 @@ class site_api:
return public.returnJson(True, 'OK', result) return public.returnJson(True, 'OK', result)
def httpToHttpsApi(self):
siteName = request.form.get('siteName', '').encode('utf-8')
file = self.getHostConf(siteName)
conf = public.readFile(file)
if conf:
if conf.find('ssl_certificate') == -1:
return public.returnJson(False, '当前未开启SSL')
to = """#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END"""
conf = conf.replace('#error_page 404/404.html;', to)
public.writeFile(file, conf)
public.restartWeb()
return public.returnJson(True, '设置成功!')
def closeToHttpsApi(self):
siteName = request.form.get('siteName', '').encode('utf-8')
file = self.getHostConf(siteName)
conf = public.readFile(file)
if conf:
rep = "\n\s*#HTTP_TO_HTTPS_START(.|\n){1,300}#HTTP_TO_HTTPS_END"
conf = re.sub(rep, '', conf)
rep = "\s+if.+server_port.+\n.+\n\s+\s*}"
conf = re.sub(rep, '', conf)
public.writeFile(file, conf)
public.restartWeb()
return public.returnJson(True, '设置成功!')
def getIndexApi(self): def getIndexApi(self):
sid = request.form.get('id', '').encode('utf-8') sid = request.form.get('id', '').encode('utf-8')
data = {} data = {}

@ -24,10 +24,10 @@ function getWeb(page, search) {
$("#webBody").html(body); $("#webBody").html(body);
for (var i = 0; i < data.data.length; i++) { for (var i = 0; i < data.data.length; i++) {
//当前站点状态 //当前站点状态
if (data.data[i].status == lan.site.running || data.data[i].status == '1') { if (data.data[i].status == '正在运行' || data.data[i].status == '1') {
var status = "<a href='javascript:;' title='"+lan.site.running_title+"' onclick=\"webStop(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:rgb(92, 184, 92)'>"+lan.site.running_text+" </span><span style='color:rgb(92, 184, 92)' class='glyphicon glyphicon-play'></span></a>"; var status = "<a href='javascript:;' title='停用这个站点' onclick=\"webStop(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:rgb(92, 184, 92)'>运行中</span><span style='color:rgb(92, 184, 92)' class='glyphicon glyphicon-play'></span></a>";
} else { } else {
var status = "<a href='javascript:;' title='"+lan.site.stopped_title+"' onclick=\"webStart(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:red'>"+lan.site.stopped+" </span><span style='color:rgb(255, 0, 0);' class='glyphicon glyphicon-pause'></span></a>"; var status = "<a href='javascript:;' title='启用这个站点' onclick=\"webStart(" + data.data[i].id + ",'" + data.data[i].name + "')\" class='btn-defsult'><span style='color:red'>已停止</span><span style='color:rgb(255, 0, 0);' class='glyphicon glyphicon-pause'></span></a>";
} }
//是否有备份 //是否有备份
@ -1412,7 +1412,7 @@ function proxyList(siteName,type){
} }
//开启缓存 //开启缓存
function OpenCache(siteName){ function openCache(siteName){
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/site?action=ProxyCache',{siteName:siteName},function(rdata){ $.post('/site?action=ProxyCache',{siteName:siteName},function(rdata){
layer.close(loadT); layer.close(loadT);
@ -1463,33 +1463,16 @@ function to301(siteName,type){
//文件验证 //文件验证
function file_check(){ // function file_check(){
$(".check_message").html('<div style="margin-left:100px">\ // $(".check_message").html('<div style="margin-left:100px">\
<input type="checkbox" name="checkDomain" id="checkDomain" checked="">\ // <input type="checkbox" name="checkDomain" id="checkDomain" checked="">\
<label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label>\ // <label class="mr20" for="checkDomain" style="font-weight:normal">提前校验域名(提前发现问题,减少失败率)</label>\
</div>'); // </div>');
$("#lets_help").html('<li>申请之前请确保域名已解析如未解析会导致审核失败</li>\ // $("#lets_help").html('<li>申请之前,请确保域名已解析,如未解析会导致审核失败</li>\
<li>Let\'s Encrypt免费证书有效期3个月支持多域名默认会自动续签</li>\ // <li>Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签</li>\
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\ // <li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li>'); // <li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li>');
} // }
dnsapis = {};
//DNS验证
function dns_check(){
var loadT = layer.msg('正在安装DNS组件,请稍候...',{icon:16,time:0,shade:0.3});
$.post('/site?action=GetDnsApi',{},function(rdata){
layer.close(loadT)
var obody = '<span class="tname">选择DNS接口</span><select onchange="dns_select(this)" class="bt-input-text" style="width:120px" name="dns_select" id="dns_selects">';
for(var i=0;i<rdata.length;i++){
dnsapis[rdata[i]['name']] = rdata[i];
obody += '<option value="'+rdata[i]['name']+'" title="'+rdata[i]['ps']+'">'+rdata[i]['title']+'</option>';
}
obody += '</select><span id="dnsapi_edit"></span> 等待 <input type="number" class="bt-input-text" name="dnssleep" value="20" style="width:50px;vertical-align:-1px" min="10" max="120" />秒'
$(".check_message").html(obody);
$("#lets_help").html("<li>在DNS验证中,我们提供了3个自动化DNS-API,并提供了手动模式</li><li>使用DNS接口申请证书可自动续期,手动模式下证书到期后手需重新申请</li><li>使用【宝塔DNS云解析】接口前您需要确认当前要申请SSL证书的域名DNS为【云解析】</li><li>使用【DnsPod/阿里云DNS】接口前您需要先在弹出的窗口中设置对应接口的API</li>")
});
}
//证书夹 //证书夹
function sslAdmin(siteName){ function sslAdmin(siteName){
@ -1531,7 +1514,7 @@ function setCertSsl(certName,siteName){
}); });
} }
//宝塔ssl //ssl
function setSSL(id,siteName){ function setSSL(id,siteName){
var mBody = '<div class="tab-nav">\ var mBody = '<div class="tab-nav">\
<span class="on" onclick="opSSL(\'lets\','+id+',\''+siteName+'\')">Let\'s Encrypt</span>\ <span class="on" onclick="opSSL(\'lets\','+id+',\''+siteName+'\')">Let\'s Encrypt</span>\
@ -1552,225 +1535,127 @@ function setSSL(id,siteName){
$(".tab-nav span").click(function(){ $(".tab-nav span").click(function(){
$(this).addClass("on").siblings().removeClass("on"); $(this).addClass("on").siblings().removeClass("on");
}); });
// var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
// $.post('/site?action=GetSSL','siteName='+siteName,function(rdata){ $.post('/site/get_ssl','siteName='+siteName,function(rdata){
// layer.close(loadT); layer.close(loadT);
// $("#toHttps").attr('checked',rdata.httpTohttps); $("#toHttps").attr('checked',rdata.data.httpTohttps);
// switch(rdata.type){ switch(rdata.data.type){
// case -1: case 1:
// $(".tab-nav span").eq(3).addClass("on").siblings().removeClass("on"); $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on");
// var txt = "<div class='mtb15' style='line-height:30px'>"+lan.site.ssl_help_1+"</div>"; setCookie('letssl',1);
// $(".tab-con").html(txt); var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.key+'</textarea></div>'
// break; + '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.data.csr+'</textarea></div>'
// case 1: + '</div>'
// $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); + '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
// setCookie('letssl',1); <li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>'
// var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>' $(".tab-con").html(lets);
// + '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>' $(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button></div>");
// + '</div>' break;
// + '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>' case 0:
// $(".tab-con").html(lets); case 3:
// $(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button></div>"); $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on");
// break; opSSL('other',id,siteName);
// case 0: break;
// $(".tab-nav span").eq(2).addClass("on").siblings().removeClass("on"); case 2:
// BTssl('other',id,siteName); $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on");
// break; opSSL('a',id,siteName);
// case 2: break;
// $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on"); }
// BTssl('a',id,siteName); },'json');
// break;
// }
// });
} }
//关闭SSL
function closeSSL(siteName){ function closeSSL(siteName){
var txt = "<div class='mtb15' style='line-height:30px'>本站点未设置SSL如需设置SSL请选择切换类目申请开启SSL<br/>\ var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']});
<p style='color:red;'>关闭SSL以后,请务必清除浏览器缓存再访问站点</p>\ $.post('/site/get_ssl','siteName='+siteName,function(rdata){
</div>"; layer.close(loadT);
switch(rdata.data.type){
case -1:
var txt = "<div class='mtb15' style='line-height:30px'>本站点未设置SSL如需设置SSL请选择切换类目申请开启SSL<br>\
<p style='color:red;'>关闭SSL以后,请务必清除浏览器缓存再访问站点</p></div>";
setCookie('letssl',0); setCookie('letssl',0);
$(".tab-con").html(txt); $(".tab-con").html(txt);
break;
case 0:
var txt = "Let's Encrypt";
closeSSLHTML(txt,siteName);
break;
case 1:
var txt = '其它';
closeSSLHTML(txt,siteName);
break;
case 2:
var txt = 'SSL';
closeSSLHTML(txt,siteName);
break;
}
},'json');
} }
// function closeSSL(siteName){ //关闭SSL内容
// var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); function closeSSLHTML(txt,siteName){
// $.post('site?action=GetSSL','siteName='+siteName,function(rdata){ $(".tab-con").html("<div class='line mtb15'>"+lan.get('ssl_enable',[txt])+"</div><div class='line mtb15'><button class='btn btn-success btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\">关闭SSL</button></div>");
// layer.close(loadT); }
// switch(rdata.type){
// case -1:
// var txt = "<div class='mtb15' style='line-height:30px'>"+lan.site.ssl_help_1+"</div>";
// setCookie('letssl',0);
// $(".tab-con").html(txt);
// break;
// case 1:
// var txt = "Let's Encrypt";
// closeSSLHTML(txt,siteName);
// break;
// case 0:
// var txt = lan.site.other;
// closeSSLHTML(txt,siteName);
// break;
// case 2:
// var txt = lan.site.bt_ssl;
// closeSSLHTML(txt,siteName);
// break;
// }
// });
// }
//设置httpToHttps //设置httpToHttps
function httpToHttps(siteName){ function httpToHttps(siteName){
var isHttps = $("#toHttps").attr('checked'); var isHttps = $("#toHttps").attr('checked');
if(isHttps){ if(isHttps){
layer.confirm('关闭强制HTTPS后需要清空浏览器缓存才能看到效果,继续吗?',{icon:3,title:"关闭强制HTTPS"},function(){ layer.confirm('关闭强制HTTPS后需要清空浏览器缓存才能看到效果,继续吗?',{icon:3,title:"关闭强制HTTPS"},function(){
$.post('site?action=CloseToHttps','siteName='+siteName,function(rdata){ $.post('/site/close_to_https','siteName='+siteName,function(rdata){
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
}); },'json');
}); });
}else{ }else{
$.post('site?action=HttpToHttps','siteName='+siteName,function(rdata){ $.post('/site/http_to_https','siteName='+siteName,function(rdata){
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
}); },'json');
} }
} }
//关闭SSL内容
function closeSSLHTML(txt,siteName){
$(".tab-con").html("<div class='line mtb15'>"+lan.get('ssl_enable',[txt])+"</div><div class='line mtb15'><button class='btn btn-success btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\">"+lan.site.ssl_close+"</button></div>");
}
//SSL //SSL
function opSSL(type,id,siteName){ function opSSL(type,id,siteName){
var b = '<div class="btssl"><div class="line mtb15"><span class="tname text-center">'+lan.site.domain+'</span><select id="domainlist" class="bt-input-text" style="width:220px"></select></div>'
+ '<div class="line mtb15" style="margin-left:80px"><button class="btn btn-success btn-sm btsslApply">'+lan.site.btapply+'</button></div>'
+ '<div class="btssllist mtb15"><div class="divtable"><div id="btssl_table_list" style="max-height:205px;border:#ddd 1px solid;overflow:auto"><table class="table table-hover" style="border:none"><thead><tr><th>域名</th><th>到期时间</th><th>状态<a href="https://www.bt.cn/bbs/thread-7860-1-1.html" class="bt-ico-ask" title="查看说明" target="_blank">?</a></th><th class="text-right" width="120">操作</th></tr></thead><tbody id="ssllist"></tbody></table></div></div></div>'
+ '<ul class="help-info-text c7 ptb15"><li>'+lan.site.bt_ssl_help_5+'(包括根域名)</li><li>'+lan.site.bt_ssl_help_6+'</li><li>'+lan.site.bt_ssl_help_7+'</li><li>建议使用二级域名为www的域名申请证书,此时系统会默认赠送顶级域名为可选名称</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'
+ '</div>';
var lets = '<div class="btssl"><div class="label-input-group">' var lets = '<div class="btssl"><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="file_check()" id="check_file" checked="checked" /><label class="mr20" for="check_file" style="font-weight:normal">文件验证</label><input type="radio" onclick="dns_check()" name="c_type" id="check_dns" /><label class="mr20" for="check_dns" style="font-weight:normal">DNS验证</label></div></form></div>' + '<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="file_check()" 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 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><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">'+lan.site.domain+'</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"><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">'+lan.site.btapply+'</button></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>'+lan.site.bt_ssl_help_5+'</li><li>'+lan.site.bt_ssl_help_8+'</li><li>'+lan.site.bt_ssl_help_9+'</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>' + '<ul class="help-info-text c7" id="lets_help"><li>申请之前请确保域名已解析如未解析会导致审核失败</li>\
<li>Let\'s Encrypt免费证书有效期3个月支持多域名默认会自动续签</li>\
<li>若您的站点使用了CDN或301重定向会导致续签失败</li>\
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'
+ '</div>'; + '</div>';
var other = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text"></textarea></div>' var other = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text"></textarea></div>'
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text"></textarea></div>' + '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text"></textarea></div>'
+ '<div class="ssl-btn pull-left mtb15" style="width:100%"><button class="btn btn-success btn-sm" onclick="saveSSL(\''+siteName+'\')">'+lan.public.save+'</button></div></div>' + '<div class="ssl-btn pull-left mtb15" style="width:100%"><button class="btn btn-success btn-sm" onclick="saveSSL(\''+siteName+'\')">保存</button></div></div>'
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.bt_ssl_help_10+'</li><li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt</li><li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>'; + '<ul class="help-info-text c7 pull-left"><li>粘贴您的*.key以及*.pem内容,然后保存即可<a href=\'http://www.bt.cn/bbs/thread-704-1-1.html\' class=\'btlink\' target=\'_blank\'>[帮助]</a></li>\
<li>如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书</li><li>PEM = .crt + (root_bundle).crt</li>\
<li>在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点</li></ul>';
switch(type){ switch(type){
case 'b':
$(".tab-con").html(b);
var opt = '';
$.get('/data?action=getData&table=domain&list=True&search=' + id, function(rdata) {
for(var i=0;i<rdata.length;i++){
var isIP = isValidIP(rdata[i].name);
var x = isContains(rdata[i].name, '*');
if(!isIP && !x){
opt+='<option>'+rdata[i].name+'</option>'
}
}
$("#domainlist").html(opt);
})
getSSLlist(siteName);
$(".btsslApply").click(function(){
var ym = $("#domainlist").val();
if(ym.indexOf('www.') != -1){
var len = $("#domainlist")[0].length;
var rootDomain = ym.split(/www\./)[1];
var mn = 0;
for(var i=0;i<len;i++){
if($("#domainlist")[0][i].innerText == rootDomain) mn++;
}
if(mn < 1){
layer.msg('您为域名['+ym+']申请证书,但程序检测到您没有将其根域名['+rootDomain+']绑定并解析到站点,这会导致证书签发失败!',{icon:2,time:5000});
return;
}
}
$.post("/data?action=getKey","table=sites&key=path&id="+id,function(rdata){
//第一步
var loadT = layer.msg(lan.site.ssl_apply_1,{icon:16,time:0,shade:0.3});
$.post("/ssl?action=GetDVSSL","domain="+ym+"&path="+rdata,function(tdata){
layer.close(loadT);
if(tdata.status){
layer.msg(tdata.msg,{icon:1});
var partnerOrderId = tdata.data.partnerOrderId;
//第二步
var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade:0.3});
$.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(ydata){
layer.close(loadT);
if(!ydata.status){
layer.msg(ydata.msg,{icon:2});
getSSLlist(siteName);
return;
}
//第三步
var loadT = layer.msg(lan.site.ssl_apply_3,{icon:16,time:0,shade:0.3});
$.post("/ssl?action=GetSSLInfo","partnerOrderId="+partnerOrderId+"&siteName="+siteName,function(zdata){
layer.close(loadT);
layer.msg(zdata.msg,{icon:zdata.status?1:2});
getSSLlist(siteName);
});
});
}
else{
layer.msg(tdata.msg,{icon:2})
}
})
})
});
break;
case 'lets': case 'lets':
/*
$.get("/ssl?action=GetUserInfo",function(sdata){
if(!sdata.status){
$(".tab-con").html(a);
$(".help-info-text").html("<li>"+lan.site.+"</li><li>let's Encrypt证书有效期为3个月</li><li>3个月有效期后自动续签</li>");
$("#btusername").blur(function(){
if(!(/^1(3|4|5|7|8)\d{9}$/.test($(this).val()))){
$("#btusername").css("border","1px solid #e53451");
$("#btusername").next("i").html(lan.site.phone_input);
}
else{
$("#btusername").removeAttr("style").css("width","200px");
$("#btusername").next("i").empty();
}
});
$(".btlogin").click(function(){
var data = "username="+$("#btusername").val()+"&password="+$("#btpassword").val();
$.post("/ssl?action=GetToken",data,function(tdata){
if(tdata.status){
layer.msg(tdata.msg,{icon:1});
BTssl('lets',id,siteName);
}
else{
layer.msg(tdata.msg,{icon:2})
}
})
})
}
else{}
});*/
if(getCookie('letssl') == 1){ if(getCookie('letssl') == 1){
$.post('site?action=GetSSL','siteName='+siteName,function(rdata){ $.post('/site/get_ssl','siteName='+siteName,function(data){
var rdata = data['data'];
if(rdata.csr === false){ if(rdata.csr === false){
setCookie('letssl',0); setCookie('letssl',0);
opSSL(type,id,siteName); opSSL(type,id,siteName);
return; return;
} }
var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>' var lets = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>'
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>' + '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
+ '</div>' + '</div>'
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>'; + '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>';
$(".tab-con").html(lets); $(".tab-con").html(lets);
$(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('CloseSSLConf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button></div>"); $(".help-info-text").after("<div class='line mtb15'><button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button></div>");
}); },'json');
return; return;
} }
$(".tab-con").html(lets); $(".tab-con").html(lets);
@ -1817,13 +1702,15 @@ function opSSL(type,id,siteName){
$(".tab-con").html(other); $(".tab-con").html(other);
var key = ''; var key = '';
var csr = ''; var csr = '';
var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); var loadT = layer.msg('正在提交任务...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('site/get_ssl','siteName='+siteName,function(data){ $.post('site/get_ssl','siteName='+siteName,function(data){
// console.log(data);
layer.close(loadT); layer.close(loadT);
var rdata = data['data']; var rdata = data['data'];
if (rdata.type == 0){
setCookie('letssl', 1);
}
if(rdata.status){ if(rdata.status){
$(".ssl-btn").append("<button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>"+lan.site.ssl_close+"</button>"); $(".ssl-btn").append("<button class='btn btn-default btn-sm' onclick=\"ocSSL('close_ssl_conf','"+siteName+"')\" style='margin-left:10px'>关闭SSL</button>");
} }
if(rdata.key == false) rdata.key = ''; if(rdata.key == false) rdata.key = '';
if(rdata.csr == false) rdata.csr = ''; if(rdata.csr == false) rdata.csr = '';
@ -1832,36 +1719,8 @@ function opSSL(type,id,siteName){
},'json'); },'json');
break; break;
} }
// table_fixed("btssl_table_list")
} }
//取证书列表
function getSSLlist(siteName){
var tr='';
var loadT = layer.msg(lan.site.get_ssl_list,{icon:16,time:0,shade:0.3});
$.get("/ssl?action=GetOrderList&siteName="+siteName,function(rdata){
layer.close(loadT);
if(rdata.status){
for(var i=0;i<rdata.data.length;i++){
var txt = '';
var tips = '';
var icoask = '';
txt = (rdata.data[i].stateName == lan.site.order_success) ? '<a href="javascript:onekeySSl(\''+rdata.data[i].partnerOrderId+'\',\''+siteName+'\');" class="btlink">'+lan.site.deploy+'</a>' : '';
if(rdata.data[i].stateName == lan.site.domain_wait) {
txt = '<a href="javascript:VerifyDomain(\''+rdata.data[i].partnerOrderId+'\',\''+siteName+'\');" class="btlink">'+lan.site.domain_validate+'</a>';
//tips = lan.site.domain_check;
//icoask = '<i class="ico-font-ask" title="'+tips+'">?</i>';
}
if(rdata.data[i].setup){
txt = lan.site.deployed+' | <a class="btlink" href="javascript:ocSSL(\'CloseSSLConf\',\''+siteName+'\')">'+lan.public.close+'</a></div>';
}
tr += '<tr><td>'+rdata.data[i].commonName+'</td><td>'+getLocalTime(rdata.data[i].endtime).split(" ")[0]+'</td><td title='+tips+'>'+rdata.data[i].stateName+icoask+'</td><td class="text-right">'+txt+'</td></tr>'
}
$("#ssllist").html(tr);
}
});
}
//一键部署证书 //一键部署证书
function onekeySSl(partnerOrderId,siteName){ function onekeySSl(partnerOrderId,siteName){
@ -1874,7 +1733,7 @@ function onekeySSl(partnerOrderId,siteName){
} }
//验证域名 //验证域名
function VerifyDomain(partnerOrderId,siteName){ function verifyDomain(partnerOrderId,siteName){
var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade:0.3}); var loadT = layer.msg(lan.site.ssl_apply_2,{icon:16,time:0,shade:0.3});
$.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+'&siteName='+siteName,function(ydata){ $.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+'&siteName='+siteName,function(ydata){
layer.close(loadT); layer.close(loadT);
@ -1916,15 +1775,11 @@ function ocSSL(action,siteName){
} }
setCookie('letssl',0); setCookie('letssl',0);
// $.post('/system?action=ServiceAdmin','name='+getCookie('serverType')+'&type=reload',function(result){
// //setSSL(siteName);
// if(!result.status) layer.msg(result.msg,{icon:2});
// },'json');
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(action == 'close_ssl_conf'){ if(action == 'close_ssl_conf'){
layer.msg('已关闭SSL,请务必清除浏览器缓存后再访问站点!',{icon:1,time:5000}); layer.msg('已关闭SSL,请务必清除浏览器缓存后再访问站点!',{icon:1,time:5000});
} }
$(".bt-w-menu .bgw").click(); $(".tab-nav .on").click();
},'json'); },'json');
} }
@ -1937,13 +1792,14 @@ function newSSL(siteName,domains){
$.post('/site/create_let','siteName='+siteName+'&domains='+domains+'&updateOf=1&email='+email + force,function(rdata){ $.post('/site/create_let','siteName='+siteName+'&domains='+domains+'&updateOf=1&email='+email + force,function(rdata){
layer.close(loadT) layer.close(loadT)
if(rdata.status){ if(rdata.status){
var mykeyhtml = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">'+lan.site.ssl_key+'<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>' var mykeyhtml = '<div class="myKeyCon ptb15"><div class="ssl-con-key pull-left mr20">密钥(KEY)<br><textarea id="key" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.key+'</textarea></div>'
+ '<div class="ssl-con-key pull-left">'+lan.site.ssl_crt+'<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>' + '<div class="ssl-con-key pull-left">证书(PEM格式)<br><textarea id="csr" class="bt-input-text" readonly="" style="background-color:#f6f6f6">'+rdata.csr+'</textarea></div>'
+ '</div>' + '</div>'
+ '<ul class="help-info-text c7 pull-left"><li>'+lan.site.ssl_help_2+'</li><li>'+lan.site.ssl_help_3+'</li></ul>'; + '<ul class="help-info-text c7 pull-left"><li>已为您自动生成Let\'s Encrypt免费证书</li>\
<li>如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容然后保存即可</li></ul>';
$(".btssl").html(mykeyhtml); $(".btssl").html(mykeyhtml);
layer.msg(rdata.msg,{icon:rdata.status?1:2}); layer.msg(rdata.msg,{icon:rdata.status?1:2});
// setCookie('letssl',1); setCookie('letssl',1);
return; return;
} }
@ -1956,7 +1812,7 @@ function newSSL(siteName,domains){
data = "<p>"+rdata.msg+"</p><hr />" data = "<p>"+rdata.msg+"</p><hr />"
if(rdata.err[0].length > 10) data += '<p style="color:red;">' + rdata.err[0].replace(/\n/g,'<br>') + '</p>'; if(rdata.err[0].length > 10) data += '<p style="color:red;">' + rdata.err[0].replace(/\n/g,'<br>') + '</p>';
if(rdata.err[1].length > 10) data += '<p style="color:red;">' + rdata.err[1].replace(/\n/g,'<br>') + '</p>'; if(rdata.err[1].length > 10) data += '<p style="color:red;">' + rdata.err[1].replace(/\n/g,'<br>') + '</p>';
// setCookie('letssl',0); setCookie('letssl',0);
layer.msg(data,{icon:2,area:'500px',time:0,shade:0.3,shadeClose:true}); layer.msg(data,{icon:2,area:'500px',time:0,shade:0.3,shadeClose:true});
},'json'); },'json');
@ -1978,15 +1834,6 @@ function saveSSL(siteName){
},'json'); },'json');
} }
//更新SSL
function ChangeSaveSSL(siteName){
var loadT = layer.msg(lan.site.ssl_apply_4,{icon:16,time:0,shade: [0.3, '#000']});
$.post('site?action=CreateLet','siteName='+siteName+'&updateOf=2',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//PHP版本 //PHP版本
function phpVersion(siteName){ function phpVersion(siteName){
$.post('/site/get_site_php_version','siteName='+siteName,function(version){ $.post('/site/get_site_php_version','siteName='+siteName,function(version){
@ -1998,7 +1845,7 @@ function phpVersion(siteName){
$.post('/site/get_php_version',function(rdata){ $.post('/site/get_php_version',function(rdata){
var versionSelect = "<div class='webEdit-box'>\ var versionSelect = "<div class='webEdit-box'>\
<div class='line'>\ <div class='line'>\
<span class='tname' style='width:100px'>"+lan.site.php_ver+"</span>\ <span class='tname' style='width:100px'>PHP版本</span>\
<div class='info-r'>\ <div class='info-r'>\
<select id='phpVersion' class='bt-input-text mr5' name='phpVersion' style='width:110px'>"; <select id='phpVersion' class='bt-input-text mr5' name='phpVersion' style='width:110px'>";
var optionSelect = ''; var optionSelect = '';
@ -2012,28 +1859,12 @@ function phpVersion(siteName){
<span id='php_w' style='color:red;margin-left: 32px;'></span>\ <span id='php_w' style='color:red;margin-left: 32px;'></span>\
</div>\ </div>\
<ul class='help-info-text c7 ptb10'>\ <ul class='help-info-text c7 ptb10'>\
<li>"+lan.site.switch_php_help1+"</li>\ <li>请根据您的程序需求选择版本</li>\
<li>"+lan.site.switch_php_help2+"</li>\ <li>若非必要,请尽量不要使用PHP5.2,这会降低您的服务器安全性</li>\
<li>"+lan.site.switch_php_help3+"</li>\ <li>PHP7不支持mysql扩展默认安装mysqli以及mysql-pdo</li>\
</ul>\ </ul>\
</div>\ </div>\
</div>"; </div>";
if(version.nodejsversion){
var nodejs_checked = '';
if(version.nodejs != -1) nodejs_checked = 'checked';
versionSelect += '<div class="webEdit-box padding-10">\
<div class="linex">\
<label style="font-weight:normal">\
<input type="checkbox" name="status" onclick="Nodejs(\''+siteName+'\')" style="width:15px;height:15px;" '+nodejs_checked+' />'+lan.site.enable_nodejs+'\
</label>\
</div>\
<ul class="help-info-text c7 ptb10">\
<li>'+lan.site.nodejs_help1+' '+version.nodejsversion+'</li>\
<li>'+lan.site.nodejs_help2+'</li>\
<li>'+lan.site.nodejs_help3+'</li>\
</ul>\
</div>'
}
$("#webedit-con").html(versionSelect); $("#webedit-con").html(versionSelect);
//验证PHP版本 //验证PHP版本
$("select[name='phpVersion']").change(function(){ $("select[name='phpVersion']").change(function(){

Loading…
Cancel
Save