generateur_v3/backend/api/database/auth/crud.py

87 lines
2.1 KiB
Python

import uuid
from services.password import get_password_hash
from database.auth.models import User, UserEdit
from sqlmodel import Session, select
from jose import jwt, exceptions
from config import SECRET_KEY, ALGORITHM
def create_user_db(username:str , password: str, db: Session):
user = User(username=username, hashed_password=password, clientId=uuid.uuid4())
db.add(user)
db.commit()
db.refresh(user)
return user
def get_user_from_username_db(username, db: Session):
user = db.exec(select(User).where(User.username == username)).first()
return user
def get_user_from_clientId_db(clientId: str , db: Session):
user = db.exec(select(User).where(User.clientId == clientId)).first()
return user
def get_user_from_token(token: str, db: Session):
try:
decoded = jwt.decode(token=token, key=SECRET_KEY,
algorithms=[ALGORITHM])
except exceptions.ExpiredSignatureError:
return False
clientId = decoded.get('sub')
return get_user_from_clientId_db(clientId=clientId, db=db)
def update_user_db(clientId: str, user: UserEdit, db: Session):
db_user = get_user_from_clientId_db(clientId, db)
if not db_user:
return None
user_data = user.dict(exclude_unset=True)
for key, value in user_data.items():
setattr(db_user, key, value)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
def update_password_db(id: int, password: str, db: Session):
user = db.get(User, id)
if not user:
return None
user.hashed_password = get_password_hash(password)
db.add(user)
db.commit()
db.refresh(user)
return user
def delete_user_db(id: int, db: Session):
user = db.get(User, id)
if not user:
return False
db.delete(user)
db.commit()
return True
def check_unique_username(username: str, db: Session):
user = db.exec(select(User).where(User.username == username)).first()
if not user:
return username
return None
def change_user_uuid(id: int, db: Session):
user = db.get(User, id)
if not user:
return None
user.clientId = uuid.uuid4()
db.add(user)
db.commit()
db.refresh(user)
return user.clientId