ashwinR's picture
Upload 245 files
b7a7f32
from typing import Generator
from typing import Optional
from fastapi import Cookie
from fastapi import Depends, HTTPException, status
from sqlalchemy.orm import Session
import cruds
import models
from core import settings
from core.db import SessionLocal
from core.db import redis_session_client
def get_db() -> Generator:
try:
db = SessionLocal()
yield db
finally:
db.close()
async def get_current_user(
db: Session = Depends(get_db),
session: str = Cookie(None),
) -> models.User:
if not session:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, detail="Error ID: 137"
) # Invalid Session Token!
user_id = await redis_session_client.client.get(session, encoding="utf-8")
if not user_id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, detail="Error ID: 138"
) # Invalid Session Token!
user = cruds.crud_user.get(db, id=user_id)
if not user:
raise HTTPException(status_code=404, detail="Error ID: 139") # User not found
return user
def get_current_active_user(
current_user: models.User = Depends(get_current_user),
) -> models.User:
if not cruds.crud_user.is_active(current_user):
raise HTTPException(status_code=400, detail="Error ID: 140") # Inactive user
return current_user
def get_current_active_ws_users(
current_user: models.User = Depends(get_current_user),
) -> models.User:
if not cruds.crud_user.is_active(current_user):
raise HTTPException(status_code=400, detail="Error ID: 140") # Inactive user
return current_user
async def auth_token(token: Optional[str] = None):
if token:
return {"token": token}
else:
return None
async def get_current_active_ws_user(
db: Session = Depends(get_db),
params: dict = Depends(auth_token),
session: str = Cookie(None),
) -> models.User:
if not (session or params):
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, detail="Error ID: 137"
) # Invalid Session Token!
if session:
session_token = session
else:
session_token = params.get("token")
user_id = await redis_session_client.client.get(session_token, encoding="utf-8")
if not user_id:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN, detail="Error ID: 138"
) # Invalid Session Token!
user = cruds.crud_user.get(db, id=user_id)
if not user:
raise HTTPException(status_code=404, detail="Error ID: 139") # User not found
return user
def get_current_active_teacher(
current_user: models.User = Depends(get_current_active_user),
) -> models.User:
if current_user.user_type == settings.UserType.TEACHER.value:
return current_user
else:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
def get_current_active_teacher_or_above(
current_user: models.User = Depends(get_current_active_user),
) -> models.User:
if current_user.user_type <= settings.UserType.TEACHER.value:
return current_user
else:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED)
def get_current_active_superuser(
current_user: models.User = Depends(get_current_active_user),
) -> models.User:
if not cruds.crud_user.is_superuser(current_user):
raise HTTPException(
status_code=400, detail="Error ID: 141"
) # The user doesn't have enough privileges
return current_user
def get_current_admin_or_above(
current_user: models.User = Depends(get_current_active_user),
) -> models.User:
if not current_user.user_type <= settings.UserType.ADMIN.value:
raise HTTPException(
status_code=400, detail="Error ID: 142"
) # The user doesn't have enough privileges
return current_user