Initial YakPanel commit
This commit is contained in:
228
class/sites.py
Normal file
228
class/sites.py
Normal file
@@ -0,0 +1,228 @@
|
||||
#coding: utf-8
|
||||
#-------------------------------------------------------------------
|
||||
# YakPanel
|
||||
#-------------------------------------------------------------------
|
||||
# Copyright (c) 2015-2017 YakPanel(www.yakpanel.com) All rights reserved.
|
||||
#-------------------------------------------------------------------
|
||||
# Author: hwliang <hwl@yakpanel.com>
|
||||
#-------------------------------------------------------------------
|
||||
|
||||
#------------------------------
|
||||
# 网站管理类
|
||||
#------------------------------
|
||||
import io,re,public,os,sys,shutil,files
|
||||
from YakPanel import session
|
||||
from flask import request
|
||||
from json import loads,dumps
|
||||
|
||||
class sites:
|
||||
__isNginx = None
|
||||
__nginxVhost = None
|
||||
__httpdVhost = None
|
||||
__nginxRewrite = None
|
||||
__certPath = None
|
||||
def __init__(self):
|
||||
self.__isNginx = ('nginx' == public.get_webserver())
|
||||
self.__nginxVhost = 'vhost/nginx'
|
||||
self.__httpdVhost = 'vhost/apache'
|
||||
self.__nginxRewrite = 'vhost/rewrite'
|
||||
self.__certPath = 'vhost/cert'
|
||||
|
||||
#添加网站
|
||||
def create_site(self,get):
|
||||
pdata = loads(get['data'])
|
||||
|
||||
#表单验证
|
||||
checkRootPath = self.check_root_path(pdata['rootPath'])
|
||||
if checkRootPath: return checkRootPath
|
||||
domainFormat = self.domain_format(pdata['domains'])
|
||||
if domainFormat: return public.ReturnMsg(False,'SITE_DOMAIN_FORMAT_ERR' , (domainFormat,))
|
||||
domainExists = self.domain_exists(pdata['domains'])
|
||||
if domainExists: return public.ReturnMsg(False,'SITE_DOMAIN_EXIST' , (domainExists,))
|
||||
return self._generate_nginx_conf(pdata['siteName'])
|
||||
|
||||
|
||||
r'''
|
||||
server
|
||||
{
|
||||
listen 80;
|
||||
server_name demo.example.com www.demo.example.com;
|
||||
index index.php index.html index.htm default.php default.htm default.html;
|
||||
root /www/wwwroot/demo.example.com;
|
||||
|
||||
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
|
||||
#error_page 404/404.html;
|
||||
#SSL-END
|
||||
|
||||
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
|
||||
error_page 404 /404.html;
|
||||
error_page 502 /502.html;
|
||||
#ERROR-PAGE-END
|
||||
|
||||
#PHP-INFO-START PHP引用配置,可以注释或修改
|
||||
include enable-php-70.conf;
|
||||
#PHP-INFO-END
|
||||
|
||||
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
|
||||
include /www/server/panel/vhost/rewrite/demo.example.com.conf;
|
||||
#REWRITE-END
|
||||
|
||||
#禁止访问的文件或目录
|
||||
location ~ ^/(\.user\.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README\.md)
|
||||
{
|
||||
return 404;
|
||||
}
|
||||
|
||||
#一键申请SSL证书验证目录相关设置
|
||||
location ~ \.well-known
|
||||
{
|
||||
allow all;
|
||||
}
|
||||
|
||||
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
|
||||
{
|
||||
expires 30d;
|
||||
error_log off;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location ~ .*\.(js|css)?$
|
||||
{
|
||||
expires 12h;
|
||||
error_log off;
|
||||
access_log off;
|
||||
}
|
||||
access_log /www/wwwlogs/demo.example.com.log;
|
||||
error_log /www/wwwlogs/demo.example.com.error.log;
|
||||
};'''
|
||||
|
||||
|
||||
return pdata
|
||||
#if pdata['siteName'].find('*') != -1: return public.returnMsg(False, public.lang("SITE_ADD_ERR_DOMAIN_TOW"));
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#删除网站
|
||||
def remove_site(self,get):
|
||||
pass
|
||||
|
||||
#添加域名
|
||||
def add_domain(self,get):
|
||||
pass
|
||||
|
||||
#删除域名
|
||||
def remove_domain(self,get):
|
||||
pass
|
||||
|
||||
#打开SSL
|
||||
def open_ssl(self,get):
|
||||
pass
|
||||
|
||||
#关闭SSL
|
||||
def close_ssl(self,get):
|
||||
pass
|
||||
|
||||
#检查指定域名是否存在
|
||||
def domain_exists(self,domains):
|
||||
if type(domains) == str: domains = [domains]
|
||||
sql = public.M('domain');
|
||||
for domain in domains:
|
||||
tmp = domain.split(':')
|
||||
if len(tmp) == 1: tmp.append('80')
|
||||
pid = sql.table('domain').where('name=? and port=?',(tmp[0],tmp[1])).getField('pid')
|
||||
if pid:
|
||||
if not sql.table('sites').where('id=?',(pid,)).count():
|
||||
sql.table('domain').where('pid=?',(pid,)).delete()
|
||||
else:
|
||||
return domain
|
||||
return False
|
||||
|
||||
#检查域名格式是否不正确
|
||||
def domain_format(self,domains):
|
||||
if type(domains) == str: domains = [domains]
|
||||
reg = r"^([\w\-\*]{1,100}\.){1,8}([\w\-]{1,24}|[\w\-]{1,24}\.[\w\-]{1,24})$";
|
||||
for domain in domains:
|
||||
if not re.match(reg,domain): return domain
|
||||
return False
|
||||
|
||||
#检查指定目录是否不合法
|
||||
def check_root_path(self,rootPath):
|
||||
if not files.files().CheckDir(rootPath): return public.returnMsg(False, public.lang("System critical directory cannot be used as site directory"));
|
||||
return False
|
||||
|
||||
#重新生成配置文件
|
||||
def generate_conf(self,get):
|
||||
return self._generate_nginx_conf(get.siteName)
|
||||
|
||||
#生成配置文件
|
||||
def _generate_nginx_conf(self,siteName):
|
||||
siteInfo = public.M('sites').where('name=?',(siteName,)).field('id,name,path,status').find()
|
||||
if siteInfo:
|
||||
siteDomains = public.M('domain').where('pid=?',(siteInfo['id'],)).field('name,port').select()
|
||||
siteBinding = public.M('binding').where('pid=?',(siteInfo['id'],)).field('domain,port,path').select()
|
||||
siteConfig = {
|
||||
"siteId": 2,
|
||||
"defaultDoc": "index.php index.html index.htm default.php default.htm default.html",
|
||||
"fpmConfig": {
|
||||
"type": "PHP",
|
||||
"version": "5.4"
|
||||
},
|
||||
"ssl": {
|
||||
"open": False,
|
||||
"cert": "",
|
||||
"privateKey": "",
|
||||
"pool": ""
|
||||
},
|
||||
|
||||
"binDingSsl": {
|
||||
"/www": {
|
||||
"open": False,
|
||||
"cert": "",
|
||||
"privateKey": "",
|
||||
"pool": ""
|
||||
}
|
||||
},
|
||||
|
||||
"redirect": [{
|
||||
"code": 301,
|
||||
"var": "$host",
|
||||
"rule": "^yakpanel\\.com$",
|
||||
"to": "https://www.yakpanel.com",
|
||||
"args": "$request_uri"
|
||||
}, {
|
||||
"code": 302,
|
||||
"var": "$uri",
|
||||
"rule": "^/test/",
|
||||
"to": "https://www.yakpanel.com",
|
||||
"args": "$request_uri"
|
||||
}],
|
||||
"proxy": {
|
||||
"open": False,
|
||||
"url": "http://www.yakpanel.com",
|
||||
"host": "www.yakpanel.com",
|
||||
"subOpen": False,
|
||||
"src": "",
|
||||
"dst": "",
|
||||
"cache": False
|
||||
},
|
||||
"antiStealingLink": {
|
||||
"open": False,
|
||||
"extName": ["jpg", "png", "gif", "js", "css"],
|
||||
"domains": ["www.yakpanel.com", "yakpanel.com"],
|
||||
"code": 404
|
||||
},
|
||||
"networkLimit": {
|
||||
"open": False,
|
||||
"perServer": 500,
|
||||
"perIp": 25,
|
||||
"rate": 512
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return siteConfig
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user