pull/632/head
Mr Chen 6 months ago
parent e3070b618f
commit 3894eebfb5
  1. 2
      cli.sh
  2. 20
      panel_task.py
  3. 17
      web/admin/setting/panel_ssl.py
  4. 2
      web/core/mw.py
  5. 20
      web/setting.py
  6. 2
      web/templates/default/setting.html
  7. 3
      web/thisdb/option.py
  8. 2
      web/utils/config.py
  9. 26
      web/utils/setting.py

@ -110,7 +110,7 @@ case "$1" in
mw_start_panel mw_start_panel
;; ;;
'task') 'task')
mw_stop # mw_stop
mw_start_bgtask mw_start_bgtask
;; ;;
esac esac

@ -47,19 +47,6 @@ def writeLogs(data):
except: except:
pass pass
def mw_async(f):
def wrapper(*args, **kwargs):
thr = threading.Thread(target=f, args=args, kwargs=kwargs)
thr.start()
return wrapper
@mw_async
def restartMw():
time.sleep(1)
cmd = mw.getPanelDir() + '/scripts/init.d/mw reload &'
mw.execShell(cmd)
def downloadFile(url, filename): def downloadFile(url, filename):
# 下载文件 # 下载文件
try: try:
@ -298,10 +285,11 @@ def openrestyRestartAtOnce():
# --------------------------------------Panel Restart Start --------------------------------------------- # # --------------------------------------Panel Restart Start --------------------------------------------- #
def restartPanelService(): def restartPanelService():
restartTip = mw.getPanelDir()+'/data/restart.pl' restart_tip = mw.getPanelDir()+'/data/restart.pl'
while True: while True:
if os.path.exists(restartTip): if os.path.exists(restart_tip):
os.remove(restartTip) print("restart panel")
os.remove(restart_tip)
mw.panelCmd('restart_panel') mw.panelCmd('restart_panel')
time.sleep(1) time.sleep(1)
# --------------------------------------Panel Restart End --------------------------------------------- # # --------------------------------------Panel Restart End --------------------------------------------- #

@ -50,3 +50,20 @@ def del_panel_ssl():
choose = request.form.get('choose', '').strip() choose = request.form.get('choose', '').strip()
return MwSetting.instance().delPanelSsl(choose) return MwSetting.instance().delPanelSsl(choose)
# 开启面板证书
@blueprint.route('/set_panel_local_ssl', endpoint='set_panel_local_ssl', methods=['POST'])
@panel_login_required
def set_panel_local_ssl():
cert_type = request.form.get('cert_type', '').strip()
return MwSetting.instance().setPanelLocalSsl(cert_type)
@blueprint.route('/close_panel_ssl', endpoint='close_panel_ssl', methods=['POST'])
@panel_login_required
def close_panel_ssl():
return MwSetting.instance().closePanelSsl()

@ -1298,7 +1298,7 @@ def panelCmd(method):
execShell(cmd + ' ' + method) execShell(cmd + ' ' + method)
return return
cmd = mw.getPanelDir() + '/scripts/init.d/mw' cmd = getPanelDir() + '/scripts/init.d/mw'
if os.path.exists(cmd): if os.path.exists(cmd):
data = execShell(cmd + ' ' + method) data = execShell(cmd + ' ' + method)
return return

@ -21,6 +21,7 @@ import os
import core.mw as mw import core.mw as mw
import utils.system as system import utils.system as system
import thisdb
cpu_info = system.getCpuInfo() cpu_info = system.getCpuInfo()
workers = cpu_info[1] workers = cpu_info[1]
@ -50,16 +51,15 @@ if os.path.exists(default_ipv6_file):
else: else:
bind.append('0.0.0.0:%s' % panel_port) bind.append('0.0.0.0:%s' % panel_port)
panel_ssl_data = thisdb.getOptionByJson('panel_ssl', default={'open':False})
ssl_choose_file = panel_dir+'/ssl/choose.pl' if panel_ssl_data['open']:
if os.path.exists(ssl_choose_file): choose = panel_ssl_data['choose']
ssl_choose = mw.readFile(ssl_choose_file).strip() if mw.inArray(['local','nginx'],choose):
if mw.inArray(['local','nginx'],ssl_choose): panel_cert = panel_dir+'/ssl/'+choose+'/cert.pem'
tmp_cert = panel_dir+'/ssl/'+ssl_choose+'/cert.pem' panel_private = panel_dir+'/ssl/'+choose+'/private.pem'
tmp_private = panel_dir+'/ssl/'+ssl_choose+'/private.pem' if os.path.exists(panel_cert) and os.path.exists(panel_private):
if os.path.exists(tmp_cert) and os.path.exists(tmp_private): certfile = panel_cert
certfile = tmp_cert keyfile = panel_private
keyfile = tmp_private
ciphers = 'TLSv1 TLSv1.1 TLSv1.2 TLSv1.3' ciphers = 'TLSv1 TLSv1.1 TLSv1.2 TLSv1.3'
ssl_version = 2 ssl_version = 2

