diff --git a/web/admin/model/__init__.py b/web/admin/model/__init__.py deleted file mode 100644 index e2bb5f82e..000000000 --- a/web/admin/model/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - - -from .initdb import * - -from .logs import addLog,clearLog - -from .option import getOption,getOptionByJson,setOption -from .option import setOption - -from .sites import getSitesCount - -from .task import addTask -from .task import getTaskCount,getTaskUnexecutedCount,getTaskList,getTaskFirstByRun,getTaskRunList -from .task import setTaskStatus,setTaskData - -from .user import isLoginCheck -from .user import getUserByName,getUserById,getUserByRoot -from .user import setUserByRoot - -from .firewall import addFirewall - -from .temp_login import getTempLoginByToken,clearTempLogin - - - - - diff --git a/web/admin/model/firewall.py b/web/admin/model/firewall.py deleted file mode 100644 index db7c36939..000000000 --- a/web/admin/model/firewall.py +++ /dev/null @@ -1,41 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - -from admin.model import db, Firewall - -import core.mw as mw - - - -def addFirewall(port, - protocol: str | None = 'tcp', - ps: str | None = '备注' -) -> bool: - ''' - 设置配置的值 - :port -> str 端口 (必填) - :protocol -> str 协议 (可选|tcp,udp,tcp/udp) - :ps -> str 备注 (可选) - ''' - now_time = mw.formatDate() - add_data = Firewall( - port=port, - protocol=protocol, - add_time=now_time, - update_time=now_time) - db.session.add(add_data) - db.session.commit() - return True - - -def getFirewallCountByPort(port): - return Firewall.query.filter(Tasks.port==port).count() - - diff --git a/web/admin/model/initdb.py b/web/admin/model/initdb.py deleted file mode 100644 index 8923feebc..000000000 --- a/web/admin/model/initdb.py +++ /dev/null @@ -1,194 +0,0 @@ -# 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 config - -SCHEMA_VERSION = 1 - - -db = SQLAlchemy( - engine_options={ - 'pool_size': config.CONFIG_DATABASE_CONNECTION_POOL_SIZE, - 'max_overflow': config.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=False, 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="类型") - cmd = 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/logs.py b/web/admin/model/logs.py deleted file mode 100644 index 54cda769f..000000000 --- a/web/admin/model/logs.py +++ /dev/null @@ -1,48 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - - -import json -import time - -from admin.model import db, Logs -import core.mw as mw - -def clearLog(): - try: - # from sqlalchemy import text - # db.session.execute(text("DELETE FROM logs where id>1")) - db.session.query(Logs).filter(Logs.id > 0).delete(synchronize_session=False) - db.session.commit() - except Exception as e: - db.session.commit() - finally: - db.session.close() - return True - -def addLog(type, log, - uid: int | None = 1 -) -> str: - ''' - 添加日志 - :type -> str 类型 (必填) - :log -> str 日志内容 (必填) - :uid -> int 用户ID - ''' - now_time = mw.formatDate() - add_logs = Logs( - uid=uid, - log=log, - type=type, - add_time=now_time) - db.session.add(add_logs) - db.session.commit() - db.session.close() - return True \ No newline at end of file diff --git a/web/admin/model/option.py b/web/admin/model/option.py deleted file mode 100644 index cbb277be5..000000000 --- a/web/admin/model/option.py +++ /dev/null @@ -1,74 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - - -import json - -from admin.model import db, Option - -def getOption(name, - type: str | None = 'common', - default : str | None = None -) -> str: - ''' - 获取配置的值 - :name -> str 名称 (必填) - :type -> str 类型 (可选|默认common) - :default -> str 默认值 (可选) - ''' - data = Option.query.filter_by(name=name, type=type).first() - if data is not None: - return data.value - - if default is not None: - return default - return '' - -def getOptionByJson(name, - type: str | None = 'common', - default : object | None = None -) -> object: - ''' - 获取配置的值,返回对象类型 - :name -> str 名称 (必填) - :type -> str 类型 (可选|默认common) - :default -> str 默认值 (可选) - ''' - data = Option.query.filter_by(name=name, type=type).first() - if data is not None: - return json.loads(data.value) - - if default is not None: - return default - return [] - -def setOption(name, value, - type: str | None = 'common' -) -> bool: - ''' - 设置配置的值 - :name -> str 名称 (必填) - :value -> object值 (必填) - :type -> str 类型 (可选|默认common) - ''' - data = Option.query.filter_by(name=name, type=type).first() - if data is None: - add_option = Option( - name=name, - type=type, - value=value) - db.session.add(add_option) - db.session.commit() - db.session.close() - return True - - db.session.query(Option).filter_by(name=name, type=type).update({"value":value}) - db.session.commit() - return True \ No newline at end of file diff --git a/web/admin/model/sites.py b/web/admin/model/sites.py deleted file mode 100644 index dbb54064f..000000000 --- a/web/admin/model/sites.py +++ /dev/null @@ -1,16 +0,0 @@ -# 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/model/task.py b/web/admin/model/task.py deleted file mode 100644 index c3ba9ccc7..000000000 --- a/web/admin/model/task.py +++ /dev/null @@ -1,135 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - -from admin.model import db, Tasks - -import core.mw as mw - -def getTaskCount( - status: int | None = -1 - ) -> int: - return Tasks.query.filter(Tasks.status==status).count() - -# 未执行任务总数 -def getTaskUnexecutedCount() -> int: - return Tasks.query.filter(Tasks.status!=1).count() - - -def addTask( - name: str | None = '常用任务', - cmd: str | None = None, - type: str | None = 'execshell', - status: int | None = 0, -): - ''' - 添加后台任务 - :name -> str 类型 - :cmd -> str 日志内容 (必填) - :type -> str 用户ID - ''' - if cmd is None: - return False - - add_time = mw.formatDate() - add_data = Tasks( - name=name, - cmd=cmd, - type=type, - start=0, - end=0, - status=status, - add_time=add_time) - db.session.add(add_data) - db.session.commit() - db.session.close() - return True - -def getTaskFirstByRun() -> None: - item = Tasks.query.filter(Tasks.status==-1).order_by(Tasks.id.asc()).first() - - if item is None: - return None - row = {} - row['id'] = item.id - row['name'] = item.name - row['type'] = item.type - row['cmd'] = item.cmd - row['start'] = item.start - row['end'] = item.end - row['status'] = item.status - row['add_time'] = item.add_time - return row - -def getTaskList( - status: int | None = 1, - page: int | None = 1, - size: int | None = 10, -): - pagination = Tasks.query.filter(Tasks.status==status).order_by(Tasks.id.asc()).paginate(page=int(page), per_page=int(size)) - - rows = [] - for item in pagination.items: - t = {} - t['id'] = item.id - t['name'] = item.name - t['type'] = item.type - t['cmd'] = item.cmd - t['start'] = item.start - t['end'] = item.end - t['status'] = item.status - t['add_time'] = item.add_time - rows.append(t) - return rows - -def getTaskRunList( - page: int | None = 1, - size: int | None = 10, -): - pagination = Tasks.query.filter(Tasks.status!=1).order_by(Tasks.id.asc()).paginate(page=int(page), per_page=int(size)) - - rows = [] - for item in pagination.items: - t = {} - t['id'] = item.id - t['name'] = item.name - t['type'] = item.type - t['cmd'] = item.cmd - t['start'] = item.start - t['end'] = item.end - t['status'] = item.status - t['add_time'] = item.add_time - rows.append(t) - return rows - - - - -def setTaskStatus(id, - status: int | None = 0 -): - Tasks.query.filter(Tasks.id==id).update({'status':status}) - db.session.commit() - return True - -def setTaskData(id, - start: int | None = None, - end: int | None = None, -): - update_data = {} - - if start is not None: - update_data['start'] = start - if end is not None: - update_data['end'] = end - - Tasks.query.filter(Tasks.id==id).update(update_data) - db.session.commit() - return True - diff --git a/web/admin/model/temp_login.py b/web/admin/model/temp_login.py deleted file mode 100644 index ac60f45c4..000000000 --- a/web/admin/model/temp_login.py +++ /dev/null @@ -1,44 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - -import time - -from admin.model import db, TempLogin - -import core.mw as mw - -def getTempLoginByToken(token, -) -> None: - ''' - 获取用户信息通过用户名 - ''' - item = TempLogin.query.filter(TempLogin.token==token).first() - if item is None: - return None - row = {} - row['id'] = item.id - row['token'] = item.token - row['salt'] = item.salt - row['state'] = item.state - row['login_time'] = item.login_time - row['login_addr'] = item.login_addr - row['logout_time'] = item.logout_time - row['expire'] = item.expire - row['add_time'] = item.add_time - return row - -def clearTempLogin()->bool: - ''' - 清空过期数据 - ''' - now_time = int(time.time()) - TempLogin.query.filter(TempLogin.expire -# --------------------------------------------------------------------------------- - -from admin.model import db, Users - -import core.mw as mw - -def getUserByName(name, -) -> None: - ''' - 获取用户信息通过用户名 - ''' - item = Users.query.filter(Users.name==name).first() - if item is None: - return None - row = {} - row['id'] = item.id - row['name'] = item.name - row['password'] = item.password - row['login_ip'] = item.login_ip - row['login_time'] = item.login_time - row['phone'] = item.phone - row['email'] = item.email - row['add_time'] = item.add_time - row['update_time'] = item.update_time - return row - -def getUserById(id, -) -> None: - ''' - 获取用户信息通过用户名 - ''' - item = Users.query.filter(Users.id==id).first() - if item is None: - return None - row = {} - row['id'] = item.id - row['name'] = item.name - row['password'] = item.password - row['login_ip'] = item.login_ip - row['login_time'] = item.login_time - row['phone'] = item.phone - row['email'] = item.email - row['add_time'] = item.add_time - row['update_time'] = item.update_time - return row - -def getUserByRoot() -> None: - ''' - 获取用户信息通过用户名 - ''' - return getUserById(1) - -def setUserByRoot( - name: str | None = None, - password: str | None = None, -) -> bool: - ''' - 设置配置的值 - :name -> str 名称 (必填) - :value -> object值 (必填) - :type -> str 类型 (可选|默认common) - ''' - data = {} - - if name is not None: - data['name'] = name - - if password is not None: - data['password'] = mw.md5(password) - - if not data: - return False - - Users.query.filter(Users.id==1).update(data) - db.session.commit() - return True - -def isLoginCheck(username, password) -> bool: - info = getUserByName(data['username']) - if info is None: - return False - - if info['password'] == mw.md5(password): - return True - return False