Skip to content

Instantly share code, notes, and snippets.

@alimuradov
Created February 7, 2022 13:37
Show Gist options
  • Save alimuradov/85aa75fdd5d8765b7cc7977c1bc5f235 to your computer and use it in GitHub Desktop.
Save alimuradov/85aa75fdd5d8765b7cc7977c1bc5f235 to your computer and use it in GitHub Desktop.
from datetime import datetime, timedelta
from typing import Any, Union
from jose import jwt
from passlib.context import CryptContext
from sqlalchemy.orm import Session
from app.core.config import settings
from app.models.user import User as UserModel
from app.database.session import engine
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
session = Session(engine, future=True)
ALGORITHM = "HS256"
def create_access_token(
subject: Union[str, Any], expires_delta: timedelta = None
) -> str:
if expires_delta:
expire = datetime.utcnow() + expires_delta
else:
expire = datetime.utcnow() + timedelta(
minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES
)
to_encode = {"exp": expire, "sub": str(subject)}
encoded_jwt = jwt.encode(to_encode, settings.SECRET_KEY, algorithm=ALGORITHM)
return encoded_jwt
def verify_password(plain_password: str, hashed_password: str) -> bool:
return pwd_context.verify(plain_password, hashed_password)
def get_password_hash(password: str) -> str:
return pwd_context.hash(password)
def authenticate_user(client_id: str, client_secret: str):
user = session.query(UserModel).filter_by(client_id=client_id).first()
if not user:
return False
if not client_secret == user.client_secret:
return False
return user
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment