From 05fcf85c41b845ea89ef34ec7596eab04b87b163 Mon Sep 17 00:00:00 2001 From: midoks Date: Sat, 2 Mar 2019 22:33:29 +0800 Subject: [PATCH] =?UTF-8?q?ssl=E5=8A=9F=E8=83=BD80%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- class/core/site_api.py | 35 +++- route/static/app/site.js | 413 ++++++++++++--------------------------- 2 files changed, 156 insertions(+), 292 deletions(-) diff --git a/class/core/site_api.py b/class/core/site_api.py index 71d8143d6..87310e679 100755 --- a/class/core/site_api.py +++ b/class/core/site_api.py @@ -471,7 +471,7 @@ class site_api: public.writeFile(file, conf) msg = public.getInfo('网站[{1}]关闭SSL成功!', (siteName,)) - public.writeLog('TYPE_SITE', msg) + public.writeLog('网站管理', msg) public.restartWeb() return public.returnJson(True, 'SSL已关闭!') @@ -625,6 +625,39 @@ class site_api: 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): sid = request.form.get('id', '').encode('utf-8') data = {} diff --git a/route/static/app/site.js b/route/static/app/site.js index 14890895a..2cc22b214 100755 --- a/route/static/app/site.js +++ b/route/static/app/site.js @@ -24,10 +24,10 @@ function getWeb(page, search) { $("#webBody").html(body); for (var i = 0; i < data.data.length; i++) { //当前站点状态 - if (data.data[i].status == lan.site.running || data.data[i].status == '1') { - var status = ""+lan.site.running_text+" "; + if (data.data[i].status == '正在运行' || data.data[i].status == '1') { + var status = "运行中"; } else { - var status = ""+lan.site.stopped+" "; + var status = "已停止"; } //是否有备份 @@ -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']}); $.post('/site?action=ProxyCache',{siteName:siteName},function(rdata){ layer.close(loadT); @@ -1463,33 +1463,16 @@ function to301(siteName,type){ //文件验证 -function file_check(){ - $(".check_message").html('
\ - \ - \ -
'); - $("#lets_help").html('
  • 申请之前,请确保域名已解析,如未解析会导致审核失败
  • \ -
  • Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签
  • \ -
  • 若您的站点使用了CDN或301重定向会导致续签失败
  • \ -
  • 在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点
  • '); -} - -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 = '选择DNS接口 等待 秒' - $(".check_message").html(obody); - $("#lets_help").html("
  • 在DNS验证中,我们提供了3个自动化DNS-API,并提供了手动模式
  • 使用DNS接口申请证书可自动续期,手动模式下证书到期后手需重新申请
  • 使用【宝塔DNS云解析】接口前您需要确认当前要申请SSL证书的域名DNS为【云解析】
  • 使用【DnsPod/阿里云DNS】接口前您需要先在弹出的窗口中设置对应接口的API
  • ") - }); -} +// function file_check(){ +// $(".check_message").html('
    \ +// \ +// \ +//
    '); +// $("#lets_help").html('
  • 申请之前,请确保域名已解析,如未解析会导致审核失败
  • \ +//
  • Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签
  • \ +//
  • 若您的站点使用了CDN或301重定向会导致续签失败
  • \ +//
  • 在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点
  • '); +// } //证书夹 function sslAdmin(siteName){ @@ -1531,7 +1514,7 @@ function setCertSsl(certName,siteName){ }); } -//宝塔ssl +//ssl function setSSL(id,siteName){ var mBody = '
    \ Let\'s Encrypt\ @@ -1552,225 +1535,127 @@ function setSSL(id,siteName){ $(".tab-nav span").click(function(){ $(this).addClass("on").siblings().removeClass("on"); }); - // var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); - // $.post('/site?action=GetSSL','siteName='+siteName,function(rdata){ - // layer.close(loadT); - // $("#toHttps").attr('checked',rdata.httpTohttps); - // switch(rdata.type){ - // case -1: - // $(".tab-nav span").eq(3).addClass("on").siblings().removeClass("on"); - // var txt = "
    "+lan.site.ssl_help_1+"
    "; - // $(".tab-con").html(txt); - // break; - // case 1: - // $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); - // setCookie('letssl',1); - // var lets = '
    '+lan.site.ssl_key+'
    ' - // + '
    '+lan.site.ssl_crt+'
    ' - // + '
    ' - // + '' - // $(".tab-con").html(lets); - // $(".help-info-text").after("
    "); - // break; - // case 0: - // $(".tab-nav span").eq(2).addClass("on").siblings().removeClass("on"); - // BTssl('other',id,siteName); - // break; - // case 2: - // $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on"); - // BTssl('a',id,siteName); - // break; - // } - // }); -} - - -//关闭SSL -function closeSSL(siteName){ - var txt = "
    本站点未设置SSL,如需设置SSL,请选择切换类目申请开启SSL
    \ -

    关闭SSL以后,请务必清除浏览器缓存再访问站点

    \ -
    "; - setCookie('letssl',0); - $(".tab-con").html(txt); -} - -// function closeSSL(siteName){ -// var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); -// $.post('site?action=GetSSL','siteName='+siteName,function(rdata){ -// layer.close(loadT); -// switch(rdata.type){ -// case -1: -// var txt = "
    "+lan.site.ssl_help_1+"
    "; -// 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; -// } -// }); -// } + var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); + $.post('/site/get_ssl','siteName='+siteName,function(rdata){ + layer.close(loadT); + $("#toHttps").attr('checked',rdata.data.httpTohttps); + switch(rdata.data.type){ + case 1: + $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); + setCookie('letssl',1); + var lets = '
    密钥(KEY)
    ' + + '
    证书(PEM格式)
    ' + + '
    ' + + '' + $(".tab-con").html(lets); + $(".help-info-text").after("
    "); + break; + case 0: + case 3: + $(".tab-nav span").eq(1).addClass("on").siblings().removeClass("on"); + opSSL('other',id,siteName); + break; + case 2: + $(".tab-nav span").eq(0).addClass("on").siblings().removeClass("on"); + opSSL('a',id,siteName); + break; + } + },'json'); +} + + + + +function closeSSL(siteName){ + var loadT = layer.msg(lan.site.the_msg,{icon:16,time:0,shade: [0.3, '#000']}); + $.post('/site/get_ssl','siteName='+siteName,function(rdata){ + layer.close(loadT); + switch(rdata.data.type){ + case -1: + var txt = "
    本站点未设置SSL,如需设置SSL,请选择切换类目申请开启SSL
    \ +

    关闭SSL以后,请务必清除浏览器缓存再访问站点

    "; + setCookie('letssl',0); + $(".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'); +} + +//关闭SSL内容 +function closeSSLHTML(txt,siteName){ + $(".tab-con").html("
    "+lan.get('ssl_enable',[txt])+"
    "); +} //设置httpToHttps function httpToHttps(siteName){ var isHttps = $("#toHttps").attr('checked'); if(isHttps){ 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}); - }); + },'json'); }); }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}); - }); + },'json'); } } -//关闭SSL内容 -function closeSSLHTML(txt,siteName){ - $(".tab-con").html("
    "+lan.get('ssl_enable',[txt])+"
    "); -} + //SSL function opSSL(type,id,siteName){ - var b = '
    '+lan.site.domain+'
    ' - + '
    ' - + '
    域名到期时间状态?操作
    ' - + '
    • '+lan.site.bt_ssl_help_5+'(包括根域名)
    • '+lan.site.bt_ssl_help_6+'
    • '+lan.site.bt_ssl_help_7+'
    • 建议使用二级域名为www的域名申请证书,此时系统会默认赠送顶级域名为可选名称
    • 在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点
    ' - + '
    '; - var lets = '
    ' - + '
    验证方式
    ' + + '
    验证方式
    \ +
    ' + '
    ' + '
    管理员邮箱
    ' - + '
    '+lan.site.domain+'
      ' - + '
      ' - + '
      • '+lan.site.bt_ssl_help_5+'
      • '+lan.site.bt_ssl_help_8+'
      • '+lan.site.bt_ssl_help_9+'
      • 在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点
      ' + + '
      域名
        ' + + '
        ' + + '
        • 申请之前,请确保域名已解析,如未解析会导致审核失败
        • \ +
        • Let\'s Encrypt免费证书,有效期3个月,支持多域名。默认会自动续签
        • \ +
        • 若您的站点使用了CDN或301重定向会导致续签失败
        • \ +
        • 在未指定SSL默认站点时,未开启SSL的站点使用HTTPS会直接访问到已开启SSL的站点
        ' + '
        '; - var other = '
        '+lan.site.ssl_key+'
        ' - + '
        '+lan.site.ssl_crt+'
        ' - + '
        ' - + ''; + var other = '
        密钥(KEY)
        ' + + '
        证书(PEM格式)
        ' + + '
        ' + + ''; 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' - } - } - $("#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"+lan.site.+"
      • let's Encrypt证书有效期为3个月
      • 3个月有效期后自动续签
      • "); - $("#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){ - $.post('site?action=GetSSL','siteName='+siteName,function(rdata){ + $.post('/site/get_ssl','siteName='+siteName,function(data){ + var rdata = data['data']; if(rdata.csr === false){ setCookie('letssl',0); opSSL(type,id,siteName); return; } - var lets = '
        '+lan.site.ssl_key+'
        ' - + '
        '+lan.site.ssl_crt+'
        ' + var lets = '
        密钥(KEY)
        ' + + '
        证书(PEM格式)
        ' + '
        ' - + '
        • '+lan.site.ssl_help_2+'
        • '+lan.site.ssl_help_3+'
        '; + + '
        • 已为您自动生成Let\'s Encrypt免费证书
        • \ +
        • 如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。
        '; $(".tab-con").html(lets); - $(".help-info-text").after("
        "); - }); + $(".help-info-text").after("
        "); + },'json'); return; } $(".tab-con").html(lets); @@ -1817,13 +1702,15 @@ function opSSL(type,id,siteName){ $(".tab-con").html(other); var key = ''; 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){ - // console.log(data); layer.close(loadT); var rdata = data['data']; + if (rdata.type == 0){ + setCookie('letssl', 1); + } if(rdata.status){ - $(".ssl-btn").append(""); + $(".ssl-btn").append(""); } if(rdata.key == false) rdata.key = ''; if(rdata.csr == false) rdata.csr = ''; @@ -1832,36 +1719,8 @@ function opSSL(type,id,siteName){ },'json'); 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'+lan.site.deploy+'' : ''; - if(rdata.data[i].stateName == lan.site.domain_wait) { - txt = ''+lan.site.domain_validate+''; - //tips = lan.site.domain_check; - //icoask = '?'; - } - if(rdata.data[i].setup){ - txt = lan.site.deployed+' | '+lan.public.close+'
        '; - } - - tr += ''+rdata.data[i].commonName+''+getLocalTime(rdata.data[i].endtime).split(" ")[0]+''+rdata.data[i].stateName+icoask+''+txt+'' - } - $("#ssllist").html(tr); - } - }); -} //一键部署证书 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}); $.post("/ssl?action=Completed","partnerOrderId="+partnerOrderId+'&siteName='+siteName,function(ydata){ layer.close(loadT); @@ -1916,15 +1775,11 @@ function ocSSL(action,siteName){ } 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}); if(action == 'close_ssl_conf'){ layer.msg('已关闭SSL,请务必清除浏览器缓存后再访问站点!',{icon:1,time:5000}); } - $(".bt-w-menu .bgw").click(); + $(".tab-nav .on").click(); },'json'); } @@ -1937,13 +1792,14 @@ function newSSL(siteName,domains){ $.post('/site/create_let','siteName='+siteName+'&domains='+domains+'&updateOf=1&email='+email + force,function(rdata){ layer.close(loadT) if(rdata.status){ - var mykeyhtml = '
        '+lan.site.ssl_key+'
        ' - + '
        '+lan.site.ssl_crt+'
        ' + var mykeyhtml = '
        密钥(KEY)
        ' + + '
        证书(PEM格式)
        ' + '
        ' - + '
        • '+lan.site.ssl_help_2+'
        • '+lan.site.ssl_help_3+'
        '; + + '
        • 已为您自动生成Let\'s Encrypt免费证书;
        • \ +
        • 如需使用其他SSL,请切换其他证书后粘贴您的KEY以及PEM内容,然后保存即可。
        '; $(".btssl").html(mykeyhtml); layer.msg(rdata.msg,{icon:rdata.status?1:2}); - // setCookie('letssl',1); + setCookie('letssl',1); return; } @@ -1956,7 +1812,7 @@ function newSSL(siteName,domains){ data = "

        "+rdata.msg+"


        " if(rdata.err[0].length > 10) data += '

        ' + rdata.err[0].replace(/\n/g,'
        ') + '

        '; if(rdata.err[1].length > 10) data += '

        ' + rdata.err[1].replace(/\n/g,'
        ') + '

        '; - // setCookie('letssl',0); + setCookie('letssl',0); layer.msg(data,{icon:2,area:'500px',time:0,shade:0.3,shadeClose:true}); },'json'); @@ -1978,15 +1834,6 @@ function saveSSL(siteName){ },'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版本 function phpVersion(siteName){ $.post('/site/get_site_php_version','siteName='+siteName,function(version){ @@ -1998,7 +1845,7 @@ function phpVersion(siteName){ $.post('/site/get_php_version',function(rdata){ var versionSelect = "
        \
        \ - "+lan.site.php_ver+"\ + PHP版本\
        \ '+lan.site.enable_nodejs+'\ - \ -
        \ -
          \ -
        • '+lan.site.nodejs_help1+' '+version.nodejsversion+';
        • \ -
        • '+lan.site.nodejs_help2+'
        • \ -
        • '+lan.site.nodejs_help3+'
        • \ -
        \ -
        ' - } $("#webedit-con").html(versionSelect); //验证PHP版本 $("select[name='phpVersion']").change(function(){