working auth + users systems
This commit is contained in:
42
backend/tests/helpers/generators.py
Normal file
42
backend/tests/helpers/generators.py
Normal file
@@ -0,0 +1,42 @@
|
||||
from datetime import timedelta
|
||||
import uuid as uuid_pkg
|
||||
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from core.config import settings
|
||||
from modules.auth.models import User
|
||||
from modules.auth.security import authenticate_user, create_access_token, create_refresh_token, hash_password
|
||||
from modules.auth.schemas import UserRole
|
||||
from tests.conftest import fake
|
||||
|
||||
|
||||
def create_user(db: Session, is_admin: bool = False) -> User:
|
||||
unhashed_password = fake.password()
|
||||
_user = User(
|
||||
name=fake.name(),
|
||||
username=fake.user_name(),
|
||||
hashed_password=hash_password(unhashed_password),
|
||||
uuid=uuid_pkg.uuid4(),
|
||||
role=UserRole.ADMIN if is_admin else UserRole.USER,
|
||||
)
|
||||
|
||||
db.add(_user)
|
||||
db.commit()
|
||||
db.refresh(_user)
|
||||
return _user, unhashed_password # return for testing
|
||||
|
||||
def login(db: Session, username: str, password: str) -> str:
|
||||
user = authenticate_user(username, password, db)
|
||||
if not user:
|
||||
raise Exception("Incorrect username or password")
|
||||
|
||||
access_token = create_access_token(data={"sub": user.username}, expires_delta=timedelta(minutes=settings.ACCESS_TOKEN_EXPIRE_MINUTES))
|
||||
refresh_token = create_refresh_token(data={"sub": user.username})
|
||||
|
||||
max_age = settings.REFRESH_TOKEN_EXPIRE_DAYS * 24 * 60 * 60
|
||||
|
||||
return {
|
||||
"access_token": access_token,
|
||||
"refresh_token": refresh_token,
|
||||
"max_age": max_age,
|
||||
}
|
||||
Reference in New Issue
Block a user