fix problems
This commit is contained in:
@@ -1,10 +1,9 @@
|
||||
|
||||
from uuid import UUID
|
||||
|
||||
from sqlalchemy import and_, not_, select
|
||||
from sqlalchemy import and_, not_, select, update
|
||||
from sqlalchemy.orm import sessionmaker
|
||||
|
||||
from src.errors.http_errors.errors import Errors
|
||||
from src.models.database_models.model import RefreshTokens, engine
|
||||
from src.models.pydantic_models.model import RefreshTokensOut
|
||||
|
||||
@@ -12,75 +11,59 @@ from src.models.pydantic_models.model import RefreshTokensOut
|
||||
class JwtCrudActions:
|
||||
def __init__(self) -> None:
|
||||
self.Session=sessionmaker(bind=engine)
|
||||
self.error=Errors()
|
||||
|
||||
def get_token_by_user_id(self, user_id:UUID)->RefreshTokensOut|None:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
query=select(RefreshTokens).where(and_(RefreshTokens.user_id==user_id, not_(RefreshTokens.is_revoked)))
|
||||
response=session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return None
|
||||
return RefreshTokensOut.model_validate(response)
|
||||
with self.Session() as session, session.begin():
|
||||
query=select(RefreshTokens).where(and_(RefreshTokens.user_id==user_id, not_(RefreshTokens.is_revoked)))
|
||||
response=session.scalars(query).first()
|
||||
if response is None:
|
||||
return None
|
||||
return RefreshTokensOut.model_validate(response)
|
||||
|
||||
def get_token_by_id(self, id:UUID)->RefreshTokensOut|None:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.id==id)
|
||||
response=session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return None
|
||||
return RefreshTokensOut.model_validate(response)
|
||||
def get_token_by_id(self, token_id:UUID)->RefreshTokensOut|None:
|
||||
with self.Session() as session, session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.id==token_id)
|
||||
response=session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return None
|
||||
return RefreshTokensOut.model_validate(response)
|
||||
|
||||
def create_token(self, data:dict)->None:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
new_token=RefreshTokens(**data)
|
||||
session.add(new_token)
|
||||
with self.Session() as session, session.begin():
|
||||
new_token=RefreshTokens(**data)
|
||||
session.add(new_token)
|
||||
|
||||
|
||||
def update_token(self, old_jti:UUID, new_jti:UUID)->bool:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.id==old_jti)
|
||||
response = session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return False
|
||||
else:
|
||||
response.is_revoked=True
|
||||
response.replaced_by=new_jti
|
||||
return True
|
||||
|
||||
def create_and_update_token(self,data:dict, old_jti:UUID, new_jti:UUID)->bool:
|
||||
with self.Session() as session: #noqa:SIM117
|
||||
with session.begin():
|
||||
new_token=RefreshTokens(**data)
|
||||
query=select(RefreshTokens).where(RefreshTokens.id==old_jti)
|
||||
response = session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return False
|
||||
else:
|
||||
session.add(new_token)
|
||||
response.is_revoked=True
|
||||
response.replaced_by=new_jti
|
||||
return True
|
||||
def create_and_update_token(self, data: dict, old_jti: UUID, new_jti: UUID) -> bool:
|
||||
with self.Session() as session, session.begin():
|
||||
new_token = RefreshTokens(**data)
|
||||
|
||||
query = (
|
||||
update(RefreshTokens)
|
||||
.where(RefreshTokens.id == old_jti, RefreshTokens.is_revoked.is_(False))
|
||||
.values(is_revoked=True, replaced_by=new_jti)
|
||||
.returning(RefreshTokens.id)
|
||||
)
|
||||
updated_id = session.execute(query).scalar_one_or_none()
|
||||
|
||||
if updated_id is None:
|
||||
return False
|
||||
|
||||
session.add(new_token)
|
||||
return True
|
||||
|
||||
|
||||
def revoke_all(self, user_id:UUID)->bool:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.user_id==user_id)
|
||||
response=session.scalars(query).all()
|
||||
for record in response:
|
||||
record.is_revoked=True
|
||||
return True
|
||||
|
||||
def logout(self,id:UUID)->bool:
|
||||
with self.Session() as session: # noqa: SIM117
|
||||
with session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.id == id)
|
||||
response=session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return False
|
||||
else:
|
||||
response.is_revoked=True
|
||||
return True
|
||||
with self.Session() as session, session.begin():
|
||||
session.execute(update(RefreshTokens).where(RefreshTokens.user_id==user_id).values(is_revoked=True)) #bulk update
|
||||
return True
|
||||
|
||||
def logout(self,token_id:UUID)->bool:
|
||||
with self.Session() as session, session.begin():
|
||||
query=select(RefreshTokens).where(RefreshTokens.id == token_id)
|
||||
response=session.scalars(query).one_or_none()
|
||||
if response is None:
|
||||
return False
|
||||
else:
|
||||
response.is_revoked=True
|
||||
return True
|
||||
Reference in New Issue
Block a user