innopolis-fwd-project-backend

Форк
0
66 строк · 2.0 Кб
1
from datetime import timedelta, datetime
2
from typing import Union
3

4
from fastapi import HTTPException
5
from jose import jwt, JWTError
6
from passlib.context import CryptContext
7
from sqlalchemy.orm import Session
8
from starlette import status
9

10
from . import crud, schemas
11

12
SECRET_KEY = "09d25e094faa6ca2556c818166b7a9563b93f7099f6f0f4caa6cf63b88e8d3e7"
13
ALGORITHM = "HS256"
14
ACCESS_TOKEN_EXPIRE_MINUTES = 60 * 24 * 7
15

16
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
17

18

19
def verify_password(plain_password, hashed_password):
20
    return pwd_context.verify(plain_password, hashed_password)
21

22

23
def get_password_hash(password):
24
    return pwd_context.hash(password)
25

26

27
def authenticate_user(db: Session, email: str, password: str):
28
    user = crud.get_admin_by_email(db, email)
29
    if not user:
30
        return False
31
    if not verify_password(password, user.hashed_password):
32
        return False
33
    return user
34

35

36
def create_access_token(data: dict, expires_delta: Union[timedelta, None] = None):
37
    to_encode = data.copy()
38
    if expires_delta:
39
        expire = datetime.utcnow() + expires_delta
40
    else:
41
        expire = datetime.utcnow() + timedelta(days=7)
42
    to_encode.update({"exp": expire})
43
    encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
44
    return encoded_jwt
45

46

47
async def get_current_user(db: Session, token: str):
48
    credentials_exception = HTTPException(
49
        status_code=status.HTTP_401_UNAUTHORIZED,
50
        detail="Could not validate credentials",
51
        headers={"WWW-Authenticate": "Bearer"},
52
    )
53
    try:
54
        payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
55
        # if payload.get("exp") < datetime.utcnow():
56
        #     raise JWTError
57
        email: str = payload.get("sub")
58
        if email is None:
59
            raise credentials_exception
60
        token_data = schemas.TokenData(email=email)
61
    except JWTError:
62
        raise credentials_exception
63
    user = crud.get_admin_by_email(db, email=token_data.email)
64
    if user is None:
65
        raise credentials_exception
66
    return user
67

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

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

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

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