Initial commit

This commit is contained in:
shahzeydyfah
2024-02-15 00:17:51 +03:30
commit 4b0396466d
111 changed files with 6296 additions and 0 deletions
+3
View File
@@ -0,0 +1,3 @@
from .auth import *
from .logger_middleware import *
from .prod_middleware import *
+17
View File
@@ -0,0 +1,17 @@
from fastapi import Depends
from starlette.authentication import AuthenticationBackend, AuthCredentials
from starlette.middleware.authentication import AuthenticationMiddleware
from core.utils.auth import get_current_user
class OAuth2Backend(AuthenticationBackend):
async def authenticate(self, request, user=Depends(get_current_user)):
return AuthCredentials(["authenticated"]), user
def setup_auth_middleware(app):
app.add_middleware(
AuthenticationMiddleware,
backend=OAuth2Backend(),
)
+43
View File
@@ -0,0 +1,43 @@
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
+20
View File
@@ -0,0 +1,20 @@
from fastapi.requests import Request
from config import conf
from core.app import app
@app.middleware("http")
async def prod_middleware(request: Request, call_next):
if (
request.url.hostname == "scm.haco.dc"
or request.url.hostname == "scm.hacoupian.net"
or request.url.hostname == "rc.hacoupian.net"
):
conf.server.is_prod = True
else:
conf.server.is_prod = False
response = await call_next(request)
response.headers["is-host"] = request.url.hostname
response.headers["is-prod"] = str(conf.server.is_prod)
return response