def login_user( user: schemas.UserLogIn, db: Session = Depends(deps.get_db)) -> JSONResponse: """ Login user and Return Access Token""" db_user = get_active_user(email=user.email, db=db) if db_user is None: return JSONResponse(status_code=400, content={"message": "Invalid Credentials"}) else: is_password_correct = crud_login.check_username_password( email=user.email, password=user.password, db=db) if is_password_correct is False: return JSONResponse(status_code=400, content={"message": "Invalid Credentials"}) else: uid = str(uuid.uuid4().hex) crud_login.login_user(user=user, session_id=uid, db=db) access_token_expires = timedelta( minutes=ProjectSettings.ACCESS_TOKEN_EXPIRE_MINUTES) token = access_token.create_access_token( data={"sub": user.email}, expires_delta=access_token_expires) return JSONResponse(status_code=200, content={ "access_token": token, "token_type": "Bearer", "session_id": uid, "user": jsonable_encoder( get_user(email=user.email, db=db)) })
def authenticate_user(form_data: OAuth2PasswordRequestForm = Depends(), db: Session = Depends(deps.get_db)) -> JSONResponse: """ Return Access Token""" db_user = get_active_user(email=form_data.username, db=db) if db_user is None: return JSONResponse(status_code=400, content={"message": "Invalid Credentials"}) else: is_password_correct = crud_login.check_username_password( email=form_data.username, password=form_data.password, db=db) if is_password_correct is False: return JSONResponse(status_code=400, content={"message": "Invalid Credentials"}) else: access_token_expires = timedelta( minutes=ProjectSettings.ACCESS_TOKEN_EXPIRE_MINUTES) token = access_token.create_access_token( data={ "sub": form_data.username, "perm": db_user.is_admin }, expires_delta=access_token_expires) return JSONResponse(status_code=200, content={"access_token": token, "token_type": "Bearer"})
def recover_password(user: schemas.UserBase) -> JSONResponse: """ Password Recovery """ db_user = get_active_user(email=user.email) if db_user is None: return JSONResponse(status_code=404, content={ "message": "The user with this email " "does not exist in the system."}) password_reset_token = access_token.generate_password_reset_token( email=user.email) send_reset_password_email(emails=[user.email], password_reset_token=password_reset_token) return JSONResponse(status_code=200, content={"message": "success"})
def get_current_user(token: str = Depends(oauth2_scheme), db: Session = Depends(get_db)) -> UserVerify: """ Verify User Authentication""" credentials_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="Could not validate credentials", headers={"WWW-Authenticate": "Bearer"}, ) expire_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="access expired", headers={"WWW-Authenticate": "Bearer"}, ) require_exception = HTTPException( status_code=status.HTTP_401_UNAUTHORIZED, detail="access denied", headers={"WWW-Authenticate": "Bearer"}, ) if token: try: print(token) payload = access_token.decode_access_token(token=token) token_validity = payload.get("exp") if get_int_from_datetime(datetime.utcnow()) >= token_validity: raise expire_exception email: str = payload.get("sub") if email is None: raise credentials_exception token_data = TokenData(email=email) except exceptions.JWTException as e: fastapi_logger.exception("get_current_user") raise credentials_exception user = get_active_user(email=token_data.email, db=db) if user is None: raise credentials_exception return user else: raise require_exception