# -*- coding: utf-8 -*- from __future__ import print_function, unicode_literals, absolute_import, division import traceback from flask import request, make_response, send_file from flask_cors import CORS from werkzeug.middleware.proxy_fix import ProxyFix from domain_admin import compat from domain_admin.log import logger from domain_admin.config import TEMP_DIR, APP_MODE from domain_admin.model.base_model import db from domain_admin.model.database import init_database from domain_admin.router import api_map, permission from domain_admin.service import scheduler_service, system_service from domain_admin.service import version_service from domain_admin.utils.flask_ext import handler from domain_admin.utils.flask_ext import register from domain_admin.utils.flask_ext.flask_app import FlaskApp from domain_admin.utils.whois_util import whois_util app = FlaskApp( import_name=__name__, static_folder="public", static_url_path="/" ) @app.before_request def before_request(): """跨域请求会出现options,直接返回即可""" if request.method == 'OPTIONS': response = make_response() # 响应的有效时间,单位是【秒】 response.headers.set('Access-Control-Max-Age', 60 * 30) return response permission.parse_token() db.connect(reuse_if_open=True) @app.teardown_request def teardown_request(exc): if not db.is_closed(): db.close() @app.get('/') def index(): """ 静态首页 :return: """ return send_file('public/index.html') @app.get('/m/') def mobile(): """ 移动端首页 :return: """ return send_file('public/m/index.html') @app.get('/test') def app_hello(): """ 测试页 :return: """ return 'hello' @app.get('/temp/') def temp(filename): """临时文件""" return send_file(compat.safe_join(TEMP_DIR, filename)) def init_app(flask_app): """ 初始化app :param flask_app: :return: """ logger.info('init_app') # 设置 SECRET_KEY(必须在注册路由之前设置,因为 OIDC 需要使用 session) from domain_admin.config import SECRET_KEY flask_app.config['SECRET_KEY'] = SECRET_KEY # 注册路由 register.register_app_routers(flask_app, api_map.routes) # 全局异常捕获,也相当于一个视图函数 flask_app.register_error_handler(Exception, handler.error_handler) flask_app.wsgi_app = ProxyFix(flask_app.wsgi_app) # 允许跨域 CORS(flask_app, supports_credentials=True) # 初始化数据库 init_database() # fixed: peewee.OperationalError: no such table: tb_version # ref: https://github.com/coleifer/peewee/issues/2095 # 初始化完数据库和表之后等待写入完成 # time.sleep(0.01) # 版本自动升级 version_service.update_version() if APP_MODE == 'production': # 启动定时器 scheduler_service.init_scheduler() # 初始化全局常量配置 system_service.init_system_config(flask_app) # 初始化 OIDC 单点登录 from domain_admin.service import oidc_service oidc_service.init_oidc(flask_app) # 尝试更新whois_servers文件 # try: # whois_util.update_whois_servers() # except Exception as e: # if APP_MODE == 'development': # logger.error(traceback.format_exc()) init_app(app)