pull/632/head
Mr Chen 6 months ago
parent bcfdd22161
commit accdb5834d
  1. 51
      web/admin/setting/temp_login.py
  2. 4
      web/admin/setup/sql/default.sql
  3. 75
      web/admin/site/__init__.py
  4. 31
      web/core/mw.py
  5. 4
      web/static/app/site.js
  6. 4
      web/thisdb/__init__.py
  7. 37
      web/thisdb/binding.py
  8. 30
      web/thisdb/domain.py
  9. 43
      web/thisdb/sites.py
  10. 50
      web/thisdb/temp_login.py
  11. 2
      web/thisdb/user.py
  12. 303
      web/utils/site.py

@ -23,6 +23,7 @@ from admin.user_login_check import panel_login_required
import core.mw as mw
import utils.config as utils_config
import thisdb
from .setting import blueprint
@ -34,24 +35,11 @@ def get_temp_login():
p = request.form.get('page', '1').strip()
tojs = request.form.get('tojs', '').strip()
count = TempLogin.query.filter_by().count()
pagination = TempLogin.query.filter_by().order_by(TempLogin.expire.desc()).paginate(page=int(p), per_page=int(limit))
rows = []
for item in pagination.items:
t = {}
t['id'] = item.id
t['salt'] = item.salt
t['state'] = item.state
t['expire'] = item.expire
t['login_time'] = item.login_time
t['login_addr'] = item.login_addr
t['add_time'] = item.add_time
rows.append(t)
info = thisdb.getTempLoginPage(int(p), int(limit))
data = {}
data['data'] = rows
data['page'] = mw.getPage({'count':count,'tojs':'setTempAccessReq','p':p,'row':limit})
data['data'] = info['list']
data['page'] = mw.getPage({'count':info['count'],'tojs':'setTempAccessReq','p':p,'row':limit})
return data
@blueprint.route('/set_temp_login', endpoint='set_temp_login', methods=['POST'])
@ -59,38 +47,27 @@ def get_temp_login():
def set_temp_login():
# if 'tmp_login_expire' in session:
# return mw.returnData(False, '没有权限')
start_time = int(time.time())
model.clearTempLogin()
token = mw.getRandomString(48)
salt = mw.getRandomString(12)
thisdb.clearTempLogin()
start_time = int(time.time())
expire = start_time+3600
make_token = mw.md5(token + salt)
add_tl = TempLogin(
token=make_token,
salt=salt,
state=0,
login_time=0,
login_addr='',
expire=expire,
add_time=start_time)
r = db.session.add(add_tl)
db.session.commit()
if r is None:
rand_str = mw.getRandomString(48)
token = mw.md5(rand_str)
r = thisdb.addTempLogin(token, expire)
if r > 0:
mw.writeLog('面板设置', '生成临时连接,过期时间:{}'.format(mw.formatDate(times=expire)))
return {'status': True, 'msg': "临时连接已生成", 'token': make_token, 'expire': expire}
return {'status': True, 'msg': "临时连接已生成", 'token': token, 'expire': expire}
return mw.returnData(False, '连接生成失败')
@blueprint.route('/remove_temp_login', endpoint='remove_temp_login', methods=['POST'])
@panel_login_required
def remove_temp_login():
tl_id = request.form.get('id', '10').strip()
r = TempLogin.query.filter(TempLogin.id == tl_id).delete()
db.session.commit()
r = thisdb.deleteTempLoginById(tl_id)
if r > 0:
mw.writeLog('面板设置', '删除临时登录连接')
return mw.returnData(True, '删除成功')

