예제 #1
0
def get_optional_current_user_from_state(
        session: Session = Depends(get_database_session),
        application: Application = Depends(get_application),
        state: Optional[str] = Query(None),
):
    """
    Get and return user from state query parameter if any
    """
    if not state or state.strip() == "":
        return
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        payload_from_state = serializer.loads(state)
        access_token = payload_from_state["access_token"]
        if not access_token:
            return
        user: User = application.authenticate_token(session, access_token)
        if user.role == UserRole.ADMIN:
            user = session.query(Admin).get(user.id)
        elif user.role == UserRole.TENANT:
            user = session.query(Tenant).get(user.id)
        elif user.role == UserRole.LANDLORD:
            user = session.query(Landlord).get(user.id)
    except ApplicationError:
        raise credentials_exception
    except BadSignature:
        raise credentials_exception
    except KeyError:
        raise credentials_exception
    return user
예제 #2
0
async def get_user_from_websocket(
        token: str,
        application: Application = Depends(get_application),
        session: Session = Depends(get_database_session),
) -> Optional[User]:
    try:
        user = application.authenticate_token(session, token)
        if user.role == UserRole.ADMIN:
            user = session.query(Admin).get(user.id)
        elif user.role == UserRole.TENANT:
            user = session.query(Tenant).get(user.id)
        elif user.role == UserRole.LANDLORD:
            user = session.query(Landlord).get(user.id)
    except Exception:
        return
    return user
예제 #3
0
async def get_current_user(
        token: bytes = Depends(oauth2_scheme),
        session: Session = Depends(get_database_session),
        application: Application = Depends(get_application),
) -> User:
    # todo? change to application method instead of service method?
    credentials_exception = HTTPException(
        status_code=status.HTTP_401_UNAUTHORIZED,
        detail="Could not validate credentials",
        headers={"WWW-Authenticate": "Bearer"},
    )
    try:
        user: User = application.authenticate_token(session, token)
        if user.role == UserRole.ADMIN:
            user = session.query(Admin).get(user.id)
        elif user.role == UserRole.TENANT:
            user = session.query(Tenant).get(user.id)
        elif user.role == UserRole.LANDLORD:
            user = session.query(Landlord).get(user.id)
    except ApplicationError:
        raise credentials_exception
    return user