1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- 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())
- # body = await get_body(request)
- # body = str(body).replace("\"","\'")
- 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
- # response = await call_next(request)
-
- # print(request.url.path)
- # print(request.headers)
- # return response
- app.include_router(api_router, prefix=settings.API_V1_STR)
|