@ -113,7 +113,7 @@
<p class="mtb15"> <p class="mtb15">
<span class="set-tit text-right" title="面板SSL" style="float: left;">面板SSL</span> <span class="set-tit text-right" title="面板SSL" style="float: left;">面板SSL</span>
<input id="cfg_ssl" name="bind_ssl" class="btswitch btswitch-ios" type="checkbox" {{data['ssl']}}> <input id="cfg_ssl" name="bind_ssl" class="btswitch btswitch-ios" type="checkbox" {% if data['panel_ssl']['open'] %}checked{% endif %}>
<label class="btswitch-btn ml5" for="cfg_ssl" style="float: left;margin-top:4px;"></label> <label class="btswitch-btn ml5" for="cfg_ssl" style="float: left;margin-top:4px;"></label>
<button ype="button" class="btn btn-default btn-xs panel_api_btn" style="vertical-align: middle; margin-left: 10px" onclick="getPanelSSL();">面板SSL配置</button> <button ype="button" class="btn btn-default btn-xs panel_api_btn" style="vertical-align: middle; margin-left: 10px" onclick="getPanelSSL();">面板SSL配置</button>
<span class="set-info c7">为面板设置https协议访问,提升面板访问<b style="color: red;">安全性</b></span> <span class="set-info c7">为面板设置https协议访问,提升面板访问<b style="color: red;">安全性</b></span>

@ -63,5 +63,4 @@ def setOption(name, value,
'type':type, 'type':type,
'value':value 'value':value
} }
mw.M('option').insert(add_option) return mw.M('option').insert(add_option)
return True

@ -83,5 +83,7 @@ def getGlobalVar():
# 邮件通知设置 # 邮件通知设置
data['notify_email'] = thisdb.getOptionByJson('notify_email', default={'open':False}, type='notify') data['notify_email'] = thisdb.getOptionByJson('notify_email', default={'open':False}, type='notify')
data['notify_tgbot'] = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify') data['notify_tgbot'] = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify')
data['panel_ssl'] = thisdb.getOptionByJson('panel_ssl', default={'open':False})
return data return data

@ -13,6 +13,7 @@ import re
import threading import threading
import re import re
import time import time
import json
import core.mw as mw import core.mw as mw
import thisdb import thisdb
@ -164,21 +165,34 @@ class setting(object):
return mw.returnData(False, '未知类型!') return mw.returnData(False, '未知类型!')
# 面板本地SSL设置 # 面板本地SSL设置
def setPanelLocalSsl(self): def setPanelLocalSsl(self, cert_type):
pdir = mw.getPanelDir() panel_ssl_data = thisdb.getOptionByJson('panel_ssl', default={'open':False})
if not panel_ssl_data['open']:
panel_ssl_data['open'] = True
pdir = mw.getPanelDir()
cert = {} cert = {}
keyPath = pdir+'/ssl/local/private.pem' keyPath = pdir+'/ssl/local/private.pem'
certPath = pdir+'/ssl/local/cert.pem' certPath = pdir+'/ssl/local/cert.pem'
if not os.path.exists(certPath): if not os.path.exists(certPath):
mw.createLocalSSL() mw.createLocalSSL()
choose_file = self.__file['ssl'] panel_ssl_data['choose'] = 'local'
mw.writeFile(choose_file, 'local') thisdb.setOption('panel_ssl', json.dumps(panel_ssl_data))
mw.restartMw()
return mw.returnData(True, '设置成功')
def closePanelSsl(self):
panel_ssl_data = thisdb.getOptionByJson('panel_ssl', default={'open':False})
if panel_ssl_data['open']:
panel_ssl_data['open'] = False
thisdb.setOption('panel_ssl', json.dumps(panel_ssl_data))
mw.restartMw() mw.restartMw()
return mw.returnJson(True, '设置成功') return mw.returnData(True, '设置成功')
# 申请面板let证书 # 申请面板let证书
# def applyPanelAcmeSsl(self): # def applyPanelAcmeSsl(self):

Loading…
Cancel
Save