function modify_port_val(port){
layer.open({
type: 1,
area: '400px',
title: '修改端口',
closeBtn:2,
shadeClose: false,
btn:['确认','取消'],
content: '
',
yes:function(index,layero){
var check_port = $('#check_port').prop('checked'),_tips = '';
if(!check_port){
_tips = layer.tips('请勾选我已了解', '#check_port', {tips:[1,'#ff0000'],time:5000});
return false;
}
layer.close(_tips);
$('#banport').val($('[name="portss"]').val());
var _data = $("#set-Config").serializeObject();
_data['port'] = $('[name="portss"]').val();
var loadT = layer.msg(lan.config.config_save,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPanel',_data,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status){
layer.close(index);
setTimeout(function(){
window.location.href = ((window.location.protocol.indexOf('https') != -1)?'https://':'http://') + rdata.host + window.location.pathname;
},4000);
}
});
},
success:function(){
$('#check_port').click(function(){
layer.closeAll('tips');
});
}
});
}
$.fn.serializeObject = function(){
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name]) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
//关闭面板
function ClosePanel(){
layer.confirm(lan.config.close_panel_msg,{title:lan.config.close_panel_title,closeBtn:2,icon:13,cancel:function(){
$("#closePl").prop("checked",false);
}}, function() {
$.post('/config?action=ClosePanel','',function(rdata){
layer.msg(rdata.msg,{icon:rdata.status?1:2});
setTimeout(function(){window.location.reload();},1000);
});
},function(){
$("#closePl").prop("checked",false);
});
}
//设置自动更新
function SetPanelAutoUpload(){
loadT = layer.msg(lan.public.config,{icon:16,time:0});
$.post('/config?action=AutoUpdatePanel','',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
$('#panel_verification').click(function(){
var _checked = $(this).prop('checked');
if(_checked){
layer.open({
type: 1,
area: ['500px','530px'],
title: 'Google身份认证绑定',
closeBtn: 2,
shift: 5,
shadeClose: false,
content: '',
success:function(layers,index){
$('.submit_verify').click(function(e){
var check_verification = $('#check_verification').prop('checked');
if(!check_verification){
layer.msg('请先勾选同意风险',{icon:0});
return false;
}
var loadT = layer.msg('正在开启Google身份认证,请稍后...', { icon: 16, time: 0, shade: [0.3, '#000'] });
set_two_step_auth({act:_checked},function(rdata){
layer.close(loadT);
if (rdata.status) layer.closeAll();
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
if(rdata.status && _checked){
$('.open_two_verify_view').click();
}
});
});
$('.close_verify').click(function(){
layer.closeAll();
$('#panel_verification').prop('checked',!_checked);
});
},cancel:function () {
layer.closeAll();
$('#panel_verification').prop('checked',!_checked);
}
});
}else{
bt.confirm({
title: 'Google身份认证',
msg: '是否关闭Google身份认证,是否继续?',
cancel: function () {
$('#panel_verification').prop('checked',!_checked);
}}, function () {
var loadT = layer.msg('正在关闭Google身份认证,请稍后...', { icon: 16, time: 0, shade: [0.3, '#000'] });
set_two_step_auth({act:_checked},function(rdata){
layer.close(loadT);
if (rdata.status) layer.closeAll();
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
if(rdata.status && _checked){
$('.open_two_verify_view').click();
}
});
},function () {
$('#panel_verification').prop('checked',!_checked);
});
}
// console.log(_data);
});
$('.open_two_verify_view').click(function(){
var _checked = $('#panel_verification').prop('checked');
if(!_checked){
layer.msg('请先开启Google身份认证服务',{icon:0});
return false;
}
layer.open({
type: 1,
area: ['600px','670px'],
title: 'Google身份认证绑定',
closeBtn: 2,
shift: 5,
shadeClose: false,
content: '',
success:function(e){
get_two_verify(function(res){
$('.verify_box_line .username').html(res.username);
$('.verify_box_line .userkey').html(res.key);
});
get_qrcode_data(function(res){
jQuery('#verify_qrcode').qrcode({
render: "canvas",
text: res,
height:150,
width:150
});
});
}
});
});
(function(){
check_two_step(function(res){
$('#panel_verification').prop('checked',res.status);
});
})()
function check_two_step(callback){
$.post('/config?action=check_two_step',function(res){
if(callback) callback(res);
});
}
function get_qrcode_data(callback){
$.post('/config?action=get_qrcode_data',function(res){
if(callback) callback(res);
});
}
function get_two_verify(callback){
$.post('/config?action=get_key',function(res){
if(callback) callback(res);
});
}
function set_two_step_auth(obj,callback){
$.post('/config?action=set_two_step_auth',{act:obj.act?1:0},function(res){
if(callback) callback(res);
});
}
$(".set-submit").click(function(){
var data = $("#set-Config").serialize();
layer.msg(lan.config.config_save,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=setPanel',data,function(rdata){
layer.closeAll();
layer.msg(rdata.msg,{icon:rdata.status?1:2});
if(rdata.status){
setTimeout(function(){
window.location.href = ((window.location.protocol.indexOf('https') != -1)?'https://':'http://') + rdata.host + window.location.pathname;
},1500);
}
});
});
function modify_auth_path() {
var auth_path = $("#admin_path").val();
btn = "";
layer.open({
type: 1,
area: "500px",
title: "修改安全入口",
closeBtn: 2,
shift: 5,
shadeClose: false,
content: ''
})
}
function set_auth_path() {
var auth_path = $("input[name='auth_path_set']").val();
var loadT = layer.msg(lan.config.config_save, { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=set_admin_path', { admin_path: auth_path }, function (rdata) {
layer.close(loadT);
if (rdata.status) {
layer.closeAll();
$("#admin_path").val(auth_path);
}
setTimeout(function () { layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 }); }, 200);
});
}
function syncDate() {
var loadT = layer.msg(lan.config.config_sync,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=syncDate','',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:1});
setTimeout(function(){
window.location.reload();
},1500);
});
}
//PHP守护程序
function Set502(){
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=Set502','',function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
//绑定修改宝塔账号
function bindBTName(a,type){
var titleName = lan.config.config_user_binding;
if(type == "b"){
btn = "";
}
else{
titleName = lan.config.config_user_edit;
btn = "";
}
if(a == 1) {
p1 = $("#p1").val();
p2 = $("#p2").val();
var loadT = layer.msg(lan.config.token_get,{icon:16,time:0,shade: [0.3, '#000']});
$.post(" /ssl?action=GetToken", "username=" + p1 + "&password=" + p2, function(b){
layer.close(loadT);
layer.msg(b.msg, {icon: b.status?1:2});
if(b.status) {
window.location.reload();
$("input[name='btusername']").val(p1);
}
});
return
}
layer.open({
type: 1,
area: "290px",
title: titleName,
closeBtn: 2,
shift: 5,
shadeClose: false,
content: ""
})
}
//解除绑定宝塔账号
function UnboundBt(){
var name = $("input[name='btusername']").val();
layer.confirm(lan.config.binding_un_msg,{closeBtn:2,icon:3,title:lan.config.binding_un},function(){
$.get("/ssl?action=DelToken",function(b){
layer.msg(b.msg,{icon:b.status? 1:2})
$("input[name='btusername']").val('');
})
})
}
//设置API
function apiSetup(){
var loadT = layer.msg(lan.config.token_get,{icon:16,time:0,shade: [0.3, '#000']});
$.get('/api?action=GetToken',function(rdata){
layer.close(loadT);
});
}
//设置模板
function setTemplate(){
var template = $("select[name='template']").val();
var loadT = layer.msg(lan.public.the,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=SetTemplates','templates='+template,function(rdata){
layer.close(loadT);
layer.msg(rdata.msg,{icon:rdata.status?1:5});
if(rdata.status === true){
$.get('/system?action=ReWeb',function(){});
setTimeout(function(){
window.location.reload();
},3000);
}
});
}
//设置面板SSL
function setPanelSSL(){
var status = $("#panelSSL").prop("checked");
var loadT = layer.msg(lan.config.ssl_msg,{icon:16,time:0,shade: [0.3, '#000']});
if(status){
var confirm = layer.confirm('是否关闭面板SSL证书', {title:'提示',btn: ['确定','取消'],icon:0,closeBtn:2}, function() {
bt.send('SetPanelSSL', 'config/SetPanelSSL', {}, function (rdata) {
layer.close(loadT);
if (rdata.status) {
layer.msg(rdata.msg,{icon:1});
$.get('/system?action=ReWeb', function () {
});
setTimeout(function () {
window.location.href = ((window.location.protocol.indexOf('https') != -1) ? 'http://' : 'https://') + window.location.host + window.location.pathname;
}, 1500);
}
else {
layer.msg(res.rdata,{icon:2});
}
});
return;
})
}
else {
bt.send('get_cert_source', 'config/get_cert_source', {}, function (rdata) {
layer.close(loadT);
var sdata = rdata;
var _data = {
title: '面板SSL',
area: '530px',
class:'ssl_cert_from',
list: [
{
html:''+lan.config.ssl_open_ps+'
- '+lan.config.ssl_open_ps_1+'
- '+lan.config.ssl_open_ps_2+'
- '+lan.config.ssl_open_ps_3+'
'
},
{
title: '类型',
name: 'cert_type',
type: 'select',
width: '200px',
value: sdata.cert_type,
items: [{value: '1', title: '自签证书'}, {value: '2', title: 'Let\'s Encrypt'}],
callback: function (obj) {
var subid = obj.attr('name') + '_subid';
$('#' + subid).remove();
if (obj.val() == '2') {
var _tr = bt.render_form_line({
title: '管理员邮箱',
name: 'email',
width: '250px',
placeholder: '管理员邮箱',
value: sdata.email
});
obj.parents('div.line').append('' + _tr.html + '
');
}
}
},
{
html:''
}
],
btns: [
{
title: '关闭', name: 'close', callback: function (rdata, load, callback) {
load.close();
$("#panelSSL").prop("checked", false);
}
},
{
title: '提交', name: 'submit', css: 'btn-success', callback: function (rdata, load, callback) {
if(!$('#checkSSL').is(':checked')){
bt.msg({status:false,msg:'请先确认风险!'})
return;
}
var confirm = layer.confirm('是否开启面板SSL证书', {title:'提示',btn: ['确定','取消'],icon:0,closeBtn:2}, function() {
var loading = bt.load();
bt.send('SetPanelSSL', 'config/SetPanelSSL', rdata, function (rdata) {
loading.close()
if (rdata.status) {
layer.msg(rdata.msg,{icon:1});
$.get('/system?action=ReWeb', function () {
});
setTimeout(function () {
window.location.href = ((window.location.protocol.indexOf('https') != -1) ? 'http://' : 'https://') + window.location.host + window.location.pathname;
}, 1500);
}
else {
layer.msg(rdata.msg,{icon:2});
}
})
});
}
}
],
end: function () {
$("#panelSSL").prop("checked", false);
}
};
var _bs = bt.render_form(_data);
setTimeout(function () {
$('.cert_type' + _bs).trigger('change')
}, 200);
});
}
}
function GetPanelSSL(){
var loadT = layer.msg('正在获取证书信息...',{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=GetPanelSSL',{},function(cert){
layer.close(loadT);
var certBody = '\
\
密钥(KEY)
\
\
\
证书(PEM格式)
\
\
\
\
\
\
\
\
- 粘贴您的*.key以及*.pem内容,然后保存即可[帮助]。
\
- 如果浏览器提示证书链不完整,请检查是否正确拼接PEM证书
- PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt
\
\
'
layer.open({
type: 1,
area: "600px",
title: '自定义面板证书',
closeBtn: 2,
shift: 5,
shadeClose: false,
content:certBody
});
});
}
function SavePanelSSL(){
var data = {
privateKey:$("#key").val(),
certPem:$("#csr").val()
}
var loadT = layer.msg(lan.config.ssl_msg,{icon:16,time:0,shade: [0.3, '#000']});
$.post('/config?action=SavePanelSSL',data,function(rdata){
layer.close(loadT);
if(rdata.status){
layer.closeAll();
}
layer.msg(rdata.msg,{icon:rdata.status?1:2});
});
}
function SetDebug() {
var status_s = {false:'开启',true:'关闭'}
var debug_stat = $("#panelDebug").prop('checked');
bt.confirm({
title: status_s[debug_stat] + "开发者模式",
msg: "开启开发者模式后面板可能会占用大量内存开销,您真的要"+ status_s[debug_stat]+"开发者模式?",
cancel: function () {
$("#panelDebug").prop('checked',debug_stat);
}}, function () {
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=set_debug', {}, function (rdata) {
layer.close(loadT);
if (rdata.status) layer.closeAll()
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
},function () {
$("#panelDebug").prop('checked',debug_stat);
});
}
function set_local() {
var status_s = { false: '开启', true: '关闭' }
var debug_stat = $("#panelLocal").prop('checked');
bt.confirm({
title: status_s[debug_stat] + "离线模式",
msg: "您真的要"+ status_s[debug_stat] + "离线模式 ?",
cancel: function () {
$("#panelLocal").prop('checked',debug_stat);
}}, function () {
var loadT = layer.msg(lan.public.the, { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=set_local', {}, function (rdata) {
layer.close(loadT);
if (rdata.status) layer.closeAll();
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
},function () {
$("#panelLocal").prop('checked',debug_stat);
});
}
if(window.location.protocol.indexOf('https') != -1){
$("#panelSSL").attr('checked',true);
}
var weChat = {
settiming:'',
relHeight:500,
relWidth:500,
userLength:'',
init:function(){
var _this = this;
$('.layui-layer-page').css('display', 'none');
$('.layui-layer-page').width(_this.relWidth);
$('.layui-layer-page').height(_this.relHeight);
$('.bt-w-menu').height((_this.relWidth - 1) - $('.layui-layer-title').height());
var width = $(document).width();
var height = $(document).height();
var boxwidth = (width / 2) - (_this.relWidth / 2);
var boxheight = (height / 2) - (_this.relHeight / 2);
$('.layui-layer-page').css({
'left':boxwidth +'px',
'top':boxheight+'px'
});
$('.boxConter,.layui-layer-page').css('display', 'block');
$('.layui-layer-close').click(function(event) {
window.clearInterval(_this.settiming);
});
this.getUserDetails();
$('.iconCode').hide();
$('.personalDetails').show();
},
// 获取二维码
getQRCode:function(){
var _this = this;
var qrLoading = layer.msg('正在获取二维码,请稍后...',{time:0,shade: [0.4,'#fff'],icon:16});
$.get('/wxapp?action=blind_qrcode', function(res) {
layer.close(qrLoading);
if (res.status){
$('#QRcode').empty();
$('#QRcode').qrcode({
render: "canvas", //也可以替换为table
width: 200,
height: 200,
text:res.msg
});
// $('.QRcode img').attr('src', res.msg);
_this.settiming = setInterval(function(){
_this.verifyBdinding();
},2000);
}else{
layer.msg('无法获取二维码,请稍后重试',{icon:2});
}
});
},
// 获取用户信息
getUserDetails:function(type){
var _this = this;
var conter = '';
$.get('/wxapp?action=get_user_info',function(res){
clearInterval(_this.settiming);
if (!res.status){
layer.msg(res.msg,{icon:2,time:3000});
$('.iconCode').hide();
return false;
}
if (JSON.stringify(res.msg) =='{}'){
if (type){
layer.msg('当前绑定列表为空,请先绑定然后重试',{icon:2});
}else{
_this.getQRCode();
}
$('.iconCode').show();
$('.personalDetails').hide();
return false;
}
$('.iconCode').hide();
$('.personalDetails').show();
var datas = res.msg;
for(var item in datas){
conter += '\
\
昵称:'+datas[item].nickName+'
\
\
'
}
conter += '添加绑定账号'
$('.userList').empty().append(conter);
});
},
// 添加绑定视图
addweChatView:function(){
$('.iconCode').show();
$('.personalDetails').hide();
this.getQRCode();
},
// 取消当前绑定
cancelBdinding:function(uid){
var _this = this;
var bdinding = layer.confirm('您确定要取消当前绑定吗?',{
btn:['确认','取消'],
icon:3,
title:'取消绑定'
},function(){
$.get('/wxapp?action=blind_del',{uid:uid}, function(res) {
layer.msg(res.msg,{icon:res.status?1:2});
_this.getUserDetails();
});
},function(){
layer.close(bdinding);
});
},
// 监听是否绑定
verifyBdinding:function(){
var _this = this;
$.get('/wxapp?action=blind_result',function(res){
if(res){
layer.msg('绑定成功',{icon:1});
clearInterval(_this.settiming);
_this.getUserDetails();
}
});
},
}
function open_wxapp(){
var rhtml = '\
\
\
\
\
\
- 1、打开宝塔面板小程序小程序二维码
\
- 2、使用宝塔小程序扫描当前二维码,绑定该面板
\
\
查看绑定列表\
\
\
\
\
'
layer.open({
type: 1,
title: "绑定微信",
area: '500px',
closeBtn: 2,
shadeClose: false,
content:rhtml
});
weChat.init();
}
$(function () {
$.get("/ssl?action=GetUserInfo", function (b) {
if (b.status) {
$("input[name='btusername']").val(b.data.username);
$("input[name='btusername']").next().text(lan.public.edit).attr("onclick", "bindBTName(2,'c')").css({ "margin-left": "-82px" });
$("input[name='btusername']").next().after('' + lan.config.binding_un + '');
}
else {
$("input[name='btusername']").next().text(lan.config.binding).attr("onclick", "bindBTName(2,'b')").removeAttr("style");
}
bt_init();
});
})
function bt_init() {
var btName = $("input[name='btusername']").val();
console.log(btName);
if (!btName) {
$('.wxapp_p .inputtxt').val("未绑定宝塔账号");
$('.wxapp_p .modify').attr("onclick", "");
}
}
function GetPanelApi() {
var loadT = layer.msg('正在获取API接口信息...', { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=get_token', {}, function (rdata) {
layer.close(loadT);
isOpen = rdata.open ? 'checked' : '';
layer.open({
type: 1,
area: "500px",
title: "配置面板API",
closeBtn: 2,
shift: 5,
shadeClose: false,
content: ' '
})
});
}
function showPawApi(){
layer.msg('面板API密钥仅支持一次性显示,请妥善保管。
如需显示面板API密钥,请点击重置按钮,重新获取新的API密钥。
注意事项:重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。',{icon:0,time:0,shadeClose:true,shade:0.1});
}
function SetPanelApi(t_type,index) {
var pdata = {}
pdata['t_type'] = t_type
if (t_type == 3) {
pdata['limit_addr'] = $("textarea[name='api_limit_addr']").val()
}
if(t_type == 1){
var bdinding = layer.confirm('您确定要重置当前密钥吗?
重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。',{
btn:['确认','取消'],
icon:3,
closeBtn: 2,
title:'重置密钥'
},function(){
var loadT = layer.msg('正在提交...', { icon: 16, time: 0, shade: [0.3, '#000'] });
set_token_req(pdata,function(rdata){
if (rdata.status) {
$("input[name='panel_token_value']").val(rdata.msg);
layer.msg('接口密钥已生成,重置密钥后,已关联密钥产品,将失效,请重新添加新密钥至产品。', { icon: 1, time: 0, shade: 0.3, shadeClose:true,closeBtn:2});
}else{
layer.msg(rdata.msg, { icon: 2});
}
return false;
});
});
return false
}
set_token_req(pdata,function(rdata){
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
if (rdata.msg == '开启成功!') {
if(t_type == 2 && index != '0') GetPanelApi();
}
});
}
function set_token_req(pdata,callback){
$.post('/config?action=set_token', pdata, function (rdata) {
if(callback) callback(rdata);
});
}
function SetIPv6() {
var loadT = layer.msg('正在配置,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=set_ipv6_status', {}, function (rdata) {
layer.close(loadT);
bt.msg(rdata);
});
}
function modify_basic_auth_to() {
var pdata = {
open: $("select[name='open']").val(),
basic_user: $("input[name='basic_user']").val(),
basic_pwd: $("input[name='basic_pwd']").val()
}
var loadT = layer.msg('正在配置BasicAuth服务,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=set_basic_auth', pdata, function (rdata) {
layer.close(loadT);
if (rdata.status) {
layer.closeAll();
setTimeout(function () { window.location.reload(); }, 3000);
}
layer.msg(rdata.msg, { icon: rdata.status ? 1 : 2 });
});
}
function modify_basic_auth() {
var loadT = layer.msg('正在获取配置,请稍候...', { icon: 16, time: 0, shade: [0.3, '#000'] });
$.post('/config?action=get_basic_auth_stat', {}, function (rdata) {
layer.close(loadT);
if (rdata.open) {
show_basic_auth(rdata);
} else {
m_html = ''
+ '
危险!此功能不懂别开启!
'
+ '
'
+ '- 必须要用到且了解此功能才决定自己是否要开启!
'
+ '- 开启后,以任何方式访问面板,将先要求输入BasicAuth用户名和密码
'
+ '- 开启后,能有效防止面板被扫描发现,但并不能代替面板本身的帐号密码
'
+ '- 请牢记BasicAuth密码,一但忘记将无法访问面板
'
+ '- 如忘记密码,可在SSH通过bt命令来关闭BasicAuth验证
'
+ '
'
+ ''
var loadT = layer.confirm(m_html, { title: "风险提醒", area: "600px" }, function () {
if (!$("#check_basic").prop("checked")) {
layer.msg("请仔细阅读注意事项,并勾选同意承担风险!");
setTimeout(function () { modify_basic_auth();},3000)
return;
}
layer.close(loadT)
show_basic_auth(rdata);
});
}
});
}
function show_basic_auth(rdata) {
layer.open({
type: 1,
area: "500px",
title: "配置BasicAuth认证",
closeBtn: 2,
shift: 5,
shadeClose: false,
content: ' '
})
}