mirror of
https://github.com/aaPanel/aaPanel.git
synced 2026-08-17 21:25:47 +02:00
1. Added Mail Marketing Automation trigger tasks 2. Added Mail Marketing Groups Import, Export, Merge 3. Added Mail Marketing Subscribers to support paste import 4. Added Mail Marketing Template Import Export Duplicate 5. Added Mail server add timed automatic reply 6. Added HTTPS Protection function for Website (disables automatic HTTP to HTTPS redirection when enabled) 7. Optimize Website Interface Button Integration 8. Optimize the response speed of WP Toolkit interface
609 lines
23 KiB
Python
609 lines
23 KiB
Python
# 访问限制, 目前不兼容之前版本的访问限制
|
|
# nginx 使用 if 和 正则实现,保障与反向代理、重定向的兼容性
|
|
# apache 实现方案未变
|
|
import os
|
|
import re
|
|
import json
|
|
import shutil
|
|
import warnings
|
|
from typing import Optional, Union, List, Dict
|
|
from itertools import chain
|
|
from .util import webserver, check_server_config, write_file, read_file, DB, service_reload, get_log_path, pre_re_key
|
|
from mod.base import json_response
|
|
warnings.filterwarnings("ignore", category=SyntaxWarning)
|
|
|
|
class _ConfigObject:
|
|
_config_file_path = ""
|
|
panel_path = "/www/server/panel"
|
|
|
|
def __init__(self):
|
|
self._config: Optional[dict] = None
|
|
|
|
@property
|
|
def config(self) -> Dict[str, dict]:
|
|
if self._config is None:
|
|
try:
|
|
self._config = json.loads(read_file(self._config_file_path))
|
|
except (json.JSONDecodeError, TypeError, ValueError):
|
|
self._config = {}
|
|
return self._config
|
|
|
|
def save_config(self):
|
|
if self._config:
|
|
write_file(self._config_file_path, json.dumps(self._config))
|
|
|
|
|
|
class ServerConfig:
|
|
_vhost_path = "/www/server/panel/vhost"
|
|
|
|
def __init__(self, config_prefix: str):
|
|
self.config_prefix: str = config_prefix
|
|
|
|
@staticmethod
|
|
def crypt_password(password) -> str:
|
|
import crypt
|
|
return crypt.crypt(password,password)
|
|
|
|
|
|
# nginx配置文件相关操作
|
|
class _NginxAccessConf(ServerConfig):
|
|
|
|
# 添加 include 导入配置项
|
|
def set_nginx_access_include(self, site_name) -> Optional[str]:
|
|
ng_file = "{}/nginx/{}{}.conf".format(self._vhost_path, self.config_prefix, site_name)
|
|
ng_conf = read_file(ng_file)
|
|
if not ng_conf:
|
|
return "配置文件丢失"
|
|
access_dir = "{}/nginx/access/{}".format(self._vhost_path, site_name)
|
|
if not os.path.isdir(os.path.dirname(access_dir)):
|
|
os.makedirs(os.path.dirname(access_dir))
|
|
|
|
if not os.path.isdir(access_dir):
|
|
os.makedirs(access_dir)
|
|
|
|
include_conf = (
|
|
" #引用访问限制规则,注释后配置的访问限制将无效\n"
|
|
" include /www/server/panel/vhost/nginx/access/%s/*.conf;\n"
|
|
) % site_name
|
|
|
|
rep_include = re.compile(r"\s*include.*/access/.*/\*\.conf\s*;", re.M)
|
|
if rep_include.search(ng_conf):
|
|
return
|
|
# 添加 引入
|
|
rep_list = [
|
|
(re.compile(r"#SSL-END"), False), # 匹配Referer配置, 加其下
|
|
(re.compile(r"(\s*#.*)?\s*include\s+.*/redirect/.*\.conf;"), True), # 重定向
|
|
(re.compile(r"(\s*#.*)?\s*include\s+.*/ip-restrict/.*\.conf;"), True), # Ip黑白名单
|
|
]
|
|
|
|
# 使用正则匹配确定插入位置 use_start 在前面插入还是后面插入
|
|
def set_by_rep_idx(tmp_rep: re.Pattern, use_start: bool) -> bool:
|
|
tmp_res = tmp_rep.search(ng_conf)
|
|
if not tmp_res:
|
|
return False
|
|
if use_start:
|
|
new_conf = ng_conf[:tmp_res.start()] + include_conf + tmp_res.group() + ng_conf[tmp_res.end():]
|
|
else:
|
|
new_conf = ng_conf[:tmp_res.start()] + tmp_res.group() + include_conf + ng_conf[tmp_res.end():]
|
|
|
|
write_file(ng_file, new_conf)
|
|
if webserver() == "nginx" and check_server_config() is not None:
|
|
write_file(ng_file, ng_conf)
|
|
return False
|
|
return True
|
|
for r, s in rep_list:
|
|
if set_by_rep_idx(r, s):
|
|
break
|
|
else:
|
|
return "无法在配置文件中定位到需要添加的项目"
|
|
|
|
# 写入配置文件
|
|
def set_nginx_access_by_conf(self, site_name: str, configs: Dict[str, List[Dict[str, str]]]) -> Optional[str]:
|
|
""" configs 示例结构
|
|
configs = {
|
|
"auth_dir": [
|
|
{
|
|
"name": "aaa",
|
|
"dir_path": "/",
|
|
"auth_file": "/www/server/pass/www.cache.com/aaa.pass",
|
|
"username":"aaaa",
|
|
"password":"aaaa",
|
|
}
|
|
],
|
|
"file_deny": [
|
|
{
|
|
"name": "bbb",
|
|
"dir_path": "/",
|
|
"suffix": ["png", "jpg"]
|
|
}
|
|
]
|
|
}
|
|
"""
|
|
|
|
path_map = {}
|
|
for c in chain(configs.get("auth_dir", []), configs.get("file_deny", [])):
|
|
if c["dir_path"] not in path_map:
|
|
path_map[c["dir_path"]] = {"path": c["dir_path"]}
|
|
path_map[c["dir_path"]].update(c)
|
|
|
|
path_list = list(path_map.values())
|
|
path_list.sort(key=lambda x: len(x["path"].split("/")), reverse=True)
|
|
conf_template = r"""location ~ "^%s.*$" {
|
|
auth_basic "Authorization";
|
|
auth_basic_user_file %s;
|
|
%s
|
|
}
|
|
"""
|
|
suffix_template = r'{tmp_pre}if ( $uri ~ "\.({suffix})$" ) {{\n{tmp_pre} return 404;\n{tmp_pre}}}'
|
|
suffix_template2 = r'if ( $uri ~ "^{path}.*\.({suffix})$" ) {{\n return 404;\n}}\n'
|
|
tmp_conf_list = []
|
|
for i in path_list:
|
|
if "auth_file" in i and "suffix" in i:
|
|
tmp_pre = " "
|
|
tmp_conf = conf_template % (
|
|
i["path"], i["auth_file"], suffix_template.format(tmp_pre=tmp_pre, suffix="|".join(i["suffix"]))
|
|
)
|
|
write_file(i["auth_file"], "{}:{}".format(i["username"], self.crypt_password(i["password"])))
|
|
|
|
elif "auth_file" in i:
|
|
tmp_conf = conf_template % (i["path"], i["auth_file"], "")
|
|
write_file(i["auth_file"], "{}:{}".format(i["username"], self.crypt_password(i["password"])))
|
|
else:
|
|
tmp_conf = suffix_template2.format(path=i["path"], suffix="|".join(i["suffix"]))
|
|
|
|
tmp_conf_list.append(tmp_conf)
|
|
|
|
config_data = "\n".join(tmp_conf_list)
|
|
config_file = "{}/nginx/access/{}/{}{}.conf".format(self._vhost_path, site_name, self.config_prefix, site_name)
|
|
old_config = read_file(config_file)
|
|
write_file(config_file, config_data)
|
|
if webserver() == "nginx" and check_server_config() is not None:
|
|
if isinstance(old_config, str):
|
|
write_file(config_file, old_config)
|
|
else:
|
|
write_file(config_file, "")
|
|
return "配置失败"
|
|
|
|
|
|
class _ApacheAccessConf(ServerConfig):
|
|
|
|
def set_apache_access_include(self, site_name) -> Optional[str]:
|
|
ap_file = "{}/apache/{}{}.conf".format(self._vhost_path, self.config_prefix, site_name)
|
|
ap_conf = read_file(ap_file)
|
|
if not ap_conf:
|
|
return "配置文件丢失"
|
|
access_dir = "{}/apache/access/{}".format(self._vhost_path, site_name)
|
|
if not os.path.isdir(os.path.dirname(access_dir)):
|
|
os.makedirs(os.path.dirname(access_dir))
|
|
|
|
if not os.path.isdir(access_dir):
|
|
os.makedirs(access_dir)
|
|
|
|
pass_dir = "/www/server/pass/" + site_name
|
|
if not os.path.isdir(os.path.dirname(pass_dir)):
|
|
os.makedirs(os.path.dirname(pass_dir))
|
|
|
|
if not os.path.isdir(pass_dir):
|
|
os.makedirs(pass_dir)
|
|
|
|
include_conf = (
|
|
"\n #引用访问限制规则,注释后配置的访问限制将无效\n"
|
|
" IncludeOptional /www/server/panel/vhost/apache/access/%s/*.conf\n"
|
|
) % site_name
|
|
|
|
rep_include = re.compile(r"\s*IncludeOptional.*/access/.*/\*\.conf", re.M)
|
|
if rep_include.search(ap_conf):
|
|
return
|
|
# 添加 引入
|
|
rep_vhost_r = re.compile(r"</VirtualHost>")
|
|
new_conf = rep_vhost_r.sub(include_conf + "</VirtualHost>", ap_conf)
|
|
if not rep_include.search(new_conf):
|
|
return "配置添加失败"
|
|
|
|
write_file(ap_file, new_conf)
|
|
if webserver() == "nginx" and check_server_config() is not None:
|
|
write_file(ap_file, ap_conf)
|
|
return "配置添加失败"
|
|
|
|
def set_apache_access_by_conf(self, site_name: str, configs: Dict[str, List[Dict[str, str]]]) -> Optional[str]:
|
|
""" configs 示例结构
|
|
configs = {
|
|
"auth_dir": [
|
|
{
|
|
"name": "aaa",
|
|
"dir_path": "/",
|
|
"auth_file": "/www/server/pass/www.cache.com/aaa.pass",
|
|
"username":"aaaa",
|
|
"password":"aaaa",
|
|
}
|
|
],
|
|
"file_deny": [
|
|
{
|
|
"name": "bbb",
|
|
"dir_path": "/",
|
|
"suffix": ["png", "jpg"]
|
|
}
|
|
]
|
|
}
|
|
"""
|
|
site_path = DB("sites").where("name=?", (site_name, )).find()["path"]
|
|
names = []
|
|
old_configs = []
|
|
access_dir = "{}/apache/access/{}".format(self._vhost_path, site_name)
|
|
for i in os.listdir(access_dir):
|
|
if not os.path.isfile(os.path.join(access_dir, i)):
|
|
continue
|
|
old_configs.append((i, read_file(os.path.join(access_dir, i))))
|
|
|
|
for c in chain(configs.get("auth_dir", []), configs.get("file_deny", [])):
|
|
if "suffix" in c:
|
|
self._set_apache_file_deny(c, site_name)
|
|
names.append("deny_{}.conf".format(c["name"]))
|
|
else:
|
|
self._set_apache_auth_dir(c, site_name, site_path)
|
|
names.append("auth_{}.conf".format(c["name"]))
|
|
|
|
for i in os.listdir(access_dir):
|
|
if i not in names:
|
|
os.remove(os.path.join(access_dir, i))
|
|
|
|
if webserver() == "apache" and check_server_config() is not None:
|
|
for i in os.listdir(access_dir):
|
|
os.remove(os.path.join(access_dir, i))
|
|
for n, data in old_configs: # 还原之前的配置文件
|
|
write_file(os.path.join(access_dir, n), data)
|
|
return "配置保存失败"
|
|
|
|
def _set_apache_file_deny(self, data: dict, site_name: str):
|
|
conf = r'''
|
|
#BEGIN_DENY_{n}
|
|
<Directory ~ "{d}.*\.({s})$">
|
|
Order allow,deny
|
|
Deny from all
|
|
</Directory>
|
|
#END_DENY_{n}
|
|
'''.format(n=data["name"], d=data["dir_path"], s="|".join(data["suffix"]))
|
|
access_file = "{}/apache/access/{}/deny_{}.conf".format(self._vhost_path, site_name, data["name"])
|
|
write_file(access_file, conf)
|
|
|
|
def _set_apache_auth_dir(self, data: dict, site_path: str, site_name: str):
|
|
conf = '''
|
|
<Directory "{site_path}{site_dir}">
|
|
#AUTH_START
|
|
AuthType basic
|
|
AuthName "Authorization "
|
|
AuthUserFile {auth_file}
|
|
Require user {username}
|
|
#AUTH_END
|
|
SetOutputFilter DEFLATE
|
|
Options FollowSymLinks
|
|
AllowOverride All
|
|
#Require all granted
|
|
DirectoryIndex index.php index.html index.htm default.php default.html default.htm
|
|
</Directory>'''.format(site_path=site_path, site_dir=data["dir_path"], auth_file=data["auth_file"],
|
|
username=data["username"], site_name=site_name)
|
|
write_file(data["auth_file"], "{}:{}".format(data["username"], self.crypt_password(data["password"])))
|
|
access_file = "{}/apache/access/{}/auth_{}.conf".format(self._vhost_path, site_path, data["name"])
|
|
write_file(access_file, conf)
|
|
|
|
|
|
class RealAccessRestriction(_ConfigObject, _ApacheAccessConf, _NginxAccessConf):
|
|
_config_file_path = "/www/server/panel/data/site_access.json"
|
|
|
|
def __init__(self, config_prefix: str):
|
|
super(RealAccessRestriction, self).__init__()
|
|
super(_ApacheAccessConf, self).__init__(config_prefix)
|
|
|
|
# 把配置信息更新到服务配置文件中
|
|
def _refresh_web_server_conf(self, site_name: str, site_access_conf: dict, web_server=None) -> Optional[str]:
|
|
if web_server is None:
|
|
web_server = webserver()
|
|
error_msg = self.set_apache_access_by_conf(site_name, site_access_conf)
|
|
if web_server == "apache" and error_msg is not None:
|
|
return error_msg
|
|
error_msg = self.set_nginx_access_by_conf(site_name, site_access_conf)
|
|
if web_server == "nginx" and error_msg is not None:
|
|
return error_msg
|
|
|
|
# 添加include配置到对应站点的配置文件中
|
|
def _set_web_server_conf_include(self, site_name, web_server=None) -> Optional[str]:
|
|
if web_server is None:
|
|
web_server = webserver()
|
|
error_msg = self.set_apache_access_include(site_name)
|
|
if web_server == "apache" and error_msg is not None:
|
|
return error_msg
|
|
error_msg = self.set_nginx_access_include(site_name)
|
|
if web_server == "nginx" and error_msg is not None:
|
|
return error_msg
|
|
|
|
def check_auth_dir_args(self, get, is_modify=False) -> Union[str, dict]:
|
|
values = {}
|
|
try:
|
|
values["site_name"] = get.site_name.strip()
|
|
values["dir_path"] = get.dir_path.strip()
|
|
except AttributeError:
|
|
return "parameter error"
|
|
|
|
if hasattr(get, "password"):
|
|
password = get.password.strip()
|
|
if len(password) < 3:
|
|
return '密码不能少于3位'
|
|
if re.search(r'\s', password):
|
|
return '密码不能存在空格'
|
|
values['password'] = password
|
|
else:
|
|
return '请输入密码!'
|
|
|
|
if hasattr(get, "username"):
|
|
username = get.username.strip()
|
|
if len(username) < 3:
|
|
return '账号不能少于3位'
|
|
if re.search(r'\s', username):
|
|
return '账号不能存在空格'
|
|
values['username'] = username
|
|
else:
|
|
return '请输入用户!'
|
|
|
|
if hasattr(get, "name"):
|
|
name = get.name.strip()
|
|
if len(name) < 3:
|
|
return '名称不能少于3位'
|
|
if re.search(r'\s', name):
|
|
return '名称不能存在空格'
|
|
if not re.search(r'^\w+$', name):
|
|
return '名称格式错误,仅支持数字字母下划线,请参考格式:aaa_bbb'
|
|
values['name'] = name
|
|
else:
|
|
return '请输入名称!'
|
|
if not is_modify:
|
|
data = self.config.get(values["site_name"], {}).get("auth_dir", [])
|
|
for i in data:
|
|
if i["dir_path"] == values["dir_path"]:
|
|
return "此路径已存在"
|
|
if i["name"] == values["name"]:
|
|
return "此名称已存在"
|
|
|
|
values["auth_file"] = "/www/server/pass/{}/{}.pass".format(values["site_name"], values["name"])
|
|
return values
|
|
|
|
def create_auth_dir(self, get) -> Optional[str]:
|
|
conf = self.check_auth_dir_args(get, is_modify=False)
|
|
if isinstance(conf, str):
|
|
return conf
|
|
|
|
web_server = webserver()
|
|
error_msg = self._set_web_server_conf_include(conf["site_name"], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
|
|
if conf["site_name"] not in self.config:
|
|
self.config[conf["site_name"]] = {"auth_dir": [], "file_deny": []}
|
|
self.config[conf["site_name"]]["auth_dir"].append(conf)
|
|
|
|
error_msg = self._refresh_web_server_conf(conf["site_name"], self.config[conf["site_name"]], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
|
|
def modify_auth_dir(self, get) -> Optional[str]:
|
|
conf = self.check_auth_dir_args(get, is_modify=True)
|
|
if isinstance(conf, str):
|
|
return conf
|
|
|
|
data = self.config.get(conf["site_name"], {}).get("auth_dir", [])
|
|
target_idx = None
|
|
for idx, i in enumerate(data):
|
|
if i["name"] == conf["name"]:
|
|
target_idx = idx
|
|
break
|
|
if target_idx is None:
|
|
return "没有指定的配置信息"
|
|
web_server = webserver()
|
|
error_msg = self._set_web_server_conf_include(conf["site_name"], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
if conf["site_name"] not in self.config:
|
|
self.config[conf["site_name"]] = {"auth_dir": [], "file_deny": []}
|
|
|
|
self.config[conf["site_name"]]["auth_dir"][target_idx] = conf
|
|
|
|
error_msg = self._refresh_web_server_conf(conf["site_name"], self.config[conf["site_name"]], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
|
|
def remove_auth_dir(self, site_name: str, name: str) -> Optional[str]:
|
|
if site_name not in self.config:
|
|
return "没有该网站的配置"
|
|
|
|
target = None
|
|
for idx, i in enumerate(self.config[site_name].get("auth_dir", [])):
|
|
if i.get("name", None) == name:
|
|
target = idx
|
|
|
|
if target is None:
|
|
return "没有该路径的配置"
|
|
|
|
del self.config[site_name]["auth_dir"][target]
|
|
web_server = webserver()
|
|
error_msg = self._refresh_web_server_conf(site_name, self.config[site_name], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
return
|
|
|
|
def check_file_deny_args(self, get, is_modify=False) -> Union[str, dict]:
|
|
values = {}
|
|
try:
|
|
values["site_name"] = get.site_name.strip()
|
|
values["name"] = get.name.strip()
|
|
values["dir_path"] = get.dir_path.strip()
|
|
values["suffix"] = list(filter(lambda x: bool(x.strip()), json.loads(get.suffix.strip())))
|
|
except (AttributeError, json.JSONDecodeError, TypeError, ValueError):
|
|
return "Parameter error"
|
|
|
|
if len(values["name"]) < 3:
|
|
return '规则名最少需要输入3个字符串!'
|
|
if not values["suffix"]:
|
|
return '文件扩展名不可为空!'
|
|
if not values["dir_path"]:
|
|
return '目录不可为空!'
|
|
|
|
if not is_modify:
|
|
data = self.config.get(values["site_name"], {}).get("file_deny", [])
|
|
for i in data:
|
|
if i["dir_path"] == values["dir_path"]:
|
|
return "此路径已存在"
|
|
if i["name"] == values["name"]:
|
|
return "此名称已存在"
|
|
return values
|
|
|
|
def create_file_deny(self, get) -> Optional[str]:
|
|
conf = self.check_file_deny_args(get, is_modify=False)
|
|
if isinstance(conf, str):
|
|
return conf
|
|
web_server = webserver()
|
|
error_msg = self._set_web_server_conf_include(conf["site_name"], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
if conf["site_name"] not in self.config:
|
|
self.config[conf["site_name"]] = {"auth_dir": [], "file_deny": []}
|
|
|
|
self.config[conf["site_name"]]["file_deny"].append(conf)
|
|
error_msg = self._refresh_web_server_conf(conf["site_name"], self.config[conf["site_name"]], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
|
|
def modify_file_deny(self, get) -> Optional[str]:
|
|
conf = self.check_file_deny_args(get, is_modify=True)
|
|
if isinstance(conf, str):
|
|
return conf
|
|
|
|
data = self.config.get(conf["site_name"], {}).get("file_deny", [])
|
|
target_idx = None
|
|
for idx, i in enumerate(data):
|
|
if i["name"] == conf["name"]:
|
|
target_idx = idx
|
|
break
|
|
if target_idx is None:
|
|
return "没有指定的配置信息"
|
|
web_server = webserver()
|
|
error_msg = self._set_web_server_conf_include(conf["site_name"], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
if conf["site_name"] not in self.config:
|
|
self.config[conf["site_name"]] = {"auth_dir": [], "file_deny": []}
|
|
|
|
self.config[conf["site_name"]]["file_deny"][target_idx] = conf
|
|
|
|
error_msg = self._refresh_web_server_conf(conf["site_name"], self.config[conf["site_name"]], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
|
|
def remove_file_deny(self, site_name: str, name: str) -> Optional[str]:
|
|
if site_name not in self.config:
|
|
return "没有该网站的配置"
|
|
|
|
target = None
|
|
for idx, i in enumerate(self.config[site_name].get("file_deny", [])):
|
|
if i.get("name", None) == name:
|
|
target = idx
|
|
|
|
if target is None:
|
|
return "没有该路径的配置"
|
|
|
|
del self.config[site_name]["file_deny"][target]
|
|
web_server = webserver()
|
|
error_msg = self._refresh_web_server_conf(site_name, self.config[site_name], web_server)
|
|
if error_msg:
|
|
return error_msg
|
|
self.save_config()
|
|
service_reload()
|
|
return
|
|
|
|
def site_access_restriction_info(self, site_name: str) -> dict:
|
|
if site_name not in self.config:
|
|
return {"auth_dir": [], "file_deny": []}
|
|
else:
|
|
return self.config[site_name]
|
|
|
|
def remove_site_access_restriction_info(self, site_name):
|
|
if site_name in self.config:
|
|
del self.config["site_name"]
|
|
self.save_config()
|
|
ng_access_dir = "{}/nginx/access/{}".format(self._vhost_path, site_name)
|
|
ap_access_dir = "{}/apache/access/{}".format(self._vhost_path, site_name)
|
|
if os.path.isdir(ng_access_dir):
|
|
shutil.rmtree(ng_access_dir)
|
|
|
|
if os.path.isdir(ap_access_dir):
|
|
shutil.rmtree(ap_access_dir)
|
|
|
|
|
|
class AccessRestriction:
|
|
|
|
def __init__(self, config_prefix: str = ""):
|
|
self.config_prefix: str = config_prefix
|
|
self._ar = RealAccessRestriction(config_prefix)
|
|
|
|
def create_auth_dir(self, get):
|
|
res = self._ar.create_auth_dir(get)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="Successfully added")
|
|
|
|
def modify_auth_dir(self, get):
|
|
res = self._ar.modify_auth_dir(get)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="修改成功")
|
|
|
|
def remove_auth_dir(self, get):
|
|
try:
|
|
site_name = get.site_name.strip()
|
|
name = get.name.strip()
|
|
except AttributeError:
|
|
return json_response(status=False, msg="请求参数错误")
|
|
res = self._ar.remove_auth_dir(site_name, name)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="Successfully delete")
|
|
|
|
def create_file_deny(self, get):
|
|
res = self._ar.create_file_deny(get)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="Successfully added")
|
|
|
|
def modify_file_deny(self, get):
|
|
res = self._ar.modify_file_deny(get)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="修改成功")
|
|
|
|
def remove_file_deny(self, get):
|
|
try:
|
|
site_name = get.site_name.strip()
|
|
name = get.name.strip()
|
|
except AttributeError:
|
|
return json_response(status=False, msg="请求参数错误")
|
|
res = self._ar.remove_file_deny(site_name, name)
|
|
if isinstance(res, str):
|
|
return json_response(status=False, msg=res)
|
|
return json_response(status=True, msg="Successfully delete")
|
|
|
|
def site_access_restriction_info(self, get):
|
|
try:
|
|
site_name = get.site_name.strip()
|
|
except AttributeError:
|
|
return json_response(status=False, msg="请求参数错误")
|
|
data = self._ar.site_access_restriction_info(site_name)
|
|
return json_response(status=True, data=data)
|