From 1d25b0edc352733e691adc55c08c6cad44c0d8b4 Mon Sep 17 00:00:00 2001 From: "MH.Dmitrii" Date: Fri, 24 Jul 2026 17:13:37 +0300 Subject: [PATCH] refactoring some code by removing unnecessary checks and moving tests block to root / --- main.py | 13 ++++++++++++ pytest.ini | 0 src/service/auth/auth.py | 34 ++++++++++++++++++++------------ src/service/auth/jwt.py | 3 +-- {src/tests => tests}/__init__.py | 0 tests/conftest.py | 0 tests/e2e/conftest.py | 0 tests/integrated/conftest.py | 0 tests/unit/conftest.py | 0 9 files changed, 35 insertions(+), 15 deletions(-) create mode 100644 pytest.ini rename {src/tests => tests}/__init__.py (100%) create mode 100644 tests/conftest.py create mode 100644 tests/e2e/conftest.py create mode 100644 tests/integrated/conftest.py create mode 100644 tests/unit/conftest.py diff --git a/main.py b/main.py index dd3c6df..1f1e7b5 100644 --- a/main.py +++ b/main.py @@ -1,5 +1,6 @@ from fastapi import FastAPI from src.web.protected_routes.routes import router as protected_router +from pathlib import Path import uvicorn app=FastAPI(root_path="/") @@ -9,7 +10,19 @@ app.include_router(router=protected_router) def root()->dict: return {"root":"hello, this is root"} + +def create_dirs(): + + dirs_to_create=("./DB", + "./upload", + "./upload_bad", + "./upload_finished") + + for x in dirs_to_create: + Path(x).mkdir(parents=True, exist_ok=True) + def main(): + create_dirs() uvicorn.run("main:app", reload=True) if __name__=="__main__": diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 0000000..e69de29 diff --git a/src/service/auth/auth.py b/src/service/auth/auth.py index 41c16ad..8cd34b7 100644 --- a/src/service/auth/auth.py +++ b/src/service/auth/auth.py @@ -22,6 +22,7 @@ class CurrentUser: def _check(self, form_data_email:str, form_data_password:str,): '''check user by email''' user=self.crud_db_actions.get_user_by_email(form_data_email) + if user is None: raise self.error.credentials_error(detail="Wrong credentials") @@ -36,20 +37,21 @@ class CurrentUser: def get_current_user(self, token:str)->UserOut: payload=self.jwt_service.jwt_decode(token) + sub=payload.get("sub") - if (sub:=payload.get("sub")) is None: - raise self.error.credentials_error(detail="Jwt token is incorrect") - try: sub=UUID(sub) - except (ValueError, TypeError): - raise self.error.credentials_error(detail="Jwt token is incorrect") + except (ValueError, TypeError) as e: + raise self.error.credentials_error(detail="Jwt token is incorrect") from e user=self.crud_db_actions.get_user_by_id(sub) if user is None: raise self.error.not_found_error(detail="User with this email address not found") + if user.status is False: + raise self.error.credentials_error(detail="This user is deactivated") + return UserOut.model_validate(user) @@ -61,12 +63,13 @@ class CurrentUser: def create_refresh_token(self,user_id:UUID, request:Request)->str: + token, jti=self.jwt_service.create_refresh_token({"sub":str(user_id)}) try: jti=UUID(jti) - except (ValueError, TypeError): - raise self.error.credentials_error(detail="Jwt token is incorrect") + except (ValueError, TypeError) as e: + raise self.error.credentials_error(detail="Jwt token is incorrect") from e '''create new refresh token if all the checks are successful''' token_record=RefreshTokensCreate( @@ -83,16 +86,19 @@ class CurrentUser: def refresh_token(self, refresh_token:str, request:Request)->tuple[str, str]: + '''decode old refresh token''' old_refresh_token=self.jwt_service.jwt_decode(refresh_token) - if (sub:=old_refresh_token.get("sub")) is None or (old_jti:=old_refresh_token.get("jti")) is None: + sub=old_refresh_token.get("sub") + + if (old_jti:=old_refresh_token.get("jti")) is None: raise self.error.credentials_error(detail="Jwt token is incorrect") try: old_jti=UUID(old_jti) sub=UUID(sub) - except (ValueError, TypeError): - raise self.error.credentials_error(detail="Jwt token is incorrect") + except (ValueError, TypeError) as e: + raise self.error.credentials_error(detail="Jwt token is incorrect") from e '''old refresh token check''' @@ -122,6 +128,7 @@ class CurrentUser: '''create new refresh token if all the checks are successful''' new_refresh_token, new_jti=self.jwt_service.create_refresh_token({"sub":str(sub)}) new_access_token=self.create_access_token(user_id=sub) + try: new_jti=UUID(new_jti) except (ValueError, TypeError): @@ -152,11 +159,12 @@ class CurrentUser: payload=self.jwt_service.jwt_decode(refresh_token) if (jti:=payload.get("jti")) is None: - raise self.error.credentials_error(detail="Invalid Refresh Token") + raise self.error.credentials_error(detail="Jwt token is incorrect") + try: jti=UUID(jti) - except (ValueError, TypeError): - raise self.error.credentials_error(detail="Jwt token is incorrect") + except (ValueError, TypeError) as e: + raise self.error.credentials_error(detail="Jwt token is incorrect") from e current_token = self.jwt_db_actions.get_token_by_id(jti) if current_token is None: diff --git a/src/service/auth/jwt.py b/src/service/auth/jwt.py index 115c3ea..c748424 100644 --- a/src/service/auth/jwt.py +++ b/src/service/auth/jwt.py @@ -34,7 +34,6 @@ class Jwt: user_info=data.copy() user_info.update({"exp": datetime.now(timezone.utc)+timedelta(minutes=env_settings.ACCESS_TOKEN_EXPIRE_MINUTES), "token_type":"access"}) - print(f"DEBUG: expires at {datetime.now(timezone.utc)+timedelta(minutes=env_settings.ACCESS_TOKEN_EXPIRE_MINUTES)}, minutes={env_settings.ACCESS_TOKEN_EXPIRE_MINUTES}") return jwt.encode(user_info, env_settings.SECRET_KEY, env_settings.ALGORITHM) @@ -57,7 +56,7 @@ class Jwt: payload=jwt.decode(token, env_settings.SECRET_KEY, algorithms=[env_settings.ALGORITHM]) if (payload.get("sub")) is None: - raise self.error.credentials_error(detail="Sub block is missing") + raise self.error.credentials_error(detail="Jwt token is incorrect") except JWTError as e: raise self.error.credentials_error(detail="JWTerror") from e diff --git a/src/tests/__init__.py b/tests/__init__.py similarity index 100% rename from src/tests/__init__.py rename to tests/__init__.py diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/e2e/conftest.py b/tests/e2e/conftest.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/integrated/conftest.py b/tests/integrated/conftest.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/unit/conftest.py b/tests/unit/conftest.py new file mode 100644 index 0000000..e69de29