This commit is contained in:
Mr Chen
2024-10-30 00:55:34 +08:00
parent a015c32e42
commit eb3f78ef4a
22 changed files with 229 additions and 29 deletions
+10 -2
View File
@@ -20,13 +20,17 @@ from flask_socketio import SocketIO, emit, send
from flask import Flask, abort, request, current_app, session, url_for
from flask import Blueprint, render_template
from flask import render_template_string
from flask_migrate import Migrate
from flask_migrate import Migrate
from flask_caching import Cache
from werkzeug.local import LocalProxy
from admin.model import db as sys_db
from admin import model
from admin import setup
from admin.model import db as sys_db
import core.mw as mw
import config
import utils.config as utils_config
@@ -59,6 +63,9 @@ app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(days=31)
app.config['SQLALCHEMY_DATABASE_URI'] = mw.getSqitePrefix()+config.SQLITE_PATH # 使用 SQLite 数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
# 缓存配置
cache = Cache(config={'CACHE_TYPE': 'simple'})
cache.init_app(app, config={'CACHE_TYPE': 'simple'})
# 初始化db
sys_db.init_app(app)
@@ -91,6 +98,7 @@ for module in get_submodules():
if app.blueprints.get(module.name) is None:
app.register_blueprint(module)
@app.before_request
def requestCheck():
# print("hh")
+37
View File
@@ -0,0 +1,37 @@
# coding:utf-8
# ---------------------------------------------------------------------------------
# MW-Linux面板
# ---------------------------------------------------------------------------------
# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved.
# ---------------------------------------------------------------------------------
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
import time
from admin import model
from admin import session
def isLogined():
if 'login' in session and session['login'] == True and 'username' in session:
username = session['username']
info = model.getUserByName(username)
if info is None:
return False
# print(userInfo)
if info['name'] != session['username']:
return False
now_time = int(time.time())
if 'overdue' in session and now_time > session['overdue']:
# 自动续期
session['overdue'] = int(time.time()) + 7 * 24 * 60 * 60
return False
if 'tmp_login_expire' in session and now_time > int(session['tmp_login_expire']):
session.clear()
return False
return True
+2
View File
@@ -12,6 +12,7 @@
from flask import Blueprint, render_template
from flask import request
from admin.user_login_check import panel_login_required
from admin.model import Crontab
blueprint = Blueprint('crontab', __name__, url_prefix='/crontab', template_folder='../../templates/default')
@@ -21,6 +22,7 @@ def index():
# 插件列表
@blueprint.route('/list', endpoint='list', methods=['GET','POST'])
@panel_login_required
def list():
page = request.args.get('p', 1)
size = 10
+33 -4
View File
@@ -8,14 +8,24 @@
# Author: midoks <midoks@163.com>
# ---------------------------------------------------------------------------------
import io
import time
from flask import Blueprint, render_template
from flask import make_response
from flask import Response
from flask import request,g
from admin.common import isLogined
from admin.user_login_check import panel_login_required
from admin import cache,session
from admin import model
import core.mw as mw
blueprint = Blueprint('dashboard', __name__, url_prefix='/', template_folder='../../templates')
@blueprint.route('/')
@panel_login_required
def index():
return render_template('default/index.html')
@@ -24,6 +34,19 @@ def index():
# 定义登录入口相关方法
# ---------------------------------------------------------------------------------
# 验证码
@blueprint.route('/code')
def code():
import utils.vilidate as vilidate
vie = vilidate.vieCode()
codeImage = vie.GetCodeImage(80, 4)
out = io.BytesIO()
codeImage[0].save(out, "png")
session['code'] = mw.md5(''.join(codeImage[1]).lower())
img = Response(out.getvalue(), headers={'Content-Type': 'image/png'})
return make_response(img)
@blueprint.route('/login')
def login():
return render_template('default/login.html')
@@ -31,7 +54,9 @@ def login():
# 检查是否登录
@blueprint.route('/check_login',methods=['GET','POST'])
def check_login():
return "0"
if isLogined():
return "true"
return "false"
# 执行登录操作
@blueprint.route('/do_login', endpoint='do_login', methods=['POST'])
@@ -41,7 +66,11 @@ def do_login():
password = request.form.get('password', '').strip()
code = request.form.get('code', '').strip()
print(g)
print(username, password, code )
if 'code' in session:
if session['code'] != mw.md5(code):
return mw.returnData(False, code_msg)
return mw.returnData(False, '面板已经关闭!')
print(username, password, code)
print(cache,session)
return mw.returnData(1, '登录成功,正在跳转...')
+12 -1
View File
@@ -15,23 +15,26 @@ from flask import request
from admin import model
from admin.user_login_check import panel_login_required
import core.mw as mw
import utils.file as file
blueprint = Blueprint('files', __name__, url_prefix='/files', template_folder='../../templates/default')
@blueprint.route('/index', endpoint='index')
@panel_login_required
def index():
return render_template('files.html')
# 获取文件内容
@blueprint.route('/get_body', endpoint='get_file_body', methods=['POST'])
@panel_login_required
def get_file_body():
path = request.form.get('path', '')
return file.getFileBody(path)
# 获取文件内容
@blueprint.route('/save_body', endpoint='save_body', methods=['POST'])
@panel_login_required
def save_body():
path = request.form.get('path', '')
data = request.form.get('data', '')
@@ -56,6 +59,7 @@ def save_body():
# 获取文件内容(最新行数)
@blueprint.route('/get_last_body', endpoint='get_file_last_body', methods=['POST'])
@panel_login_required
def get_file_last_body():
path = request.form.get('path', '')
line = request.form.get('line', '100')
@@ -72,6 +76,7 @@ def get_file_last_body():
# 获取文件列表
@blueprint.route('/get_dir', endpoint='get_dir', methods=['POST'])
@panel_login_required
def get_dir():
path = request.form.get('path', '')
if not os.path.exists(path):
@@ -92,6 +97,7 @@ def get_dir():
# 获取站点日志目录
@blueprint.route('/get_dir_size', endpoint='get_dir_size', methods=['POST'])
@panel_login_required
def get_dir_size():
path = request.form.get('path', '')
size = file.getDirSize(path)
@@ -100,6 +106,7 @@ def get_dir_size():
# 删除文件
@blueprint.route('/delete', endpoint='delete', methods=['POST'])
@panel_login_required
def delete():
path = request.form.get('path', '')
return file.fileDelete(path)
@@ -107,6 +114,7 @@ def delete():
# 删除文件
@blueprint.route('/delete_dir', endpoint='delete_dir', methods=['POST'])
@panel_login_required
def delete_dir():
path = request.form.get('path', '')
return file.dirDelete(path)
@@ -114,17 +122,20 @@ def delete_dir():
# 回收站文件
@blueprint.route('/get_recycle_bin', endpoint='get_recycle_bin', methods=['POST'])
@panel_login_required
def get_recycle_bin():
return file.getRecycleBin()
# 回收站文件恢复
@blueprint.route('/re_recycle_bin', endpoint='re_recycle_bin', methods=['POST'])
@panel_login_required
def re_recycle_bin():
path = request.form.get('path', '')
return file.reRecycleBin(path)
# 回收站文件
@blueprint.route('/recycle_bin', endpoint='recycle_bin', methods=['POST'])
@panel_login_required
def recycle_bin():
return file.toggleRecycleBin()
+3
View File
@@ -19,6 +19,7 @@ import core.mw as mw
blueprint = Blueprint('firewall', __name__, url_prefix='/firewall', template_folder='../../templates/default')
@blueprint.route('/index', endpoint='index')
@panel_login_required
def index():
return render_template('firewall.html')
@@ -51,12 +52,14 @@ def get_list():
# 获取站点日志目录
@blueprint.route('/get_www_path', endpoint='get_www_path', methods=['POST'])
@panel_login_required
def get_www_path():
path = mw.getLogsDir()
return {'path': path}
# 获取站点日志目录
@blueprint.route('/get_ssh_info', endpoint='get_ssh_info', methods=['POST'])
@panel_login_required
def get_ssh_info():
pass
+2
View File
@@ -21,3 +21,5 @@ from .task import addTask
from .task import getTaskCount,getTaskUnexecutedCount,getTaskList,getTaskFirstByRun
from .task import setTaskStatus,setTaskData
from .user import getUserByName,isLoginCheck
+42
View File
@@ -0,0 +1,42 @@
# 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, 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 isLoginCheck(username, password) -> bool:
info = getUserByName(data['username'])
if info is None:
return False
if info['password'] == mw.md5(password):
return True
return False
+4 -1
View File
@@ -11,7 +11,10 @@
from flask import Blueprint, render_template
from admin.user_login_check import panel_login_required
blueprint = Blueprint('monitor', __name__, url_prefix='/monitor', template_folder='../../templates/default')
@blueprint.route('/index', endpoint='index')
@panel_login_required
def index():
return render_template('monitor.html',)
return render_template('monitor.html')
+9
View File
@@ -14,23 +14,28 @@ from flask import Blueprint, render_template
from flask import request
from admin import model
from admin.user_login_check import panel_login_required
import core.mw as mw
# 默认页面
blueprint = Blueprint('setting', __name__, url_prefix='/setting', template_folder='../../templates')
@blueprint.route('/index', endpoint='index')
@panel_login_required
def index():
return render_template('default/setting.html')
@blueprint.route('/get_panel_list', endpoint='get_panel_list', methods=['POST'])
@panel_login_required
def get_panel_list():
return []
# 设置面板名称
@blueprint.route('/set_webname', endpoint='set_webname', methods=['POST'])
@panel_login_required
def set_webname():
webname = request.form.get('webname', '')
src_webname = model.getOption('title')
@@ -40,6 +45,7 @@ def set_webname():
# 设置服务器IP
@blueprint.route('/set_ip', endpoint='set_ip', methods=['POST'])
@panel_login_required
def set_ip():
host_ip = request.form.get('host_ip', '')
src_host_ip = model.getOption('server_ip')
@@ -49,6 +55,7 @@ def set_ip():
# 默认备份目录
@blueprint.route('/set_backup_dir', endpoint='set_backup_dir', methods=['POST'])
@panel_login_required
def set_backup_dir():
backup_path = request.form.get('backup_path', '')
src_backup_path = model.getOption('backup_path')
@@ -58,6 +65,7 @@ def set_backup_dir():
# 默认站点目录
@blueprint.route('/set_www_dir', endpoint='set_www_dir', methods=['POST'])
@panel_login_required
def set_www_dir():
sites_path = request.form.get('sites_path', '')
src_sites_path = model.getOption('sites_path')
@@ -68,6 +76,7 @@ def set_www_dir():
# 设置安全入口
@blueprint.route('/set_admin_path', endpoint='set_admin_path', methods=['POST'])
@panel_login_required
def set_admin_path():
admin_path = request.form.get('admin_path', '')
admin_path_sensitive = [
+4
View File
@@ -20,6 +20,10 @@ def init_option():
model.setOption('recycle_bin', 'open')
model.setOption('template', 'default')
# 调式模式,默认关闭
model.setOption('debug', 'close')
# 开启后台任务
# model.setOption('run_bg_task', 'close')
+6 -3
View File
@@ -12,10 +12,11 @@
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
from admin.user_login_check import panel_login_required
from utils.mwplugin import MwPlugin
import core.mw as mw
blueprint = Blueprint('site', __name__, url_prefix='/site', template_folder='../../templates/default')
@blueprint.route('/index', endpoint='index')
@@ -24,6 +25,7 @@ def index():
# 插件列表
@blueprint.route('/list', endpoint='list', methods=['GET','POST'])
@panel_login_required
def list():
p = request.form.get('p', '1')
limit = request.form.get('limit', '10')
@@ -55,5 +57,6 @@ def list():
return data
@blueprint.route('/get_site_types', endpoint='get_site_types',methods=['POST'])
@panel_login_required
def get_site_types():
return []
+2
View File
@@ -11,6 +11,8 @@
from flask import Blueprint, render_template
from admin.user_login_check import panel_login_required
blueprint = Blueprint('soft', __name__, url_prefix='/soft', template_folder='../../templates/default')
@blueprint.route('/index', endpoint='index')
def index():
+13 -1
View File
@@ -12,14 +12,18 @@
from flask import Blueprint, render_template
from flask import request
from admin.user_login_check import panel_login_required
import admin.model.option as option
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')
# 获取系统的统计信息
@blueprint.route('/system_total', endpoint='system_total')
@panel_login_required
def system_total():
data = sys.getMemInfo()
cpu = sys.getCpuInfo(interval=1)
@@ -32,6 +36,7 @@ def system_total():
# 获取系统的网络流量信息
@blueprint.route('/network', endpoint='network')
@panel_login_required
def network():
stat = {}
stat['cpu'] = sys.getCpuInfo()
@@ -43,12 +48,14 @@ def network():
# 获取系统的磁盘信息
@blueprint.route('/disk_info', endpoint='disk_info')
@panel_login_required
def disk_info():
data = sys.getDiskInfo()
return data
# 获取系统的负载统计信息
@blueprint.route('/get_load_average', endpoint='get_load_average', methods=['GET'])
@panel_login_required
def get_load_average():
start = request.args.get('start', '')
end = request.args.get('end', '')
@@ -62,6 +69,7 @@ def get_load_average():
# 获取系统的磁盘IO统计信息
@blueprint.route('/get_disk_io', endpoint='get_disk_io', methods=['GET'])
@panel_login_required
def get_disk_io():
start = request.args.get('start', '')
end = request.args.get('end', '')
@@ -73,6 +81,7 @@ def get_disk_io():
# 获取系统的CPU/IO统计信息
@blueprint.route('/get_cpu_io', endpoint='get_cpu_io', methods=['GET'])
@panel_login_required
def get_cpu_io():
start = request.args.get('start', '')
end = request.args.get('end', '')
@@ -87,6 +96,7 @@ def get_cpu_io():
# 获取系统网络IO统计信息
@blueprint.route('/get_network_io', endpoint='get_network_io', methods=['GET'])
@panel_login_required
def get_network_io():
start = request.args.get('start', '')
end = request.args.get('end', '')
@@ -100,6 +110,7 @@ def get_network_io():
# 获取系统网络IO统计信息
@blueprint.route('/set_control', endpoint='set_control', methods=['POST'])
@panel_login_required
def set_control():
stype = request.form.get('type', '')
day = request.form.get('day', '')
@@ -153,6 +164,7 @@ def set_control():
# 升级检测
@blueprint.route('/update_server', endpoint='update_server')
@panel_login_required
def update_server():
panel_type = request.args.get('type', 'check')
version = request.args.get('version', '')
+5
View File
@@ -14,6 +14,7 @@ from flask import request
from admin import model
from admin.model import db,Tasks
from admin.user_login_check import panel_login_required
import core.mw as mw
@@ -21,11 +22,13 @@ blueprint = Blueprint('task', __name__, url_prefix='/task', template_folder='../
@blueprint.route('/count', endpoint='task_count')
@panel_login_required
def task_count():
return str(model.getTaskUnexecutedCount())
@blueprint.route('/list', endpoint='list', methods=['POST'])
@panel_login_required
def list():
p = request.form.get('p', '1')
limit = request.form.get('limit', '10').strip()
@@ -53,12 +56,14 @@ def list():
return data
@blueprint.route('/get_exec_log', endpoint='get_exec_log', methods=['POST'])
@panel_login_required
def get_exec_log():
file = mw.getPanelTaskLog()
return mw.getLastLine(file, 100)
@blueprint.route('/get_task_speed', endpoint='get_task_speed', methods=['POST'])
@panel_login_required
def get_task_speed():
count = model.getTaskUnexecutedCount()
if count == 0:
+8 -2
View File
@@ -10,10 +10,16 @@
from functools import wraps
from admin import model
from admin import session
from admin.common import isLogined
def panel_login_required(func):
@wraps(func)
def wrapper(*args, **kwargs):
# print('panel_login_required', args, kwargs)
if not isLogined():
return {'status':False, 'msg':'未登录/登录过期'}
return func(*args, **kwargs)
return wrapper