@ -12,9 +12,9 @@ CREATE TABLE IF NOT EXISTS `backup` (
CREATE TABLE IF NOT EXISTS `binding` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`pid` INTEGER,
`port` INTEGER,
`domain` TEXT,
`path` TEXT,
`port` INTEGER,
`add_time` TEXT
);
@ -49,7 +49,7 @@ CREATE TABLE IF NOT EXISTS `firewall` (
ALTER TABLE `firewall` ADD COLUMN `protocol` TEXT DEFAULT 'tcp';
INSERT INTO `firewall` (`id`, `port`, `protocol`, `ps`, `add_time`) VALUES
INSERT INTO `firewall` (`id`, `port`, `protocol`, `ps`, `add_time`, `update_time`) VALUES
(1, '80', 'tcp','网站默认端口', '0000-00-00 00:00:00','0000-00-00 00:00:00'),
(2, '443', 'tcp/udp', 'HTTPS', '0000-00-00 00:00:00','0000-00-00 00:00:00');

@ -17,6 +17,7 @@ from admin.model import Sites
from admin.user_login_check import panel_login_required
from utils.plugin import plugin as MwPlugin
from utils.site import sites as MwSites
import utils.site as site
import core.mw as mw
import thisdb
@ -51,7 +52,15 @@ def add():
path = request.form.get('path', '')
version = request.form.get('version', '')
port = request.form.get('port', '')
return []
return MwSites.instance().add(webname, port, ps, path, version)
# 站点删除
@blueprint.route('/delete', endpoint='delete',methods=['POST'])
@panel_login_required
def delete():
site_id = request.form.get('id', '')
path = request.form.get('path', '')
return MwSites.instance().delete(site_id, path)
# 获取站点类型
@blueprint.route('/get_site_types', endpoint='get_site_types',methods=['POST'])
@ -87,9 +96,39 @@ def check_web_status():
@blueprint.route('/get_php_version', endpoint='get_php_version',methods=['POST'])
@panel_login_required
def get_php_version():
return site.getPhpVersion()
return MwSites.instance().getPhpVersion()
# 设置网站到期
@blueprint.route('/set_end_date', endpoint='set_end_date',methods=['POST'])
@panel_login_required
def set_end_date():
site_id = request.form.get('id', '')
edate = request.form.get('edate', '')
return MwSites.instance().setEndDate(site_id, edate)
# 设置网站备注
@blueprint.route('/set_ps', endpoint='set_ps',methods=['POST'])
@panel_login_required
def set_ps():
site_id = request.form.get('id', '')
ps = request.form.get('ps', '')
return MwSites.instance().setPs(site_id, ps)
# 设置默认网站信息
@blueprint.route('/get_default_site', endpoint='get_default_site',methods=['POST'])
@panel_login_required
def get_default_site():
return MwSites.instance().getDefaultSite()
@blueprint.route('/set_default_site', endpoint='set_default_site',methods=['POST'])
@panel_login_required
def set_default_site():
name = request.form.get('name', '')
return MwSites.instance().setDefaultSite(name)
@blueprint.route('/get_cli_php_version', endpoint='get_cli_php_version',methods=['POST'])
@panel_login_required
def get_cli_php_version():
@ -98,7 +137,7 @@ def get_cli_php_version():
return mw.returnData(False, '未安装PHP,无法设置')
php_bin = '/usr/bin/php'
php_versions = site.getPhpVersion()
php_versions = MwSites.instance().getPhpVersion()
php_versions = php_versions[1:]
if len(php_versions) < 1:
@ -117,35 +156,7 @@ def get_cli_php_version():
def set_cli_php_version():
if mw.isAppleSystem():
return mw.returnData(False, "开发机不可设置!")
version = request.form.get('version', '')
php_bin = '/usr/bin/php'
php_bin_src = "/www/server/php/%s/bin/php" % version
php_ize = '/usr/bin/phpize'
php_ize_src = "/www/server/php/%s/bin/phpize" % version
php_fpm = '/usr/bin/php-fpm'
php_fpm_src = "/www/server/php/%s/sbin/php-fpm" % version
php_pecl = '/usr/bin/pecl'
php_pecl_src = "/www/server/php/%s/bin/pecl" % version
php_pear = '/usr/bin/pear'
php_pear_src = "/www/server/php/%s/bin/pear" % version
if not os.path.exists(php_bin_src):
return mw.returnData(False, '指定PHP版本未安装!')
is_chattr = mw.execShell('lsattr /usr|grep /usr/bin')[0].find('-i-')
if is_chattr != -1:
mw.execShell('chattr -i /usr/bin')
mw.execShell("rm -f " + php_bin + ' ' + php_ize + ' ' +
php_fpm + ' ' + php_pecl + ' ' + php_pear)
mw.execShell("ln -sf %s %s" % (php_bin_src, php_bin))
mw.execShell("ln -sf %s %s" % (php_ize_src, php_ize))
mw.execShell("ln -sf %s %s" % (php_fpm_src, php_fpm))
mw.execShell("ln -sf %s %s" % (php_pecl_src, php_pecl))
mw.execShell("ln -sf %s %s" % (php_pear_src, php_pear))
if is_chattr != -1:
mw.execShell('chattr +i /usr/bin')
mw.writeLog('面板设置', '设置PHP-CLI版本为: %s' % version)
return mw.returnData(True, '设置成功!')
return MwSites.instance().setCliPhpVersion(version)

@ -879,6 +879,33 @@ def isRestart():
return False
return True
def getAcmeDir():
acme = '/root/.acme.sh'
if isAppleSystem():
cmd = "who | sed -n '2, 1p' |awk '{print $1}'"
user = execShell(cmd)[0].strip()
acme = '/Users/' + user + '/.acme.sh'
if not os.path.exists(acme):
acme = '/.acme.sh'
return acme
def getAcmeDomainDir(domain):
acme_dir = getAcmeDir()
acme_domain = acme_dir + '/' + domain
acme_domain_ecc = acme_domain + '_ecc'
if os.path.exists(acme_domain_ecc):
acme_domain = acme_domain_ecc
return acme_domain
def fileNameCheck(filename):
f_strs = [';', '&', '<', '>']
for fs in f_strs:
if filename.find(fs) != -1:
return False
return True
def triggerTask():
isTask = getPanelDir() + '/logs/panel_task.lock'
writeFile(isTask, 'True')
@ -925,6 +952,10 @@ def checkWebConfig():
def restartWeb():
return opWeb("reload")
def deleteFile(file):
if os.path.exists(file):
os.remove(file)
def isInstalledWeb():
path = getServerDir() + '/openresty/nginx/sbin/nginx'
if os.path.exists(path):

@ -72,14 +72,14 @@ $('#site_search').click(function(){
var idname = data.data[i].name.replace(/\./g,'_');
body = "<tr><td><input type='checkbox' name='id' title='"+data.data[i].name+"' onclick='checkSelect();' value='" + data.data[i].id + "'></td>\
<td><a class='btlink webtips' href='javascript:;' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].addtime + "')\" title='"+data.data[i].name+"'>" + shortwebname + "</td>\
<td><a class='btlink webtips' href='javascript:;' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].add_time + "')\" title='"+data.data[i].name+"'>" + shortwebname + "</td>\
<td>" + status + "</td>\
<td>" + backup + "</td>\
<td><a class='btlink' title='打开目录"+data.data[i].path+"' href=\"javascript:openPath('"+data.data[i].path+"');\">" + shortpath + "</a></td>\
<td><a class='btlink setTimes' id='site_"+data.data[i].id+"' data-ids='"+data.data[i].id+"'>" + web_end_time + "</a></td>\
<td><a class='btlinkbed' href='javascript:;' data-id='"+data.data[i].id+"'>" + data.data[i].ps + "</a></td>\
<td style='text-align:right; color:#bbb'>\
<a href='javascript:;' class='btlink' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].addtime + "')\">设置</a>\
<a href='javascript:;' class='btlink' onclick=\"webEdit(" + data.data[i].id + ",'" + data.data[i].name + "','" + data.data[i].edate + "','" + data.data[i].add_time + "')\">设置</a>\
| <a href='javascript:;' class='btlink' onclick=\"webDelete('" + data.data[i].id + "','" + data.data[i].name + "')\" title='删除站点'>删除</a>\
</td></tr>"

@ -11,8 +11,12 @@
from .init import *
from .option import *
from .user import *
from .sites import *
from .domain import *
from .tasks import *
from .logs import *
from .crontab import *
from .firewall import *
from .temp_login import *

@ -0,0 +1,37 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
import core.mw as mw
__FIELD = 'id,pid,domain,port,path,add_time'
def addBinding(pid, domain, port, path):
now_time = mw.getDateFromNow()
insert_data = {
'pid': pid,
'domain': domain,
'port':port,
'path':path,
'add_time': now_time,
}
return mw.M('binding').insert(insert_data)
def getBindingListBySiteId(site_id):
task_list = mw.M('binding').where('pid=?', (site_id,)).field(__FIELD).select()
return task_list
def deleteBindingId(domain_id):
return mw.M('binding').where("id=?", (domain_id,)).delete()
def deleteBindingBySiteId(site_id):
return mw.M('binding').where("pid=?", (site_id,)).delete()

@ -0,0 +1,30 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
import core.mw as mw
__FIELD = 'id,pid,name,port,add_time'
def addDomain(pid, name, port):
now_time = mw.getDateFromNow()
insert_data = {
'pid': pid,
'name': name,
'port':port,
'add_time': now_time,
}
return mw.M('domain').insert(insert_data)
def deleteDomainId(domain_id):
return mw.M('domain').where("id=?", (domain_id,)).delete()
def deleteDomainBySiteId(site_id):
return mw.M('domain').where("pid=?", (site_id,)).delete()

@ -10,10 +10,35 @@
import core.mw as mw
__FIELD = 'id,name,path,status,ps,edate,type_id,add_time,update_time'
def getSitesCount():
return mw.M('sites').count()
def getSitesById(site_id):
return mw.M('sites').field(__FIELD).where("id=?", (site_id,)).find()
def addSites(name, path):
now_time = mw.getDateFromNow()
insert_data = {
'name': name,
'path': path,
'status': 1,
'ps':name,
'type_id':0,
'edate':'0000-00-00',
'add_time': now_time,
'update_time': now_time
}
return mw.M('sites').insert(insert_data)
def isSitesExist(name):
if mw.M('sites').where("name=?", (name,)).count() > 0:
return True
return False
def getSitesList(
page:int | None = 1,
size:int | None = 10,
@ -29,7 +54,7 @@ def getSitesList(
sql_where = " type_id=" + str(type_id)
dbM = dbC = mw.M('sites').field('id,name,path,status,ps,edate,type_id,add_time,update_time')
dbM = dbC = mw.M('sites').field(__FIELD)
if sql_where != '':
count = dbC.where(sql_where).count()
@ -46,3 +71,19 @@ def getSitesList(
data['count'] = count
return data
def deleteSitesById(site_id):
return mw.M('sites').where("id=?", (site_id,)).delete()
def setSitesData(site_id,
edate: str | None = None,
ps: str | None = None,
):
update_data = {}
if edate is not None:
update_data['edate'] = edate
if ps is not None:
update_data['ps'] = ps
return mw.M('sites').where('id=?',(site_id,)).update(update_data)

@ -10,19 +10,61 @@
import time
from admin.model import db, TempLogin
import core.mw as mw
__FIELD = 'id,token,salt,state,login_time,login_addr,logout_time,expire,add_time'
def addTempLogin(
token:str | None = None,
expire:int | None = None
):
if expire is None:
start_time = int(time.time())
expire=start_time+3600
if token is None:
salt = mw.getRandomString(12)
r = mw.getRandomString(48)
token = mw.md5(r + salt)
now_time = mw.formatDate()
insert_data = {
'token':token,
'salt':'0',
'state':0,
'login_time':0,
'login_addr':'',
'expire':expire,
'add_time':now_time,
}
return mw.M('temp_login').insert(insert_data)
def getTempLoginPage(
page: int | None = 1,
size: int | None = 10,
):
start = (page - 1) * size
limit = str(start) + ',' + str(size)
tl_list = mw.M('temp_login').where('', ()).field(__FIELD).limit(limit).order('id desc').select()
count = mw.M('temp_login').where('', ()).count()
rdata = {}
rdata['list'] = tl_list
rdata['count'] = count
return rdata
def getTempLoginByToken(token,
) -> None:
'''
获取用户信息通过用户名
'''
field = 'id,addtime,expire,login_time,login_addr,state,add_time'
data = mw.M('temp_login').where('token=?', (token,)).field(field).order('id asc').select()
data = mw.M('temp_login').where('token=?', (token,)).field(__FIELD).order('id asc').find()
return data
def deleteTempLoginById(id) :
return mw.M('temp_login').where('id=?', (id,)).delete()
def clearTempLogin()->bool:
'''
清空过期数据

@ -85,7 +85,7 @@ def getUserByRoot() -> None:
def updateUserLoginTime():
now_time = mw.formatDate()
mw.M('users').field(__field).where('id=?', (1,)).update({'login_time',now_time})
mw.M('users').field(__field).where('id=?', (1,)).update({'login_time':now_time})
return True
def setUserByRoot(

@ -10,13 +10,14 @@
import os
import sys
import re
import json
import time
import threading
import multiprocessing
from admin import model
import core.mw as mw
import thisdb
class sites(object):
@ -31,6 +32,304 @@ class sites(object):
sites._instance = sites(*args, **kwargs)
return sites._instance
def __init__(self):
# nginx conf
self.setupPath = mw.getServerDir() + '/web_conf'
self.logsPath = mw.getLogsDir()
self.vhostPath = vhost = self.setupPath + '/nginx/vhost'
if not os.path.exists(vhost):
mw.execShell("mkdir -p " + vhost + " && chmod -R 755 " + vhost)
self.rewritePath = rewrite = self.setupPath + '/nginx/rewrite'
if not os.path.exists(rewrite):
mw.execShell("mkdir -p " + rewrite + " && chmod -R 755 " + rewrite)
self.passPath = passwd = self.setupPath + '/nginx/pass'
if not os.path.exists(passwd):
mw.execShell("mkdir -p " + passwd + " && chmod -R 755 " + passwd)
self.redirectPath = redirect = self.setupPath + '/nginx/redirect'
if not os.path.exists(redirect):
mw.execShell("mkdir -p " + redirect +" && chmod -R 755 " + redirect)
self.proxyPath = proxy = self.setupPath + '/nginx/proxy'
if not os.path.exists(proxy):
mw.execShell("mkdir -p " + proxy + " && chmod -R 755 " + proxy)
# ssl conf
self.sslDir = self.setupPath + '/ssl'
self.sslLetsDir = self.setupPath + '/letsencrypt'
if not os.path.exists(self.sslLetsDir):
mw.execShell("mkdir -p " + self.sslLetsDir +" && chmod -R 755 " + self.sslLetsDir)
# 域名编码转换
def toPunycode(self, domain):
if sys.version_info[0] == 2:
domain = domain.encode('utf8')
tmp = domain.split('.')
newdomain = ''
for dkey in tmp:
# 匹配非ascii字符
match = re.search(u"[\x80-\xff]+", dkey)
if not match:
newdomain += dkey + '.'
else:
newdomain += 'xn--' + dkey.decode('utf-8').encode('punycode') + '.'
return newdomain[0:-1]
# 中文路径处理
def toPunycodePath(self, path):
if sys.version_info[0] == 2:
path = path.encode('utf-8')
if os.path.exists(path):
return path
match = re.search(u"[\x80-\xff]+", path)
if not match:
return path
npath = ''
for ph in path.split('/'):
npath += '/' + self.toPunycode(ph)
return npath.replace('//', '/')
def getHostConf(self, siteName):
return self.vhostPath + '/' + siteName + '.conf'
def getRewriteConf(self, siteName):
return self.rewritePath + '/' + siteName + '.conf'
def getRedirectDataPath(self, siteName):
return "{}/{}/data.json".format(self.redirectPath, siteName)
def getRedirectPath(self, siteName):
return "{}/{}".format(self.redirectPath, siteName)
def getProxyDataPath(self, siteName):
return "{}/{}/data.json".format(self.proxyPath, siteName)
def getProxyPath(self, siteName):
return "{}/{}".format(self.proxyPath, siteName)
def getDirBindRewrite(self, siteName, dirname):
return self.rewritePath + '/' + siteName + '_' + dirname + '.conf'
def getIndexConf(self):
return mw.getServerDir() + '/openresty/nginx/conf/nginx.conf'
# 路径处理
def getPath(self, path):
if path[-1] == '/':
return path[0:-1]
return path
def createRootDir(self, path):
autoInit = False
if not os.path.exists(path):
autoInit = True
os.makedirs(path)
if not mw.isAppleSystem():
mw.execShell('chown -R www:www ' + path)
if autoInit:
mw.writeFile(path + '/index.html', 'Work has started!!!')
mw.execShell('chmod -R 755 ' + path)
def add(self, webname, port, ps, path, version):
site_root_dir = mw.getWwwDir()
if site_root_dir == path.rstrip('/'):
return mw.returnData(False, '不要以网站根目录创建站点!')
print(webname, port, ps, path, version)
siteMenu = json.loads(webname)
self.siteName = self.toPunycode(siteMenu['domain'].strip().split(':')[0]).strip()
self.sitePath = self.toPunycodePath(self.getPath(path.replace(' ', '')))
self.sitePort = port.strip().replace(' ', '')
self.phpVersion = version
if thisdb.isSitesExist(self.siteName):
return mw.returnData(False, '您添加的站点[%s]已存在!' % self.siteName)
pid = thisdb.addSites(self.siteName, self.sitePath)
if pid < 1:
return mw.returnData(False, '添加失败!')
self.createRootDir(self.sitePath)
self.nginxAddConf()
# 主域名配置
thisdb.addDomain(pid, self.siteName, self.sitePort)
# 绑定域名配置
# 添加更多域名
# for domain in siteMenu['domainlist']:
# thisdb.addDomain(pid, self.siteName, self.sitePort)
mw.restartWeb()
# return mw.returnData(False, '开发中!')
return mw.returnData(True, '添加成功')
def deleteWSLogs(self, webname):
assLogPath = mw.getLogsDir() + '/' + webname + '.log'
errLogPath = mw.getLogsDir() + '/' + webname + '.error.log'
confFile = self.setupPath + '/nginx/vhost/' + webname + '.conf'
rewriteFile = self.setupPath + '/nginx/rewrite/' + webname + '.conf'
passFile = self.setupPath + '/nginx/pass/' + webname + '.conf'
keyPath = self.sslDir + webname + '/privkey.pem'
certPath = self.sslDir + webname + '/fullchain.pem'
logs = [assLogPath,
errLogPath,
confFile,
rewriteFile,
passFile,
keyPath,
certPath]
for i in logs:
mw.deleteFile(i)
# 重定向目录
redirectDir = self.setupPath + '/nginx/redirect/' + webname
if os.path.exists(redirectDir):
mw.execShell('rm -rf ' + redirectDir)
# 代理目录
proxyDir = self.setupPath + '/nginx/proxy/' + webname
if os.path.exists(proxyDir):
mw.execShell('rm -rf ' + proxyDir)
def delete(self, site_id, path):
info = thisdb.getSitesById(site_id)
webname = info['name']
self.deleteWSLogs(webname)
if path == '1':
rootPath = mw.getWwwDir() + '/' + webname
mw.execShell('rm -rf ' + rootPath)
# ssl
ssl_dir = self.sslDir + '/' + webname
if os.path.exists(ssl_dir):
mw.execShell('rm -rf ' + ssl_dir)
ssl_lets_dir = self.sslLetsDir + '/' + webname
if os.path.exists(ssl_lets_dir):
mw.execShell('rm -rf ' + ssl_lets_dir)
ssl_acme_dir = mw.getAcmeDir() + '/' + webname
if os.path.exists(ssl_acme_dir):
mw.execShell('rm -rf ' + ssl_acme_dir)
thisdb.deleteSitesById(site_id)
thisdb.deleteDomainBySiteId(site_id)
binding_list = thisdb.getBindingListBySiteId(site_id)
for x in binding_list:
tag = mw.getLogsDir() + "/" + webname + "_" + x['domain']
wlog = tag + ".log"
wlog_error = tag + ".error.log"
if os.path.exists(wlog):
mw.execShell('rm -rf ' + wlog)
if os.path.exists(wlog_error):
mw.execShell('rm -rf ' + wlog_error)
thisdb.deleteBindingBySiteId(site_id)
mw.restartWeb()
return mw.returnData(True, '站点【%s】删除成功!' % webname)
def nginxAddConf(self):
source_tpl = mw.getRunDir() + '/data/tpl/nginx.conf'
vhost_file = self.vhostPath + '/' + self.siteName + '.conf'
content = mw.readFile(source_tpl)
content = content.replace('{$PORT}', self.sitePort)
content = content.replace('{$SERVER_NAME}', self.siteName)
content = content.replace('{$ROOT_DIR}', self.sitePath)
content = content.replace('{$PHP_DIR}', self.setupPath + '/php')
content = content.replace('{$PHPVER}', self.phpVersion)
content = content.replace('{$OR_REWRITE}', self.rewritePath)
# content = content.replace('{$OR_REDIRECT}', self.redirectPath)
# content = content.replace('{$OR_PROXY}', self.proxyPath)
logsPath = mw.getLogsDir()
content = content.replace('{$LOGPATH}', logsPath)
mw.writeFile(vhost_file, content)
# 设置网站过期
def setEndDate(self, site_id, end_date):
info = thisdb.getSitesById(site_id)
thisdb.setSitesData(site_id, edate=end_date)
mw.writeLog('网站', '设置成功,站点【{1}】到期【{2}】后将自动停止!', (info['name'], end_date,))
return mw.returnData(True, '设置成功,站点到期后将自动停止!')
# 设置网站备注
def setPs(self, site_id, ps):
if thisdb.setSitesData(site_id, ps=ps):
return mw.returnData(True, '修改成功!')
return mw.returnData(False, '修改失败!')
# 获取默认站点
def getDefaultSite(self):
data = {}
data['sites'] = mw.M('sites').field('name').order('id desc').select()
data['default_site'] = thisdb.getOption('default_site', default='')
return mw.getJson(data)
def setDefaultSite(self, name):
# 清理旧的
default_site = thisdb.getOption('default_site', default='')
if default_site:
path = self.getHostConf(default_site)
if os.path.exists(path):
conf = mw.readFile(path)
rep = r"listen\s+80.+;"
conf = re.sub(rep, 'listen 80;', conf, 1)
rep = r"listen\s+443.+;"
conf = re.sub(rep, 'listen 443 ssl;', conf, 1)
mw.writeFile(path, conf)
path = self.getHostConf(name)
if os.path.exists(path):
conf = mw.readFile(path)
rep = r"listen\s+80\s*;"
conf = re.sub(rep, 'listen 80 default_server;', conf, 1)
rep = r"listen\s+443\s*ssl\s*\w*\s*;"
conf = re.sub(rep, 'listen 443 ssl default_server;', conf, 1)
mw.writeFile(path, conf)
thisdb.setOption('default_site', name)
mw.restartWeb()
return mw.returnJson(True, '设置成功!')
def setCliPhpVersion(self, version):
php_bin = '/usr/bin/php'
php_bin_src = "/www/server/php/%s/bin/php" % version
php_ize = '/usr/bin/phpize'
php_ize_src = "/www/server/php/%s/bin/phpize" % version
php_fpm = '/usr/bin/php-fpm'
php_fpm_src = "/www/server/php/%s/sbin/php-fpm" % version
php_pecl = '/usr/bin/pecl'
php_pecl_src = "/www/server/php/%s/bin/pecl" % version
php_pear = '/usr/bin/pear'
php_pear_src = "/www/server/php/%s/bin/pear" % version
if not os.path.exists(php_bin_src):
return mw.returnData(False, '指定PHP版本未安装!')
is_chattr = mw.execShell('lsattr /usr|grep /usr/bin')[0].find('-i-')
if is_chattr != -1:
mw.execShell('chattr -i /usr/bin')
mw.execShell("rm -f " + php_bin + ' ' + php_ize + ' ' + php_fpm + ' ' + php_pecl + ' ' + php_pear)
mw.execShell("ln -sf %s %s" % (php_bin_src, php_bin))
mw.execShell("ln -sf %s %s" % (php_ize_src, php_ize))
mw.execShell("ln -sf %s %s" % (php_fpm_src, php_fpm))
mw.execShell("ln -sf %s %s" % (php_pecl_src, php_pecl))
mw.execShell("ln -sf %s %s" % (php_pear_src, php_pear))
if is_chattr != -1:
mw.execShell('chattr +i /usr/bin')
mw.writeLog('面板设置', '设置PHP-CLI版本为: %s' % version)
return mw.returnData(True, '设置成功!')
def getPhpVersion(self):
phpVersions = ('00', '52', '53', '54', '55',

Loading…
Cancel
Save