diff --git a/cli.sh b/cli.sh index 084f81840..6c0fbf97c 100755 --- a/cli.sh +++ b/cli.sh @@ -110,7 +110,7 @@ case "$1" in mw_start_panel ;; 'task') - mw_stop + # mw_stop mw_start_bgtask ;; esac \ No newline at end of file diff --git a/panel_task.py b/panel_task.py index ce12b9641..859beeebb 100755 --- a/panel_task.py +++ b/panel_task.py @@ -47,19 +47,6 @@ def writeLogs(data): except: 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): # 下载文件 try: @@ -298,10 +285,11 @@ def openrestyRestartAtOnce(): # --------------------------------------Panel Restart Start --------------------------------------------- # def restartPanelService(): - restartTip = mw.getPanelDir()+'/data/restart.pl' + restart_tip = mw.getPanelDir()+'/data/restart.pl' while True: - if os.path.exists(restartTip): - os.remove(restartTip) + if os.path.exists(restart_tip): + print("restart panel") + os.remove(restart_tip) mw.panelCmd('restart_panel') time.sleep(1) # --------------------------------------Panel Restart End --------------------------------------------- # diff --git a/web/admin/setting/panel_ssl.py b/web/admin/setting/panel_ssl.py index bf903a495..d6823c0f7 100644 --- a/web/admin/setting/panel_ssl.py +++ b/web/admin/setting/panel_ssl.py @@ -50,3 +50,20 @@ def del_panel_ssl(): choose = request.form.get('choose', '').strip() 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() + + + + + + diff --git a/web/core/mw.py b/web/core/mw.py index 4564d6825..55c527e44 100644 --- a/web/core/mw.py +++ b/web/core/mw.py @@ -1298,7 +1298,7 @@ def panelCmd(method): execShell(cmd + ' ' + method) return - cmd = mw.getPanelDir() + '/scripts/init.d/mw' + cmd = getPanelDir() + '/scripts/init.d/mw' if os.path.exists(cmd): data = execShell(cmd + ' ' + method) return diff --git a/web/setting.py b/web/setting.py index 8defa4abe..57e9d86a7 100755 --- a/web/setting.py +++ b/web/setting.py @@ -21,6 +21,7 @@ import os import core.mw as mw import utils.system as system +import thisdb cpu_info = system.getCpuInfo() workers = cpu_info[1] @@ -50,16 +51,15 @@ if os.path.exists(default_ipv6_file): else: bind.append('0.0.0.0:%s' % panel_port) - -ssl_choose_file = panel_dir+'/ssl/choose.pl' -if os.path.exists(ssl_choose_file): - ssl_choose = mw.readFile(ssl_choose_file).strip() - if mw.inArray(['local','nginx'],ssl_choose): - tmp_cert = panel_dir+'/ssl/'+ssl_choose+'/cert.pem' - tmp_private = panel_dir+'/ssl/'+ssl_choose+'/private.pem' - if os.path.exists(tmp_cert) and os.path.exists(tmp_private): - certfile = tmp_cert - keyfile = tmp_private +panel_ssl_data = thisdb.getOptionByJson('panel_ssl', default={'open':False}) +if panel_ssl_data['open']: + choose = panel_ssl_data['choose'] + if mw.inArray(['local','nginx'],choose): + panel_cert = panel_dir+'/ssl/'+choose+'/cert.pem' + panel_private = panel_dir+'/ssl/'+choose+'/private.pem' + if os.path.exists(panel_cert) and os.path.exists(panel_private): + certfile = panel_cert + keyfile = panel_private ciphers = 'TLSv1 TLSv1.1 TLSv1.2 TLSv1.3' ssl_version = 2 diff --git a/web/templates/default/setting.html b/web/templates/default/setting.html index eb8bd401c..3d1d068fc 100755 --- a/web/templates/default/setting.html +++ b/web/templates/default/setting.html @@ -113,7 +113,7 @@
面板SSL - + 为面板设置https协议访问,提升面板访问安全性 diff --git a/web/thisdb/option.py b/web/thisdb/option.py index 767078425..eaf373dcb 100644 --- a/web/thisdb/option.py +++ b/web/thisdb/option.py @@ -63,5 +63,4 @@ def setOption(name, value, 'type':type, 'value':value } - mw.M('option').insert(add_option) - return True \ No newline at end of file + return mw.M('option').insert(add_option) \ No newline at end of file diff --git a/web/utils/config.py b/web/utils/config.py index bc8307893..b6112ddc7 100644 --- a/web/utils/config.py +++ b/web/utils/config.py @@ -83,5 +83,7 @@ def getGlobalVar(): # 邮件通知设置 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['panel_ssl'] = thisdb.getOptionByJson('panel_ssl', default={'open':False}) return data \ No newline at end of file diff --git a/web/utils/setting.py b/web/utils/setting.py index bd9cd4a29..5ce5f1fcf 100644 --- a/web/utils/setting.py +++ b/web/utils/setting.py @@ -13,6 +13,7 @@ import re import threading import re import time +import json import core.mw as mw import thisdb @@ -164,21 +165,34 @@ class setting(object): return mw.returnData(False, '未知类型!') # 面板本地SSL设置 - def setPanelLocalSsl(self): - pdir = mw.getPanelDir() + def setPanelLocalSsl(self, cert_type): + 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 = {} keyPath = pdir+'/ssl/local/private.pem' certPath = pdir+'/ssl/local/cert.pem' - if not os.path.exists(certPath): mw.createLocalSSL() - choose_file = self.__file['ssl'] - mw.writeFile(choose_file, 'local') - + panel_ssl_data['choose'] = 'local' + thisdb.setOption('panel_ssl', json.dumps(panel_ssl_data)) mw.restartMw() - return mw.returnJson(True, '设置成功') + 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() + return mw.returnData(True, '设置成功') + # 申请面板let证书 # def applyPanelAcmeSsl(self):