This commit is contained in:
Mr Chen
2024-11-26 23:50:17 +08:00
parent 3894eebfb5
commit 0f1b98721b
6 changed files with 89 additions and 2 deletions
+4
View File
@@ -117,6 +117,10 @@ def requestCheck():
basic_pwd = mw.md5(auth.password.strip() + salt)
if basic_user != basic_auth['basic_user'] or basic_pwd != basic_auth['basic_pwd']:
return sendAuthenticated()
domain_check = mw.checkDomainPanel()
if domain_check:
return domain_check
+11
View File
@@ -57,11 +57,22 @@ 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()
# 设置面板域名
@blueprint.route('/set_panel_domain', endpoint='set_panel_domain', methods=['POST'])
@panel_login_required
def set_panel_domain():
domain = request.form.get('domain', '').strip()
return MwSetting.instance().setPanelDomain(domain)
+52
View File
@@ -420,10 +420,62 @@ def getFileMd5(filename):
return myhash.hexdigest()
def getHost(port=False):
from flask import request
host_tmp = request.headers.get('host')
if not host_tmp:
if request.url_root:
tmp = re.findall(r"(https|http)://([\w:\.-]+)", request.url_root)
if tmp:
host_tmp = tmp[0][1]
if not host_tmp:
host_tmp = getLocalIp() + ':' + readFile('data/port.pl').strip()
try:
if host_tmp.find(':') == -1:
host_tmp += ':80'
except:
host_tmp = "127.0.0.1:8888"
h = host_tmp.split(':')
if port:
return h[-1]
return ':'.join(h[0:-1])
def getClientIp():
from flask import request
return request.remote_addr.replace('::ffff:', '')
def checkDomainPanel():
import thisdb
from flask import Flask, redirect, request, url_for
current_host = getHost()
domain = thisdb.getOption('panel_domain', default='')
port = getPanelPort()
scheme = 'http'
panel_ssl_data = thisdb.getOptionByJson('panel_ssl', default={'open':False})
if panel_ssl_data['open']:
choose = panel_ssl_data['choose']
if not inArray(['local','nginx'], choose):
return False
scheme = 'https'
client_ip = getClientIp()
if client_ip in ['127.0.0.1', 'localhost', '::1']:
return False
ip = getHostAddr()
if domain == '':
if current_host.strip().lower() != ip.strip().lower():
to = scheme + "://" + ip + ":" + str(port)
return redirect(to, code=302)
return False
else:
if current_host.strip().lower() != domain.strip().lower():
to = scheme + "://" + domain + ":" + str(port)
return redirect(to, code=302)
return False
def getLocalIp():
filename = getPanelDir()+'/data/iplist.txt'
try:
+1 -1
View File
@@ -106,7 +106,7 @@
<p class="mtb15">
<span class="set-tit text-right" title="绑定域名" style="float: left;">绑定域名</span>
<input name="bind_domain" class="inputtxt bt-input-text" type="text" value="{{data['bind_domain']}}">
<input name="bind_domain" class="inputtxt bt-input-text" type="text" value="{{data['panel_domain']}}">
<button type="button" class="btn btn-success btn-sm ml5 btn_bind_domain" disabled>保存</button>
<span class="set-info c7">为面板绑定一个访问域名,<b style="color: red;">注意:一旦绑定域名,只能通过域名访问面板</b></span>
</p>
+2
View File
@@ -85,5 +85,7 @@ def getGlobalVar():
data['notify_tgbot'] = thisdb.getOptionByJson('notify_tgbot', default={'open':False}, type='notify')
data['panel_ssl'] = thisdb.getOptionByJson('panel_ssl', default={'open':False})
data['panel_domain'] = thisdb.getOption('panel_domain', default='')
return data
+19 -1
View File
@@ -270,4 +270,22 @@ class setting(object):
# if is_already_apply:
# return mw.returnJson(True, '重复申请!', data)
# return mw.returnJson(True, '申请成功!', data)
# return mw.returnJson(True, '申请成功!', data)
def setPanelDomain(self, domain):
port = mw.getPanelPort()
ip = mw.getLocalIp()
panel_domain = thisdb.getOption('panel_domain', default='')
if domain == '':
to_panel_url = 'http://'+ip+":"+str(port)+'/setting/index'
thisdb.setOption('panel_domain', '')
mw.restartMw()
return mw.returnData(True, '清空域名成功!', to_panel_url)
thisdb.setOption('panel_domain', domain)
to_panel_url = 'http://'+domain+":"+str(port)+'/setting/index'
mw.restartMw()
return mw.returnData(True, '设置域名成功!',to_panel_url)