From 43c385386e04491b7006003355c280114813012c Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 22 Oct 2025 23:47:56 +0300 Subject: [PATCH] add bots --- common_lib/utils/auth.py | 22 +++++++++++++++++++--- pyproject.toml | 2 +- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/common_lib/utils/auth.py b/common_lib/utils/auth.py index af39845..593879b 100644 --- a/common_lib/utils/auth.py +++ b/common_lib/utils/auth.py @@ -1,5 +1,5 @@ import httpx -from fastapi import Depends, Request, HTTPException, status +from fastapi import Depends, Request, HTTPException, status, Header from fastapi.security import HTTPBearer, HTTPAuthorizationCredentials from typing import List @@ -15,14 +15,17 @@ auth_scheme = HTTPBearer() @dataclass class CurrentUser: token: str + is_bot: str user_id: str session_id: str permissions: List[str] + async def _fetch_current_user( request: Request, credentials: HTTPAuthorizationCredentials, - require_permissions: bool + require_permissions: bool, + is_bot=False ) -> CurrentUser: token = credentials.credentials ip = request.client.host or "(unknown)" @@ -36,7 +39,8 @@ async def _fetch_current_user( "token": token, "ip": ip, "user_agent": user_agent, - "require_permissions": require_permissions + "require_permissions": require_permissions, + "is_bot": is_bot }, ) except httpx.RequestError as e: @@ -54,6 +58,7 @@ async def _fetch_current_user( return CurrentUser( token=token, + is_bot=data["is_bot"], user_id=data["user_id"], session_id=data["session_id"], permissions=data["permissions"] @@ -120,6 +125,7 @@ async def fetch_user_for_sio( return CurrentUser( token=token, + is_bot=data["is_bot"], user_id=data["user_id"], session_id=data["session_id"], permissions=data["permissions"] @@ -139,6 +145,16 @@ async def get_current_user_with_permissions( ) -> CurrentUser: 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, field_name: str = "login", with_httpexception=False, diff --git a/pyproject.toml b/pyproject.toml index 70829eb..a1ea0d3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "common-lib" -version = "0.0.30" +version = "0.0.31" description = "Библиотека общих компонентов для микросервисов yobble" authors = [{ name = "cheykrym", email = "you@example.com" }] license = "MIT"