From d988ce55b1b72fde07f8bdd048d261d0dffed807 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Mon, 21 Oct 2024 03:19:08 +0800 Subject: [PATCH] update --- requirements.txt | 3 +- web/admin/__init__.py | 77 ++++++++++++++++++++++++++++++--- web/admin/dashboard/__init__.py | 5 +++ web/admin/site/__init__.py | 6 ++- web/app.py | 2 +- web/core/mw.py | 77 +++++++++++++++++++++++++++++++++ 6 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 web/core/mw.py diff --git a/requirements.txt b/requirements.txt index 824ea4357..d98ebd751 100644 --- a/requirements.txt +++ b/requirements.txt @@ -14,7 +14,8 @@ gevent>=22.10.2 gevent-websocket==0.10.1 psutil==5.9.1 chardet==3.0.4 -flask-sqlalchemy==2.3.2 +sqlalchemy==1.4.47 +flask-sqlalchemy==2.5.1 pyOpenSSL==23.2.0 cryptography>=40.0.2 configparser==5.2.0 diff --git a/web/admin/__init__.py b/web/admin/__init__.py index 084098e65..f60eee490 100644 --- a/web/admin/__init__.py +++ b/web/admin/__init__.py @@ -16,6 +16,8 @@ from flask import Flask, abort, request, current_app, session, url_for from werkzeug.local import LocalProxy from flask import Blueprint, render_template from flask import render_template_string + +import core.mw as mw import setting socketio = SocketIO(manage_session=False, async_mode='threading', @@ -29,6 +31,16 @@ socketio.init_app(app, cors_allowed_origins="*") from whitenoise import WhiteNoise app.wsgi_app = WhiteNoise(app.wsgi_app, root="../web/static/", prefix="static/", max_age=604800) + + +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///tmp/example.db' # 使用 SQLite 数据库 +app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False + + + +# print(mw.getRunDir()) + + # 加载模块 from .submodules import get_submodules for module in get_submodules(): @@ -37,13 +49,6 @@ for module in get_submodules(): app.register_blueprint(module) -# Log the startup -app.logger.info('########################################################') -app.logger.info('Starting %s v%s...', setting.APP_NAME, setting.APP_VERSION) -app.logger.info('########################################################') -app.logger.debug("Python syspath: %s", sys.path) - - @app.after_request def requestAfter(response): response.headers['soft'] = setting.APP_NAME @@ -56,6 +61,64 @@ def page_unauthorized(error): return render_template_string('404 not found', error_info=error), 404 +# 设置模板全局变量 +@app.context_processor +def inject_global_variables(): + config = { + 'version': setting.APP_VERSION + } + return dict(config=config) + + +# from flasgger import Swagger +# Swagger(app) + +# @app.route('/colors//') +# def colors(palette): +# """ +# 根据调色板名称返回颜色列表 +# --- +# parameters: +# - name: palette +# in: path +# type: string +# enum: ['all', 'rgb', 'cmyk'] +# required: true +# default: all +# definitions: +# Palette: +# type: object +# properties: +# palette_name: +# type: array +# items: +# $ref: '#/definitions/Color' +# Color: +# type: string +# responses: +# 200: +# description: 返回的颜色列表,可按调色板过滤 +# schema: +# $ref: '#/definitions/Palette' +# examples: +# rgb: ['red', 'green', 'blue'] +# """ +# all_colors = { +# 'cmyk': ['cyan', 'magenta', 'yellow', 'black'], +# 'rgb': ['red', 'green', 'blue'] +# } +# if palette == 'all': +# result = all_colorselse +# result = {palette: all_colors.get(palette)} +# return jsonify(result) + + +# Log the startup +app.logger.info('########################################################') +app.logger.info('Starting %s v%s...', setting.APP_NAME, setting.APP_VERSION) +app.logger.info('########################################################') +app.logger.debug("Python syspath: %s", sys.path) + # def create_app(app_name = None): # # if not app_name: diff --git a/web/admin/dashboard/__init__.py b/web/admin/dashboard/__init__.py index 4028586d0..6ab6fa9b2 100644 --- a/web/admin/dashboard/__init__.py +++ b/web/admin/dashboard/__init__.py @@ -15,3 +15,8 @@ blueprint = Blueprint('dashboard', __name__, url_prefix='/', template_folder='.. @blueprint.route('/') def index(): return render_template('index.html', data = {}) + + +@blueprint.route('/check_login') +def check_login(): + return "0" diff --git a/web/admin/site/__init__.py b/web/admin/site/__init__.py index fb3ac9d8d..51ade7b19 100644 --- a/web/admin/site/__init__.py +++ b/web/admin/site/__init__.py @@ -14,4 +14,8 @@ from flask import Blueprint, render_template blueprint = Blueprint('site', __name__, url_prefix='/site', template_folder='../../templates/default') @blueprint.route('/index', endpoint='index') def index(): - return render_template('site.html', data={}) \ No newline at end of file + return render_template('site.html', data={}) + +@blueprint.route('/get_site_types', endpoint='get_site_types',methods=['POST']) +def get_site_types(): + return [] \ No newline at end of file diff --git a/web/app.py b/web/app.py index 1b073c67b..1e833ce89 100644 --- a/web/app.py +++ b/web/app.py @@ -37,4 +37,4 @@ def main(): ) if __name__ == '__main__': - main() + app.run(debug=True) diff --git a/web/core/mw.py b/web/core/mw.py new file mode 100644 index 000000000..7286d67fb --- /dev/null +++ b/web/core/mw.py @@ -0,0 +1,77 @@ +# coding:utf-8 + +# --------------------------------------------------------------------------------- +# MW-Linux面板 +# --------------------------------------------------------------------------------- +# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. +# --------------------------------------------------------------------------------- +# Author: midoks +# --------------------------------------------------------------------------------- + +# --------------------------------------------------------------------------------- +# 核心方法库 +# --------------------------------------------------------------------------------- + + +import os +import sys +import time +import string +import json +import hashlib +import shlex +import datetime +import subprocess +import glob +import base64 +import re + +from random import Random + +def execShell(cmdstring, cwd=None, timeout=None, shell=True): + + if shell: + cmdstring_list = cmdstring + else: + cmdstring_list = shlex.split(cmdstring) + if timeout: + end_time = datetime.datetime.now() + datetime.timedelta(seconds=timeout) + + sub = subprocess.Popen(cmdstring_list, cwd=cwd, stdin=subprocess.PIPE, + shell=shell, bufsize=4096, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + while sub.poll() is None: + time.sleep(0.1) + if timeout: + if end_time <= datetime.datetime.now(): + raise Exception("Timeout:%s" % cmdstring) + + if sys.version_info[0] == 2: + return sub.communicate() + + data = sub.communicate() + # python3 fix 返回byte数据 + if isinstance(data[0], bytes): + t1 = str(data[0], encoding='utf-8') + + if isinstance(data[1], bytes): + t2 = str(data[1], encoding='utf-8') + return (t1, t2) + + +def getTracebackInfo(): + import traceback + errorMsg = traceback.format_exc() + return errorMsg + +def getRunDir(): + return os.getcwd() + +def dbSqitePrefix(): + WIN = sys.platform.startswith('win') + if WIN: # 如果是 Windows 系统,使用三个斜线 + prefix = 'sqlite:///' + else: # 否则使用四个斜线 + prefix = 'sqlite:////' + return prefix +