44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
import time
|
|
|
|
from starlette.requests import Request
|
|
|
|
from core.app import app
|
|
from core.modules import logger
|
|
from core.utils.auth import decode_token
|
|
|
|
|
|
@app.middleware("http")
|
|
async def logger_middleware(request: Request, call_next):
|
|
start_time = time.time()
|
|
app.state.request = request
|
|
response = await call_next(request)
|
|
try:
|
|
user = request.state.user if hasattr(request.state, "user") else None
|
|
token = (
|
|
decode_token(request.headers.get("Authorization"))
|
|
if request.headers.get("Authorization")
|
|
else None
|
|
)
|
|
process_time = time.time() - start_time
|
|
# logger.emit_access(
|
|
# {
|
|
# "ip": request.client.host,
|
|
# "method": request.method,
|
|
# "path": request.url.path,
|
|
# "p_time": float("{0:.3f}".format(process_time)),
|
|
# "status": response.status_code,
|
|
# "uid": token.get("sub") if token else None,
|
|
# "scopes": token.get("scopes") if token else None,
|
|
# "name": user.name if user else None,
|
|
# "level": response.status_code >= 400 and "error" or "info",
|
|
# "user_agent": httpagentparser.simple_detect(
|
|
# request.headers.get("User-Agent")
|
|
# ),
|
|
# "referer": request.headers.get("Referer"),
|
|
# }
|
|
# )
|
|
except Exception as e:
|
|
logger.emit({'error': str(e)}, logger.Types.Error)
|
|
finally:
|
|
return response
|