lavkach3

Форк
0
56 строк · 2.0 Кб
1
from typing import Optional, Tuple
2
from uuid import uuid4
3

4
import jwt
5
from starlette.authentication import AuthenticationBackend
6
from starlette.middleware.authentication import (
7
    AuthenticationMiddleware as BaseAuthenticationMiddleware,
8
)
9
from starlette.requests import HTTPConnection
10

11
from core.db_config import config
12
from core.service_config import config as app_config
13
from ..schemas import CurrentUser
14

15

16
class AuthBackend(AuthenticationBackend):
17
    async def authenticate(self, conn: HTTPConnection) -> Tuple[bool, Optional[CurrentUser]]:
18
        current_user = CurrentUser()
19
        authorization: str = conn.headers.get("Authorization") or conn.cookies.get('token')
20
        if not authorization:
21
            return False, current_user
22
        if app_config.INTERCO_TOKEN in authorization:
23
            current_user = CurrentUser(user_id=uuid4(), is_admin=True)
24
            return True, current_user
25
        try:
26
            payload = jwt.decode(
27
                authorization,
28
                config.JWT_SECRET_KEY,
29
                algorithms=[config.JWT_ALGORITHM],
30
            )
31
            current_user = CurrentUser(**payload)
32
        except jwt.exceptions.PyJWTError:
33
            return False, current_user
34
        return True, current_user
35
class AuthBffBackend(AuthenticationBackend):
36
    async def authenticate(self, conn: HTTPConnection) -> Tuple[bool, Optional[CurrentUser]]:
37
        current_user = CurrentUser()
38
        authorization: str = conn.headers.get("Authorization") or conn.cookies.get('token')
39
        if not authorization:
40
            return False, current_user
41
        if not authorization:
42
            return False, current_user
43
        try:
44
            payload = jwt.decode(
45
                authorization,
46
                config.JWT_SECRET_KEY,
47
                algorithms=[config.JWT_ALGORITHM],
48
            )
49
            current_user = CurrentUser(**payload)
50
        except jwt.exceptions.PyJWTError:
51
            return False, current_user
52
        return True, current_user
53

54

55
class AuthenticationMiddleware(BaseAuthenticationMiddleware):
56
    pass
57

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.