from sqlalchemy import null from starlette.types import Message from fastapi import FastAPI, Request, Depends from starlette.middleware.cors import CORSMiddleware import base64 import json import dataset from datetime import datetime # from starlette.middleware.authentication import AuthenticationMiddleware from app.crud.crud_user import user from app.api.api_v1.api import api_router from app.core.config import settings from app.api import deps from sqlalchemy.orm import Session app = FastAPI( title=settings.PROJECT_NAME, openapi_url=f"{settings.API_V1_STR}/openapi.json") # Set all CORS enabled origins # allow_origins=[str(origin) for origin in settings.BACKEND_CORS_ORIGINS], if settings.BACKEND_CORS_ORIGINS: app.add_middleware( CORSMiddleware, # AuthenticationMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # async def set_body(request: Request, body: bytes): # async def receive() -> Message: # return {"type": "http.request", "body": body} # request._receive = receive # async def get_body(request: Request) -> bytes: # body = await request.body() # await set_body(request, body) # return body # @app.middleware("http") # async def app_entry(request: Request, call_next, # ): # db = dataset.connect( # 'mysql://choozmo:pAssw0rd@db.ptt.cx:3306/arkcard?charset=utf8mb4' # ) # await set_body(request, await request.body()) # headers = str(request.headers).replace("\"","\'") # try: # userid = int(json.loads(base64.b64decode(request.headers['authorization'][7:].split('.')[1]).decode('utf-8'))['sub']) # except: # if( "/api/v1/line/collection/" or "/api/v1/line/receive/" or "/api/v1/line/shop/" in request.url.path): # lineid = request.url.path.split("/")[-1] # sql = 'SELECT id, userid FROM users where userid =\'' + lineid + '\'' # try: # userid = int(db.query(sql).next()['id']) # except: # userid = -1 # db.query('Insert into log (create_time, url_path, headers, userid) VALUE (\'' + str(datetime.now()) + '\' ,\'' + request.url.path + '\' , \"' + headers + '\" , '+ str(userid) + ')') # response = await call_next(request) # return response app.include_router(api_router, prefix=settings.API_V1_STR)