mirror of
https://github.com/a-mayb3/Kanban_clone_backend.git
synced 2026-03-21 18:15:37 +01:00
refactored reused code blocks to use helper function in routers.auth
This commit is contained in:
parent
057797c07d
commit
e953e09fee
3 changed files with 14 additions and 122 deletions
|
|
@ -16,7 +16,9 @@ SECRET_KEY = os.getenv("SECRET_KEY", "your-secret-key-change-this-in-production"
|
|||
ALGORITHM = "HS256"
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES = 1440 # 24 hours
|
||||
|
||||
def create_access_token(data: dict, expires_delta: timedelta | None = None):
|
||||
def create_access_token(data: dict, expires_delta: timedelta | None = None):
|
||||
"""Create a JWT token"""
|
||||
|
||||
to_encode = data.copy()
|
||||
if expires_delta:
|
||||
expire = datetime.now(timezone.utc) + expires_delta
|
||||
|
|
@ -27,7 +29,7 @@ def create_access_token(data: dict, expires_delta: timedelta | None = None):
|
|||
encoded_jwt = jwt.encode(to_encode, SECRET_KEY, algorithm=ALGORITHM)
|
||||
return encoded_jwt
|
||||
|
||||
def check_for_valid_token(request: Request, db: db_dependency) -> models.User :
|
||||
def get_user_from_jwt(request: Request, db: db_dependency) -> models.User :
|
||||
"""Helper function to check for valid JWT token in cookies"""
|
||||
token = request.cookies.get("access_token")
|
||||
if not token:
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import schemas.projects as projects_schemas
|
|||
import schemas.users as users_schemas
|
||||
|
||||
from models import Project
|
||||
from routers.auth import get_user_from_jwt
|
||||
|
||||
router = APIRouter(prefix="/projects", tags=["projects"])
|
||||
|
||||
|
|
@ -23,29 +24,8 @@ router = APIRouter(prefix="/projects", tags=["projects"])
|
|||
def get_projects(db: db_dependency, request: Request):
|
||||
"""Get a user's projects"""
|
||||
|
||||
## User retrieval from JWT token in cookies
|
||||
get_token = request.cookies.get("access_token")
|
||||
if not get_token:
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
|
||||
try:
|
||||
payload = jwt.decode(get_token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM])
|
||||
user_id: str = str(payload.get("sub"))
|
||||
if user_id is None:
|
||||
request.cookies.clear() ## User in cookies not found, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
except JWTError:
|
||||
request.cookies.clear() ## Probably an invalid token, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Could not validate credentials"
|
||||
)
|
||||
user = get_user_from_jwt(request, db)
|
||||
user_id = getattr(user, "id")
|
||||
|
||||
## fetching projects for the user
|
||||
projects = db.query(Project).join(Project.users).filter(getattr(users_schemas.UserBase, "id") == int(user_id)).all()
|
||||
|
|
@ -56,29 +36,7 @@ def get_projects(db: db_dependency, request: Request):
|
|||
def get_project(project_id: int, request:Request, db: db_dependency):
|
||||
"""Get a project by ID"""
|
||||
|
||||
get_token = request.cookies.get("access_token")
|
||||
if not get_token:
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
|
||||
try:
|
||||
payload = jwt.decode(get_token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM])
|
||||
user_id: str = str(payload.get("sub"))
|
||||
if user_id is None:
|
||||
request.cookies.clear() ## User in cookies not found, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
except JWTError:
|
||||
request.cookies.clear() ## Probably an invalid token, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Could not validate credentials"
|
||||
)
|
||||
user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first()
|
||||
user = get_user_from_jwt(request, db)
|
||||
|
||||
db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first()
|
||||
if db_project is None:
|
||||
|
|
@ -92,30 +50,7 @@ def get_project(project_id: int, request:Request, db: db_dependency):
|
|||
def get_project_users(project_id: int, request:Request, db: db_dependency):
|
||||
"""Get users from a specified project"""
|
||||
|
||||
get_token = request.cookies.get("access_token")
|
||||
if not get_token:
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
|
||||
try:
|
||||
payload = jwt.decode(get_token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM])
|
||||
user_id: str = str(payload.get("sub"))
|
||||
if user_id is None:
|
||||
request.cookies.clear() ## User in cookies not found, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
except JWTError:
|
||||
request.cookies.clear() ## Probably an invalid token, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Could not validate credentials"
|
||||
)
|
||||
user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first()
|
||||
|
||||
user = get_user_from_jwt(request, db)
|
||||
db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first()
|
||||
if db_project is None:
|
||||
raise HTTPException(status_code=404, detail="Project not found")
|
||||
|
|
@ -128,29 +63,7 @@ def get_project_users(project_id: int, request:Request, db: db_dependency):
|
|||
def get_project_tasks(project_id: int, request:Request, db: db_dependency):
|
||||
"""Get tasks from a specified project"""
|
||||
|
||||
get_token = request.cookies.get("access_token")
|
||||
if not get_token:
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
|
||||
try:
|
||||
payload = jwt.decode(get_token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM])
|
||||
user_id: str = str(payload.get("sub"))
|
||||
if user_id is None:
|
||||
request.cookies.clear() ## User in cookies not found, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
except JWTError:
|
||||
request.cookies.clear() ## Probably an invalid token, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Could not validate credentials"
|
||||
)
|
||||
user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first()
|
||||
user = get_user_from_jwt(request, db)
|
||||
|
||||
db_project = db.query(projects_schemas.ProjectBase).filter(getattr(projects_schemas.ProjectBase, "id") == project_id).first()
|
||||
if db_project is None:
|
||||
|
|
@ -164,30 +77,7 @@ def get_project_tasks(project_id: int, request:Request, db: db_dependency):
|
|||
def create_project(project: projects_schemas.ProjectCreate, request:Request, db: db_dependency):
|
||||
"""Create a new project"""
|
||||
|
||||
get_token = request.cookies.get("access_token")
|
||||
if not get_token:
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
|
||||
try:
|
||||
payload = jwt.decode(get_token, auth.SECRET_KEY, algorithms=[auth.ALGORITHM])
|
||||
user_id: str = str(payload.get("sub"))
|
||||
if user_id is None:
|
||||
request.cookies.clear() ## User in cookies not found, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Not logged in"
|
||||
)
|
||||
except JWTError:
|
||||
request.cookies.clear() ## Probably an invalid token, clear cookies
|
||||
raise HTTPException(
|
||||
status_code=401,
|
||||
detail="Could not validate credentials"
|
||||
)
|
||||
user = db.query(users_schemas.UserBase).filter(getattr(users_schemas.UserBase, "id") == user_id).first()
|
||||
|
||||
user = get_user_from_jwt(request, db)
|
||||
db_project = projects_schemas.ProjectCreate(
|
||||
name=project.name,
|
||||
description=project.description,
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import models
|
|||
from routers import auth
|
||||
import schemas.users as users
|
||||
import schemas.projects as projects
|
||||
from routers.auth import check_for_valid_token
|
||||
from routers.auth import get_user_from_jwt
|
||||
|
||||
from pyargon2 import hash
|
||||
|
||||
|
|
@ -20,7 +20,7 @@ router = APIRouter(prefix="/users", tags=["users"])
|
|||
def read_user(user_id: int, db: db_dependency, request:Request):
|
||||
"""Get a user by ID"""
|
||||
|
||||
check_for_valid_token(request, db)
|
||||
get_user_from_jwt(request, db)
|
||||
|
||||
db_user = db.query(models.User).filter(models.User.id == user_id).first()
|
||||
if db_user is None:
|
||||
|
|
@ -31,7 +31,7 @@ def read_user(user_id: int, db: db_dependency, request:Request):
|
|||
def read_projects_from_user(user_id: int, db: db_dependency, request: Request):
|
||||
"""Get projects assigned to a user"""
|
||||
|
||||
check_for_valid_token(request, db)
|
||||
get_user_from_jwt(request, db)
|
||||
|
||||
db_user = db.query(models.User).filter(models.User.id == user_id).first()
|
||||
if db_user is None:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue