From 010e5817dc8f31d6f58ad63be6525ba197ca9814 Mon Sep 17 00:00:00 2001 From: Vlad Date: Sat, 3 May 2025 00:14:49 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D0=BE=D0=BF=D1=82=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B8=20=D1=81=D1=82=D0=B0=D1=82=D0=B8?= =?UTF-8?q?=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/app.py b/app.py index 74e2ce3..431bd0c 100644 --- a/app.py +++ b/app.py @@ -786,26 +786,51 @@ def swagger_yaml(): @app.route('/static/') def serve_static(filename): try: - # Check file extension - allowed_extensions = {'.css', '.js', '.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg'} + # Проверка расширения файла + allowed_extensions = {'.css', '.js', '.png', '.jpg', '.jpeg', '.gif', '.ico', '.svg', '.json'} file_ext = os.path.splitext(filename)[1].lower() if file_ext not in allowed_extensions: - app.logger.warning(f'Attempt to access forbidden file type: {filename}') + app.logger.warning(f'Попытка доступа к запрещенному типу файла: {filename}') return 'Access denied', 403 - # Check path for directory traversal attempts + # Проверка пути на directory traversal safe_path = os.path.normpath(os.path.join('static', filename)) if not safe_path.startswith('static'): - app.logger.warning(f'Attempt to access file outside static directory: {filename}') + app.logger.warning(f'Попытка доступа к файлу вне директории static: {filename}') return 'Access denied', 403 - # Log file access - app.logger.info(f'Access to static file: {filename}') + # Определение MIME-типа + mime_types = { + '.css': 'text/css', + '.js': 'application/javascript', + '.json': 'application/json', + '.png': 'image/png', + '.jpg': 'image/jpeg', + '.jpeg': 'image/jpeg', + '.gif': 'image/gif', + '.ico': 'image/x-icon', + '.svg': 'image/svg+xml' + } + + mime_type = mime_types.get(file_ext, 'application/octet-stream') + + # Логирование доступа + app.logger.info(f'Доступ к статическому файлу: {filename}') + + response = make_response(send_from_directory('static', filename)) + response.headers['Content-Type'] = mime_type + + # Специальные заголовки для PWA файлов + if filename == 'manifest.json': + response.headers['Content-Type'] = 'application/manifest+json' + elif filename == 'sw.js': + response.headers['Service-Worker-Allowed'] = '/' + + return response - return send_from_directory('static', filename) except Exception as e: - app.logger.error(f'Error accessing file {filename}: {str(e)}') + app.logger.error(f'Ошибка доступа к файлу {filename}: {str(e)}') return 'File not found', 404 if __name__ == '__main__':