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))
                                })
Beispiel #2
0
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"})
Beispiel #4
0
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