mirror of
https://github.com/midoks/mdserver-web.git
synced 2026-10-18 23:45:52 +08:00
update
This commit is contained in:
+10
-2
@@ -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")
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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, '登录成功,正在跳转...')
|
||||
|
||||
@@ -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()
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -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')
|
||||
@@ -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 = [
|
||||
|
||||
@@ -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')
|
||||
|
||||
|
||||
@@ -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 []
|
||||
@@ -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():
|
||||
|
||||
@@ -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', '')
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user