pull/628/head
Mr Chen 7 months ago
parent f7c9e6636a
commit f2443d9473
  1. 1
      clear.sh
  2. 5
      web/admin/__init__.py
  3. 2
      web/admin/config/__init__.py
  4. 2
      web/admin/control/__init__.py
  5. 2
      web/admin/crontab/__init__.py
  6. 4
      web/admin/dashboard/__init__.py
  7. 2
      web/admin/files/__init__.py
  8. 2
      web/admin/firewall/__init__.py
  9. 2
      web/admin/logs/__init__.py
  10. 184
      web/admin/model/__init__.py
  11. 194
      web/admin/model/initdb.py
  12. 16
      web/admin/model/sites.py
  13. 2
      web/admin/plugins/__init__.py
  14. 12
      web/admin/setup/user.py
  15. 38
      web/admin/site/__init__.py
  16. 2
      web/admin/soft/__init__.py
  17. 48
      web/admin/system/__init__.py
  18. 2
      web/admin/task/__init__.py
  19. 2
      web/admin/user_login_check.py
  20. 11
      web/core/mw.py
  21. 2
      web/static/app/site.js
  22. 2
      web/templates/default/index.html
  23. 4
      web/templates/default/layout.html
  24. 33
      web/utils/config.py

@ -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

@ -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

@ -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')

@ -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={})
return render_template('control.html',)

@ -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'])

@ -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'])

@ -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'])

@ -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')
# 防火墙列表

@ -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')
# 日志列表

@ -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

@ -0,0 +1,194 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
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="添加时间")

@ -0,0 +1,16 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
from admin.model import db, Sites
def getSitesCount():
return Sites.query.count()

@ -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'])

@ -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

@ -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():

@ -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={})
return render_template('soft.html')

@ -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, "异常!")
# 升级检测

@ -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"

@ -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

@ -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

@ -122,7 +122,7 @@ $('#site_search').click(function(){
});
}
if(body.length < 10){
body = "<tr><td colspan='9'>当前没有站点数据</td></tr>";
body = "<tr><td colspan='9' style='text-align: center;'>当前没有站点数据</td></tr>";
// $(".dataTables_paginate").hide();
$("#webBody").html(body);
}

@ -77,7 +77,7 @@
<ul class="clearfix text-center" id='index_overview'>
<li class="sys-li-box col-xs-3 col-sm-3 col-md-3 col-lg-3">
<p class="name f15 c9">网站</p>
<div class="val"><a class="btlink" href="/site">{{data['site_count']}}</a></div>
<div class="val"><a class="btlink" href="/site/index">{{data['site_count']}}</a></div>
</li>
</ul>
</div>

@ -5,7 +5,7 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<title>{{config['title']}}</title>
<title>{{data['title']}}</title>
<link rel="shortcut icon" href="/static/favicon.ico" type="image/x-icon" />
<link href="/static/bootstrap-3.3.5/css/bootstrap.min.css?v={{config.version}}" rel="stylesheet">
<link href="/static/css/site.css?v={{config.version}}" rel="stylesheet">
@ -37,7 +37,7 @@
<div class="sidebar-scroll">
<div class="sidebar-auto">
<div id="task" class="task cw" onclick="messageBox();"></div>
<h3 class="mypcip"><span class="f14 cw">{{config['ip']}}</span></h3>
<h3 class="mypcip"><span class="f14 cw">{{data['ip']}}</span></h3>
<ul class="menu">
<li id="memuA"><a class="menu_home" href="/">首页</a></li>
<li id="memuAsite"><a class="menu_web" href="/site/index">网站</a></li>

@ -0,0 +1,33 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
from admin.model import getOption,getSitesCount
import core.mw as mw
def getGlobalVar():
'''
获取全局变量
'''
data = {}
data['title'] = getOption('title', default='后羿面板')
data['ip'] = getOption('server_ip', default='127.0.0.1')
data['site_path'] = getOption('site_path', default=mw.getFatherDir()+'/wwwroot')
data['backup_path'] = getOption('backup_path', default=mw.getFatherDir()+'/backup')
data['admin_path'] = '/'+getOption('admin_path', default='')
data['site_count'] = getSitesCount()
data['port'] = mw.getHostPort()
# 服务器时间
sformat = 'date +"%Y-%m-%d %H:%M:%S %Z %z"'
data['systemdate'] = mw.execShell(sformat)[0].strip()
return data
Loading…
Cancel
Save