2025-10-14 11:42:57 +05:00
|
|
|
|
"""
|
|
|
|
|
|
Конфигурация CORS для FastAPI-приложения GONETS.
|
|
|
|
|
|
|
|
|
|
|
|
Модуль инкапсулирует добавление middleware `CORSMiddleware` со списком
|
|
|
|
|
|
разрешённых источников (origins), характерных для локальной разработки и
|
2025-10-21 09:20:50 +05:00
|
|
|
|
типовых портов фронтенда (например, Vite/React на 5173/5174, dev-серверы).
|
2025-10-14 11:42:57 +05:00
|
|
|
|
|
|
|
|
|
|
Использование:
|
|
|
|
|
|
cors_config = CORSMiddlewareConfig(app)
|
|
|
|
|
|
cors_config.add_cors_middleware()
|
|
|
|
|
|
|
|
|
|
|
|
Поведение:
|
|
|
|
|
|
- Разрешены все методы (`allow_methods=["*"]`) и заголовки (`allow_headers=["*"]`).
|
|
|
|
|
|
- Разрешены креденшлы (`allow_credentials=True`) для работы с куками (локаль и др.).
|
|
|
|
|
|
- При необходимости список `origins` можно расширить или параметризовать
|
|
|
|
|
|
на основе конфигурационного файла окружения.
|
|
|
|
|
|
"""
|
2025-06-09 10:17:12 +05:00
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
|
from starlette.middleware.cors import CORSMiddleware
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CORSMiddlewareConfig:
|
|
|
|
|
|
"""
|
|
|
|
|
|
Класс для настройки CORS политики в FastAPI
|
|
|
|
|
|
"""
|
2025-06-12 16:32:05 +05:00
|
|
|
|
|
2025-06-09 10:17:12 +05:00
|
|
|
|
def __init__(self, app: FastAPI) -> None:
|
2025-06-12 16:32:05 +05:00
|
|
|
|
"""Инициализируем приложение FastAPI и список допустимых CORS-оригинов"""
|
2025-06-09 10:17:12 +05:00
|
|
|
|
self.app = app
|
|
|
|
|
|
self.origins = [
|
|
|
|
|
|
"http://localhost.tiangolo.com",
|
|
|
|
|
|
"https://localhost.tiangolo.com",
|
|
|
|
|
|
"http://localhost",
|
|
|
|
|
|
"http://localhost:8080",
|
|
|
|
|
|
"http://localhost:5174",
|
|
|
|
|
|
"http://localhost:5173",
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def add_cors_middleware(self) -> None:
|
2025-06-12 16:32:05 +05:00
|
|
|
|
"""Добавляем CORS в приложение FastAPI"""
|
2025-06-09 10:17:12 +05:00
|
|
|
|
self.app.add_middleware(
|
|
|
|
|
|
CORSMiddleware,
|
|
|
|
|
|
allow_origins=self.origins,
|
|
|
|
|
|
allow_credentials=True,
|
|
|
|
|
|
allow_methods=["*"],
|
|
|
|
|
|
allow_headers=["*"],
|
|
|
|
|
|
)
|