This commit is contained in:
unknown 2025-10-22 23:47:56 +03:00
parent 910c0201b4
commit 43c385386e
2 changed files with 20 additions and 4 deletions

View File

@ -1,5 +1,5 @@
import httpx import httpx
from fastapi import Depends, Request, HTTPException, status from fastapi import Depends, Request, HTTPException, status, Header
from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials
from typing import List from typing import List
@ -15,14 +15,17 @@ auth_scheme = HTTPBearer()
@dataclass @dataclass
class CurrentUser: class CurrentUser:
token: str token: str
is_bot: str
user_id: str user_id: str
session_id: str session_id: str
permissions: List[str] permissions: List[str]
async def _fetch_current_user( async def _fetch_current_user(
request: Request, request: Request,
credentials: HTTPAuthorizationCredentials, credentials: HTTPAuthorizationCredentials,
require_permissions: bool require_permissions: bool,
is_bot=False
) -> CurrentUser: ) -> CurrentUser:
token = credentials.credentials token = credentials.credentials
ip = request.client.host or "(unknown)" ip = request.client.host or "(unknown)"
@ -36,7 +39,8 @@ async def _fetch_current_user(
"token": token, "token": token,
"ip": ip, "ip": ip,
"user_agent": user_agent, "user_agent": user_agent,
"require_permissions": require_permissions "require_permissions": require_permissions,
"is_bot": is_bot
}, },
) )
except httpx.RequestError as e: except httpx.RequestError as e:
@ -54,6 +58,7 @@ async def _fetch_current_user(
return CurrentUser( return CurrentUser(
token=token, token=token,
is_bot=data["is_bot"],
user_id=data["user_id"], user_id=data["user_id"],
session_id=data["session_id"], session_id=data["session_id"],
permissions=data["permissions"] permissions=data["permissions"]
@ -120,6 +125,7 @@ async def fetch_user_for_sio(
return CurrentUser( return CurrentUser(
token=token, token=token,
is_bot=data["is_bot"],
user_id=data["user_id"], user_id=data["user_id"],
session_id=data["session_id"], session_id=data["session_id"],
permissions=data["permissions"] permissions=data["permissions"]
@ -139,6 +145,16 @@ async def get_current_user_with_permissions(
) -> CurrentUser: ) -> CurrentUser:
return await _fetch_current_user(request, credentials, require_permissions=True) return await _fetch_current_user(request, credentials, require_permissions=True)
async def get_current_user_or_bot(
request: Request,
is_bot: str | None = Header(default=None),
credentials: HTTPAuthorizationCredentials = Depends(auth_scheme)
) -> CurrentUser:
is_bot_flag = str(is_bot).lower() in ("true", "1", "yes") if is_bot else False
return await _fetch_current_user(request, credentials, require_permissions=False, is_bot=is_bot_flag)
def validate_username(value: str, def validate_username(value: str,
field_name: str = "login", field_name: str = "login",
with_httpexception=False, with_httpexception=False,

View File

@ -1,6 +1,6 @@
[project] [project]
name = "common-lib" name = "common-lib"
version = "0.0.30" version = "0.0.31"
description = "Библиотека общих компонентов для микросервисов yobble" description = "Библиотека общих компонентов для микросервисов yobble"
authors = [{ name = "cheykrym", email = "you@example.com" }] authors = [{ name = "cheykrym", email = "you@example.com" }]
license = "MIT" license = "MIT"