Ajuste cors
This commit is contained in:
parent
de70b15bdb
commit
540d11899e
1 changed files with 59 additions and 38 deletions
97
main.py
97
main.py
|
|
@ -6,36 +6,67 @@ import sys
|
||||||
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
||||||
|
|
||||||
# Importa a classe principal do FastAPI
|
# Importa a classe principal do FastAPI
|
||||||
from fastapi import FastAPI, Request
|
from fastapi import FastAPI, Request, Response
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
# Importa o middleware de CORS
|
# Importa o middleware de CORS
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
from fastapi.responses import Response
|
|
||||||
from starlette.middleware.base import BaseHTTPMiddleware
|
|
||||||
|
|
||||||
# Importa o roteador principal da API versão 1
|
# Importa o roteador principal da API versão 1
|
||||||
from packages.v1.api import api_router
|
from packages.v1.api import api_router
|
||||||
from packages.v1.system.service.startup_check_service import \
|
from packages.v1.system.service.startup_check_service import StartupCheckService
|
||||||
StartupCheckService
|
|
||||||
|
|
||||||
# Importa as configurações globais da aplicação
|
# Importa as configurações globais da aplicação
|
||||||
from actions.log.log import Log
|
from actions.log.log import Log
|
||||||
from actions.config.config import Config
|
from actions.config.config import Config
|
||||||
from actions.system.handlers import register_exception_handlers
|
from actions.system.handlers import register_exception_handlers
|
||||||
|
|
||||||
|
# Carrega as configurações do app
|
||||||
config = Config.get('app.json')
|
config = Config.get('app.json')
|
||||||
|
|
||||||
# Instancia o app FastAPI com um título personalizado
|
# Instancia o app FastAPI com um título personalizado
|
||||||
app = FastAPI(title='Monitoramento Orius')
|
app = FastAPI(title='Monitoramento Orius')
|
||||||
|
|
||||||
# Controle de erros personalizados
|
# Registra o controle de erros personalizados
|
||||||
register_exception_handlers(app)
|
register_exception_handlers(app)
|
||||||
|
|
||||||
# Adiciona o middleware de CORS
|
# ---------------------------------------------------------------------------
|
||||||
|
# MIDDLEWARE DE LOG — DEVE VIR *ANTES* DO CORS, MAS NÃO INTERCEPTAR OPTIONS
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
@app.middleware("http")
|
||||||
|
async def log_tempo_requisicao(request: Request, call_next):
|
||||||
|
# Ignora requisições OPTIONS (preflight)
|
||||||
|
if request.method == "OPTIONS":
|
||||||
|
return Response(status_code=200)
|
||||||
|
|
||||||
|
# Ação responsável por registrar o log de requisição
|
||||||
|
log = Log()
|
||||||
|
config = Config.get('app.json')
|
||||||
|
|
||||||
|
# Obtém os dados da requisição
|
||||||
|
log_data = {
|
||||||
|
"method": request.method,
|
||||||
|
"url": str(request.url),
|
||||||
|
"headers": dict(request.headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
# Gera o nome do arquivo de log
|
||||||
|
file = Path(config.log.request.path) / config.log.request.name
|
||||||
|
|
||||||
|
# Registra as requisições
|
||||||
|
log.register(log_data, file)
|
||||||
|
|
||||||
|
# Passa adiante para o próximo middleware
|
||||||
|
response = await call_next(request)
|
||||||
|
return response
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# CORS — DEVE SER ADICIONADO *DEPOIS* DOS MIDDLEWARES CUSTOMIZADOS
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
allow_origins=[
|
allow_origins=[
|
||||||
"http://localhost:3000", # ambiente local
|
"http://localhost:3000", # ambiente local
|
||||||
"https://monitoring.oriustecnologia.com", # domínio de produção
|
"https://monitoring.oriustecnologia.com", # domínio de produção
|
||||||
"https://painel.oriustecnologia.com", # se o painel consome essa API
|
"https://painel.oriustecnologia.com", # se o painel consome essa API
|
||||||
],
|
],
|
||||||
|
|
@ -44,44 +75,34 @@ app.add_middleware(
|
||||||
allow_headers=["*"],
|
allow_headers=["*"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# HANDLER OPCIONAL PARA GARANTIR QUE PRE-FLIGHT SEMPRE RESPONDA
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
@app.options("/{rest_of_path:path}")
|
||||||
|
async def preflight_handler(rest_of_path: str):
|
||||||
|
"""
|
||||||
|
Handler global para requisições OPTIONS (preflight CORS).
|
||||||
|
Garante que o navegador receba status 200 mesmo que a rota não exista.
|
||||||
|
"""
|
||||||
|
return Response(status_code=200)
|
||||||
|
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
|
# EVENTOS DE STARTUP
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
@app.on_event("startup")
|
@app.on_event("startup")
|
||||||
async def on_startup():
|
async def on_startup():
|
||||||
|
|
||||||
# Realiza as verificações do servidor
|
# Realiza as verificações do servidor
|
||||||
startupCheckService = StartupCheckService()
|
startupCheckService = StartupCheckService()
|
||||||
|
|
||||||
# Exibe o amarzenamento do servidor
|
|
||||||
print(startupCheckService.execute())
|
print(startupCheckService.execute())
|
||||||
|
|
||||||
@app.middleware("http")
|
# ---------------------------------------------------------------------------
|
||||||
async def log_tempo_requisicao(request: Request, call_next):
|
# ROTAS PRINCIPAIS DA API
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
# Ação responsavel por registrar o log de requisição
|
|
||||||
log = Log()
|
|
||||||
config = Config.get('app.json')
|
|
||||||
|
|
||||||
# Obtem os dados da requisição
|
|
||||||
log_data = {
|
|
||||||
"method": request.method,
|
|
||||||
"url": str(request.url),
|
|
||||||
"headers": dict(request.headers)
|
|
||||||
}
|
|
||||||
|
|
||||||
# Gera o nome do arquivo
|
|
||||||
file = Path(config.log.request.path) / config.log.request.name
|
|
||||||
|
|
||||||
# Registra as requisições
|
|
||||||
log.register(log_data, file)
|
|
||||||
|
|
||||||
# Passa adiante
|
|
||||||
response = await call_next(request)
|
|
||||||
|
|
||||||
return response
|
|
||||||
|
|
||||||
# Inclui as rotas da versão 1 da API com prefixo definido em settings (ex: /api/v1)
|
|
||||||
app.include_router(api_router, prefix=config.url)
|
app.include_router(api_router, prefix=config.url)
|
||||||
|
|
||||||
# Executa o servidor com Uvicorn se este arquivo for executado diretamente
|
# ---------------------------------------------------------------------------
|
||||||
|
# EXECUÇÃO LOCAL DIRETA
|
||||||
|
# ---------------------------------------------------------------------------
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
import uvicorn
|
import uvicorn
|
||||||
uvicorn.run(
|
uvicorn.run(
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue