From f2443d947398869c68c531d1f869bf1e1f76dbfc Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Sun, 27 Oct 2024 02:23:12 +0800 Subject: [PATCH] update --- clear.sh | 1 + web/admin/__init__.py | 5 +- web/admin/config/__init__.py | 2 +- web/admin/control/__init__.py | 2 +- web/admin/crontab/__init__.py | 2 +- web/admin/dashboard/__init__.py | 4 +- web/admin/files/__init__.py | 2 +- web/admin/firewall/__init__.py | 2 +- web/admin/logs/__init__.py | 2 +- web/admin/model/__init__.py | 184 +--------------------------- web/admin/model/initdb.py | 194 ++++++++++++++++++++++++++++++ web/admin/model/sites.py | 16 +++ web/admin/plugins/__init__.py | 2 +- web/admin/setup/user.py | 12 ++ web/admin/site/__init__.py | 38 +++++- web/admin/soft/__init__.py | 2 +- web/admin/system/__init__.py | 48 +++++++- web/admin/task/__init__.py | 2 + web/admin/user_login_check.py | 2 +- web/core/mw.py | 11 ++ web/static/app/site.js | 2 +- web/templates/default/index.html | 2 +- web/templates/default/layout.html | 4 +- web/utils/config.py | 33 +++++ 24 files changed, 372 insertions(+), 202 deletions(-) create mode 100644 web/admin/model/initdb.py create mode 100644 web/admin/model/sites.py create mode 100644 web/utils/config.py diff --git a/clear.sh b/clear.sh index 866f68bf2..9a0b59668 100755 --- a/clear.sh +++ b/clear.sh @@ -3,5 +3,6 @@ PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/loc +find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch find . -name .DS_Store | xargs rm -rf find . -type d -name "*.pyc" | xargs rm -rf \ No newline at end of file diff --git a/web/admin/__init__.py b/web/admin/__init__.py index 4b4359aab..ce34a9057 100644 --- a/web/admin/__init__.py +++ b/web/admin/__init__.py @@ -29,6 +29,7 @@ from admin import setup import core.mw as mw import setting +import utils.config as utils_config root_dir = mw.getRunDir() @@ -114,13 +115,13 @@ def inject_global_variables(): if mw.isDebugMode(): ver = ver + str(time.time()) - # print(ver) + data = utils_config.getGlobalVar() config = { 'version': ver, 'title' : '面板', 'ip' : '127.0.0.1' } - return dict(config=config) + return dict(config=config, data=data) # from flasgger import Swagger diff --git a/web/admin/config/__init__.py b/web/admin/config/__init__.py index 869d8fcc6..d169a4c41 100644 --- a/web/admin/config/__init__.py +++ b/web/admin/config/__init__.py @@ -14,7 +14,7 @@ from flask import Blueprint, render_template blueprint = Blueprint('config', __name__, url_prefix='/config', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('config.html', data={}) + return render_template('config.html') diff --git a/web/admin/control/__init__.py b/web/admin/control/__init__.py index bf865e5f8..7ca57b102 100644 --- a/web/admin/control/__init__.py +++ b/web/admin/control/__init__.py @@ -14,4 +14,4 @@ from flask import Blueprint, render_template blueprint = Blueprint('control', __name__, url_prefix='/control', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('control.html', data={}) \ No newline at end of file + return render_template('control.html',) \ No newline at end of file diff --git a/web/admin/crontab/__init__.py b/web/admin/crontab/__init__.py index d19554203..203b78685 100644 --- a/web/admin/crontab/__init__.py +++ b/web/admin/crontab/__init__.py @@ -17,7 +17,7 @@ from admin.model import Crontab blueprint = Blueprint('crontab', __name__, url_prefix='/crontab', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('crontab.html', data={}) + return render_template('crontab.html') # 插件列表 @blueprint.route('/list', endpoint='list', methods=['GET','POST']) diff --git a/web/admin/dashboard/__init__.py b/web/admin/dashboard/__init__.py index 8812c3527..426c65905 100644 --- a/web/admin/dashboard/__init__.py +++ b/web/admin/dashboard/__init__.py @@ -17,7 +17,7 @@ import core.mw as mw blueprint = Blueprint('dashboard', __name__, url_prefix='/', template_folder='../../templates') @blueprint.route('/') def index(): - return render_template('default/index.html', data = {}) + return render_template('default/index.html') # --------------------------------------------------------------------------------- @@ -26,7 +26,7 @@ def index(): @blueprint.route('/login') def login(): - return render_template('default/login.html', data = {}) + return render_template('default/login.html') # 检查是否登录 @blueprint.route('/check_login',methods=['GET','POST']) diff --git a/web/admin/files/__init__.py b/web/admin/files/__init__.py index 3dd9d6194..e30cdd507 100644 --- a/web/admin/files/__init__.py +++ b/web/admin/files/__init__.py @@ -19,7 +19,7 @@ import utils.file as file blueprint = Blueprint('files', __name__, url_prefix='/files', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('files.html', data={}) + return render_template('files.html') # 获取文件内容 @blueprint.route('/get_body', endpoint='get_file_body', methods=['POST']) diff --git a/web/admin/firewall/__init__.py b/web/admin/firewall/__init__.py index 1a49118b3..207393fb4 100644 --- a/web/admin/firewall/__init__.py +++ b/web/admin/firewall/__init__.py @@ -20,7 +20,7 @@ import core.mw as mw blueprint = Blueprint('firewall', __name__, url_prefix='/firewall', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('firewall.html', data={}) + return render_template('firewall.html') # 防火墙列表 diff --git a/web/admin/logs/__init__.py b/web/admin/logs/__init__.py index 5e343c67d..4dc255dab 100644 --- a/web/admin/logs/__init__.py +++ b/web/admin/logs/__init__.py @@ -22,7 +22,7 @@ import utils.adult_log as adult_log blueprint = Blueprint('logs', __name__, url_prefix='/logs', template_folder='../../templates') @blueprint.route('/index', endpoint='index') def index(): - return render_template('default/logs.html', data={}) + return render_template('default/logs.html') # 日志列表 diff --git a/web/admin/model/__init__.py b/web/admin/model/__init__.py index bbf9e8a3e..ffa69ece7 100644 --- a/web/admin/model/__init__.py +++ b/web/admin/model/__init__.py @@ -9,186 +9,10 @@ # --------------------------------------------------------------------------------- -from flask_sqlalchemy import SQLAlchemy -# from flask_security import UserMixin, RoleMixin -import setting - -SCHEMA_VERSION = 1 - - -db = SQLAlchemy( - engine_options={ - 'pool_size': setting.CONFIG_DATABASE_CONNECTION_POOL_SIZE, - 'max_overflow': setting.CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW - } -) - - -class Version(db.Model): - """用于参考/升级的版本号""" - __tablename__ = 'version' - name = db.Column(db.String(32), primary_key=True) - value = db.Column(db.Integer(), nullable=False) - -class Role(db.Model): - """定义安全角色""" - __tablename__ = 'role' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.String(128), unique=True, nullable=False) - description = db.Column(db.String(256), nullable=False) - -class Option(db.Model): - """定义类型""" - __tablename__ = 'option' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.String(128), unique=True, nullable=False, comment="配置名称") - type = db.Column(db.String(50), unique=False, nullable=False, default='common',comment="计划类型:common/hook/web") - value = db.Column(db.TEXT, unique=False, nullable=False, comment="内容") - -class Users(db.Model): - """定义登录用户""" - __tablename__ = 'users' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.String(128), unique=True, nullable=False, comment="用户名") - password = db.Column(db.String(128), unique=False, nullable=False, comment="密码") - login_ip = db.Column(db.String(128), unique=False, nullable=True, comment="登录IP") - login_time = db.Column(db.String(128), unique=False, nullable=True, comment="登录时间") - phone = db.Column(db.String(20), unique=False, nullable=False,comment="手机") - email = db.Column(db.String(320), nullable=False, comment="邮件") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") - -class Crontab(db.Model): - """定义计划任务""" - __tablename__ = 'crontab' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.TEXT, unique=True, nullable=False, comment="任务名称") - type = db.Column(db.String(128), unique=False, nullable=False, comment="计划类型") - where1 = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件") - where_hour = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件/小时") - where_minute = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件/分钟") - echo = db.Column(db.TEXT, unique=False, nullable=True, comment="脚本保存名称") - sname = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="名称") - sbody = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="脚本") - stype = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="脚本类型") - url_address = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="URL访问地址") - backup_to = db.Column(db.TEXT, unique=False, nullable=True, comment="备份地址") - save = db.Column(db.Integer, unique=False, nullable=True, default=3,comment="备份数量") - status = db.Column(db.Integer, unique=False, nullable=True, default=1, comment="状态") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") - -class Logs(db.Model): - """定义日志""" - __tablename__ = 'logs' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - uid = db.Column(db.Integer(), unique=True, nullable=False, comment="用户ID") - type = db.Column(db.String(128), unique=False, nullable=False, comment="日志类型") - log = db.Column(db.TEXT, unique=False, nullable=True, comment="日志内容") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - -class Firewall(db.Model): - """定义防火墙""" - __tablename__ = 'firewall' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") - protocol = db.Column(db.Integer(), unique=False, nullable=False, comment="协议/tcp/udp") - ps = db.Column(db.TEXT, unique=False, nullable=False, comment="备注") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") - - -class Backup(db.Model): - """定义备份""" - __tablename__ = 'backup' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - pid = db.Column(db.Integer(), unique=False, nullable=False, comment="父级ID") - type = db.Column(db.String(128), unique=False, nullable=False, comment="备份类型") - name = db.Column(db.TEXT, unique=False, nullable=False, comment="名称") - filename = db.Column(db.TEXT, unique=False, nullable=False, comment="文件绝对位置") - size = db.Column(db.Integer(), unique=False, nullable=False, comment="大小") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - -class Sites(db.Model): - """定义计划任务""" - __tablename__ = 'sites' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.TEXT, unique=False, nullable=False, comment="网站名称") - path = db.Column(db.TEXT, unique=False, nullable=False, comment="网站路径") - index = db.Column(db.TEXT, unique=False, nullable=False, comment="") - ps = db.Column(db.TEXT, unique=False, nullable=False, comment="备注") - edate = db.Column(db.TEXT, unique=False, nullable=False, comment="到期时间") - type_id = db.Column(db.TEXT, unique=False, nullable=False, comment="分类ID") - status = db.Column(db.Integer(), unique=False, nullable=True, default=1, comment="状态") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") - -class SiteType(db.Model): - """定义站点类型""" - __tablename__ = 'site_type' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.TEXT, unique=False, nullable=False, comment="类型名称") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") - -class Domain(db.Model): - """定义站点域名""" - __tablename__ = 'domain' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - pid = db.Column(db.Integer(), unique=False, nullable=False, comment="站点ID") - name = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") - port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - -class Binding(db.Model): - """定义站点绑定""" - __tablename__ = 'binding' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - pid = db.Column(db.Integer(), unique=False, nullable=False, comment="站点ID") - domain = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") - path = db.Column(db.TEXT, unique=False, nullable=False, comment="路径") - port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - - -class Tasks(db.Model): - """定义任务""" - __tablename__ = 'tasks' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - name = db.Column(db.TEXT, unique=False, nullable=False, comment="任务名称") - type = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") - execstr = db.Column(db.TEXT, unique=False, nullable=False, comment="执行命令") - start = db.Column(db.Integer(), unique=False, nullable=True, comment="开始执行时间") - end = db.Column(db.Integer(), unique=False, nullable=True, comment="结束执行时间") - status = db.Column(db.Integer(), unique=False, nullable=True, default=1, comment="状态") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - - -class TempLogin(db.Model): - """定义临时登录""" - __tablename__ = 'temp_login' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - token = db.Column(db.TEXT, unique=False, nullable=False, comment="token") - salt = db.Column(db.TEXT, unique=False, nullable=False, comment="salt") - state = db.Column(db.Integer(), unique=False, nullable=False, comment="状态") - login_time = db.Column(db.Integer(), unique=False, nullable=True, comment="登录时间") - login_addr = db.Column(db.Integer(), unique=False, nullable=True, comment="登录地址") - logout_time = db.Column(db.Integer(), unique=False, nullable=True, comment="登出时间") - expire = db.Column(db.Integer(), unique=False, nullable=True, comment="过期时间") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - -class Panel(db.Model): - """定义其他面板""" - __tablename__ = 'panel' - id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") - title = db.Column(db.TEXT, unique=False, nullable=False, comment="标题") - url = db.Column(db.TEXT, unique=False, nullable=False, comment="地址") - username = db.Column(db.Integer(), unique=False, nullable=False, comment="用户名") - password = db.Column(db.Integer(), unique=False, nullable=True, comment="密码") - click = db.Column(db.Integer(), unique=False, nullable=True, comment="点击次数") - add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") - - +from .initdb import * +from .logs import addLog +from .option import getOption,getOptionByJson,setOption +from .sites import getSitesCount diff --git a/web/admin/model/initdb.py b/web/admin/model/initdb.py new file mode 100644 index 000000000..bbf9e8a3e --- /dev/null +++ b/web/admin/model/initdb.py @@ -0,0 +1,194 @@ +# coding:utf-8 + +# --------------------------------------------------------------------------------- +# MW-Linux面板 +# --------------------------------------------------------------------------------- +# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. +# --------------------------------------------------------------------------------- +# Author: midoks +# --------------------------------------------------------------------------------- + + +from flask_sqlalchemy import SQLAlchemy +# from flask_security import UserMixin, RoleMixin +import setting + +SCHEMA_VERSION = 1 + + +db = SQLAlchemy( + engine_options={ + 'pool_size': setting.CONFIG_DATABASE_CONNECTION_POOL_SIZE, + 'max_overflow': setting.CONFIG_DATABASE_CONNECTION_MAX_OVERFLOW + } +) + + +class Version(db.Model): + """用于参考/升级的版本号""" + __tablename__ = 'version' + name = db.Column(db.String(32), primary_key=True) + value = db.Column(db.Integer(), nullable=False) + +class Role(db.Model): + """定义安全角色""" + __tablename__ = 'role' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.String(128), unique=True, nullable=False) + description = db.Column(db.String(256), nullable=False) + +class Option(db.Model): + """定义类型""" + __tablename__ = 'option' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.String(128), unique=True, nullable=False, comment="配置名称") + type = db.Column(db.String(50), unique=False, nullable=False, default='common',comment="计划类型:common/hook/web") + value = db.Column(db.TEXT, unique=False, nullable=False, comment="内容") + +class Users(db.Model): + """定义登录用户""" + __tablename__ = 'users' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.String(128), unique=True, nullable=False, comment="用户名") + password = db.Column(db.String(128), unique=False, nullable=False, comment="密码") + login_ip = db.Column(db.String(128), unique=False, nullable=True, comment="登录IP") + login_time = db.Column(db.String(128), unique=False, nullable=True, comment="登录时间") + phone = db.Column(db.String(20), unique=False, nullable=False,comment="手机") + email = db.Column(db.String(320), nullable=False, comment="邮件") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") + +class Crontab(db.Model): + """定义计划任务""" + __tablename__ = 'crontab' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.TEXT, unique=True, nullable=False, comment="任务名称") + type = db.Column(db.String(128), unique=False, nullable=False, comment="计划类型") + where1 = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件") + where_hour = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件/小时") + where_minute = db.Column(db.TEXT, unique=False, nullable=True, comment="执行条件/分钟") + echo = db.Column(db.TEXT, unique=False, nullable=True, comment="脚本保存名称") + sname = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="名称") + sbody = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="脚本") + stype = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="脚本类型") + url_address = db.Column(db.TEXT, unique=False, nullable=True, default='',comment="URL访问地址") + backup_to = db.Column(db.TEXT, unique=False, nullable=True, comment="备份地址") + save = db.Column(db.Integer, unique=False, nullable=True, default=3,comment="备份数量") + status = db.Column(db.Integer, unique=False, nullable=True, default=1, comment="状态") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") + +class Logs(db.Model): + """定义日志""" + __tablename__ = 'logs' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + uid = db.Column(db.Integer(), unique=True, nullable=False, comment="用户ID") + type = db.Column(db.String(128), unique=False, nullable=False, comment="日志类型") + log = db.Column(db.TEXT, unique=False, nullable=True, comment="日志内容") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + +class Firewall(db.Model): + """定义防火墙""" + __tablename__ = 'firewall' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") + protocol = db.Column(db.Integer(), unique=False, nullable=False, comment="协议/tcp/udp") + ps = db.Column(db.TEXT, unique=False, nullable=False, comment="备注") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") + + +class Backup(db.Model): + """定义备份""" + __tablename__ = 'backup' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + pid = db.Column(db.Integer(), unique=False, nullable=False, comment="父级ID") + type = db.Column(db.String(128), unique=False, nullable=False, comment="备份类型") + name = db.Column(db.TEXT, unique=False, nullable=False, comment="名称") + filename = db.Column(db.TEXT, unique=False, nullable=False, comment="文件绝对位置") + size = db.Column(db.Integer(), unique=False, nullable=False, comment="大小") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + +class Sites(db.Model): + """定义计划任务""" + __tablename__ = 'sites' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.TEXT, unique=False, nullable=False, comment="网站名称") + path = db.Column(db.TEXT, unique=False, nullable=False, comment="网站路径") + index = db.Column(db.TEXT, unique=False, nullable=False, comment="") + ps = db.Column(db.TEXT, unique=False, nullable=False, comment="备注") + edate = db.Column(db.TEXT, unique=False, nullable=False, comment="到期时间") + type_id = db.Column(db.TEXT, unique=False, nullable=False, comment="分类ID") + status = db.Column(db.Integer(), unique=False, nullable=True, default=1, comment="状态") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") + +class SiteType(db.Model): + """定义站点类型""" + __tablename__ = 'site_type' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.TEXT, unique=False, nullable=False, comment="类型名称") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + update_time = db.Column(db.TEXT, nullable=False, comment="更新时间") + +class Domain(db.Model): + """定义站点域名""" + __tablename__ = 'domain' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + pid = db.Column(db.Integer(), unique=False, nullable=False, comment="站点ID") + name = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") + port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + +class Binding(db.Model): + """定义站点绑定""" + __tablename__ = 'binding' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + pid = db.Column(db.Integer(), unique=False, nullable=False, comment="站点ID") + domain = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") + path = db.Column(db.TEXT, unique=False, nullable=False, comment="路径") + port = db.Column(db.Integer(), unique=False, nullable=False, comment="端口") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + + +class Tasks(db.Model): + """定义任务""" + __tablename__ = 'tasks' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + name = db.Column(db.TEXT, unique=False, nullable=False, comment="任务名称") + type = db.Column(db.TEXT, unique=False, nullable=False, comment="域名") + execstr = db.Column(db.TEXT, unique=False, nullable=False, comment="执行命令") + start = db.Column(db.Integer(), unique=False, nullable=True, comment="开始执行时间") + end = db.Column(db.Integer(), unique=False, nullable=True, comment="结束执行时间") + status = db.Column(db.Integer(), unique=False, nullable=True, default=1, comment="状态") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + + +class TempLogin(db.Model): + """定义临时登录""" + __tablename__ = 'temp_login' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + token = db.Column(db.TEXT, unique=False, nullable=False, comment="token") + salt = db.Column(db.TEXT, unique=False, nullable=False, comment="salt") + state = db.Column(db.Integer(), unique=False, nullable=False, comment="状态") + login_time = db.Column(db.Integer(), unique=False, nullable=True, comment="登录时间") + login_addr = db.Column(db.Integer(), unique=False, nullable=True, comment="登录地址") + logout_time = db.Column(db.Integer(), unique=False, nullable=True, comment="登出时间") + expire = db.Column(db.Integer(), unique=False, nullable=True, comment="过期时间") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + +class Panel(db.Model): + """定义其他面板""" + __tablename__ = 'panel' + id = db.Column(db.Integer(), primary_key=True,autoincrement=True, comment="ID") + title = db.Column(db.TEXT, unique=False, nullable=False, comment="标题") + url = db.Column(db.TEXT, unique=False, nullable=False, comment="地址") + username = db.Column(db.Integer(), unique=False, nullable=False, comment="用户名") + password = db.Column(db.Integer(), unique=False, nullable=True, comment="密码") + click = db.Column(db.Integer(), unique=False, nullable=True, comment="点击次数") + add_time = db.Column(db.TEXT, nullable=False, comment="添加时间") + + + + + diff --git a/web/admin/model/sites.py b/web/admin/model/sites.py new file mode 100644 index 000000000..dbb54064f --- /dev/null +++ b/web/admin/model/sites.py @@ -0,0 +1,16 @@ +# coding:utf-8 + +# --------------------------------------------------------------------------------- +# MW-Linux面板 +# --------------------------------------------------------------------------------- +# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. +# --------------------------------------------------------------------------------- +# Author: midoks +# --------------------------------------------------------------------------------- + +from admin.model import db, Sites + + +def getSitesCount(): + return Sites.query.count() + diff --git a/web/admin/plugins/__init__.py b/web/admin/plugins/__init__.py index baa1ccff3..c7206939d 100644 --- a/web/admin/plugins/__init__.py +++ b/web/admin/plugins/__init__.py @@ -25,7 +25,7 @@ blueprint = Blueprint('plugins', __name__, url_prefix='/plugins', template_folde @blueprint.route('/index', endpoint='index') @panel_login_required def index(): - return render_template('plugins.html', data={}) + return render_template('plugins.html') # 初始化检查,首页提示选择安装 @blueprint.route('/init', endpoint='init', methods=['POST']) diff --git a/web/admin/setup/user.py b/web/admin/setup/user.py index 426919745..f31dc5ee3 100644 --- a/web/admin/setup/user.py +++ b/web/admin/setup/user.py @@ -45,4 +45,16 @@ def init_option(): # 首页展示初始化 option.setOption('display_index', '[]') + + # 监控默认配置 + option.setOption('monitor_status', 'open', type='monitor') + option.setOption('monitor_day', '30', type='monitor') + option.setOption('monitor_only_netio', 'open', type='monitor') + + # 初始化安全路径 + option.setOption('admin_path', mw.getRandomString(8)) + option.setOption('server_ip', '127.0.0.1') + + + return True \ No newline at end of file diff --git a/web/admin/site/__init__.py b/web/admin/site/__init__.py index 50a2da7ad..5abe21b76 100644 --- a/web/admin/site/__init__.py +++ b/web/admin/site/__init__.py @@ -10,19 +10,49 @@ from flask import Blueprint, render_template +from flask import request + from utils.mwplugin import MwPlugin +import core.mw as mw +from admin.model import Sites + blueprint = Blueprint('site', __name__, url_prefix='/site', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('site.html', data={}) + return render_template('site.html') # 插件列表 @blueprint.route('/list', endpoint='list', methods=['GET','POST']) def list(): - pg = MwPlugin.instance() - # print(pg.getList()) - return pg.getList() + p = request.form.get('p', '1') + limit = request.form.get('limit', '10') + type_id = request.form.get('type_id', '0').strip() + search = request.form.get('search', '').strip() + + count = Sites.query.count() + pagination = Sites.query.paginate(page=int(p), per_page=int(limit)) + + site_list = [] + for item in pagination.items: + t = {} + t['id'] = item.id + t['name'] = item.name + t['path'] = item.path + t['index'] = item.index + t['ps'] = item.ps + t['edate'] = item.edate + t['type_id'] = item.type_id + t['status'] = item.status + t['add_time'] = item.add_time + t['update_time'] = item.update_time + site_list.append(t) + + data = {} + data['data'] = site_list + data['page'] = mw.getPage({'count':count,'tojs':'getWeb','p':p, 'row':limit}) + + return data @blueprint.route('/get_site_types', endpoint='get_site_types',methods=['POST']) def get_site_types(): diff --git a/web/admin/soft/__init__.py b/web/admin/soft/__init__.py index d3d9654f5..def11c495 100644 --- a/web/admin/soft/__init__.py +++ b/web/admin/soft/__init__.py @@ -14,4 +14,4 @@ from flask import Blueprint, render_template blueprint = Blueprint('soft', __name__, url_prefix='/soft', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('soft.html', data={}) \ No newline at end of file + return render_template('soft.html') \ No newline at end of file diff --git a/web/admin/system/__init__.py b/web/admin/system/__init__.py index a32942129..6b2239b81 100644 --- a/web/admin/system/__init__.py +++ b/web/admin/system/__init__.py @@ -14,6 +14,7 @@ from flask import request import core.mw as mw import utils.system as sys +import admin.model.option as option blueprint = Blueprint('system', __name__, url_prefix='/system', template_folder='../../templates') @@ -102,7 +103,52 @@ def get_network_io(): def set_control(): stype = request.form.get('type', '') day = request.form.get('day', '') - return mw.returnData(True, "设置成功!") + + if stype == '0': + option.setOption('monitor_status', 'close', type='monitor') + return mw.returnData(True, "设置成功!") + elif stype == '1': + _day = int(day) + if _day < 1: + return mw.returnData(False, "设置失败!") + option.setOption('monitor_day', day, type='monitor') + elif stype == '2': + option.setOption('monitor_only_netio', 'close', type='monitor') + return mw.returnData(True, "设置成功!") + elif stype == '3': + option.setOption('monitor_only_netio', 'open', type='monitor') + return mw.returnData(True, "设置成功!") + elif stype == 'del': + if not mw.isRestart(): + return mw.returnData(False, '请等待所有安装任务完成再执行') + os.remove("data/system.db") + + sql = db.Sql().dbfile('system') + csql = mw.readFile('data/sql/system.sql') + csql_list = csql.split(';') + for index in range(len(csql_list)): + sql.execute(csql_list[index], ()) + return mw.returnData(True, "监控服务已关闭") + else: + monitor_status = option.getOption('monitor_status', default='open', type='monitor') + monitor_day = option.getOption('monitor_day', default='30', type='monitor') + monitor_only_netio = option.getOption('monitor_only_netio', default='open', type='monitor') + data = {} + data['day'] = monitor_day + if monitor_status == 'open': + data['status'] = True + else: + data['status'] = False + if monitor_only_netio == 'open': + data['stat_all_status'] = True + else: + data['stat_all_status'] = False + + return data + + return mw.returnData(False, "异常!") + + # 升级检测 diff --git a/web/admin/task/__init__.py b/web/admin/task/__init__.py index b42c04bcd..491dcaae2 100644 --- a/web/admin/task/__init__.py +++ b/web/admin/task/__init__.py @@ -12,6 +12,8 @@ from flask import Blueprint, render_template blueprint = Blueprint('task', __name__, url_prefix='/task', template_folder='../../templates/default') + + @blueprint.route('/count', endpoint='task_count') def task_count(): return "0" \ No newline at end of file diff --git a/web/admin/user_login_check.py b/web/admin/user_login_check.py index 742d0127c..85a730a1c 100644 --- a/web/admin/user_login_check.py +++ b/web/admin/user_login_check.py @@ -14,6 +14,6 @@ def panel_login_required(func): @wraps(func) def wrapper(*args, **kwargs): - print('panel_login_required', args, kwargs) + # print('panel_login_required', args, kwargs) return func(*args, **kwargs) return wrapper \ No newline at end of file diff --git a/web/core/mw.py b/web/core/mw.py index 3258131e2..e7ea4b041 100644 --- a/web/core/mw.py +++ b/web/core/mw.py @@ -421,6 +421,17 @@ def getPageObject(args, result='1,2,3,4,5,8'): return (page.GetPage(info, result), page) + +def getHostPort(): + if os.path.exists('data/port.pl'): + return readFile('data/port.pl').strip() + return '7200' + + +def setHostPort(port): + file = getPanelDir() + '/data/port.pl' + return writeFile(file, port) + def isAppleSystem(): if getOs() == 'darwin': return True diff --git a/web/static/app/site.js b/web/static/app/site.js index 7a03629a0..815774ad8 100755 --- a/web/static/app/site.js +++ b/web/static/app/site.js @@ -122,7 +122,7 @@ $('#site_search').click(function(){ }); } if(body.length < 10){ - body = "当前没有站点数据"; + body = "当前没有站点数据"; // $(".dataTables_paginate").hide(); $("#webBody").html(body); } diff --git a/web/templates/default/index.html b/web/templates/default/index.html index dd74bd55d..69a334cbf 100755 --- a/web/templates/default/index.html +++ b/web/templates/default/index.html @@ -77,7 +77,7 @@ diff --git a/web/templates/default/layout.html b/web/templates/default/layout.html index 22c798eea..205d8f6ea 100755 --- a/web/templates/default/layout.html +++ b/web/templates/default/layout.html @@ -5,7 +5,7 @@ -{{config['title']}} +{{data['title']}} @@ -37,7 +37,7 @@