예제 #1
0
파일: login.py 프로젝트: Rev-AMP/backend
def recover_password(email: str, db: Session = Depends(deps.get_db)) -> Any:
    """
    Password Recovery
    """
    if user := crud.user.get_by_email(db, email=email):
        password_reset_token = generate_password_reset_token(email=email)
        send_reset_password_email(email_to=user.email,
                                  email=email,
                                  token=password_reset_token)
        return {"msg": "Password recovery email sent"}
예제 #2
0
def recover_password(email: str = Body(...),
                     identify_code: str = Body(...),
                     answer: str = Body(...),
                     db: Session = Depends(deps.get_db)) -> Any:
    """
    Password Recovery
    """
    # 验证码阶段
    if red.exists(identify_code):
        true = red.get(identify_code).decode('ascii')
        if true != answer:
            raise HTTPException(status_code=400, detail="验证码错误")
    else:
        raise HTTPException(status_code=400, detail="验证码不存在")

    # 验证用户是否存在
    user = crud.user.get_by_email(db, email=email)
    if not user:
        raise HTTPException(
            status_code=404,
            detail="The user with this username does not exist in the system.",
        )

    # 用户存在,验证短信验证码
    password_reset_token = generate_password_reset_token(email=email)
    message_code = generate_verification_code()
    codes = {message_code: password_reset_token}

    if not red.exists(email):
        try:
            red.setex(email, settings.EMAIL_RESET_TOKEN_EXPIRE_SECONDS,
                      json.dumps(codes))
            try:
                # 暂未开启API接口
                if settings.USERS_OPEN_RESET_PASSWORD:
                    send_result = send_message(message_code, email)
                    print(send_result)
                print(message_code)
                print(email)
            except Exception as e:
                print(e)
        except Exception as e:
            print(e)
    else:
        raise HTTPException(
            status_code=404,
            detail="请等60秒",
        )
    # 放弃发邮件,选择短信
    # send_reset_password_email(
    #     email_to=user.email, email=email, token=password_reset_token
    # )

    return {"msg": "Password recovery email sent"}
예제 #3
0
def route_recover_password(name):
    bucket = get_default_bucket()
    user = get_user(bucket, name)

    if not user:
        return abort(
            404, f"The user with this username does not exist in the system.")
    password_reset_token = generate_password_reset_token(name)
    send_reset_password_email(email_to=user.email,
                              username=name,
                              token=password_reset_token)
    return {"msg": "Password recovery email sent"}
예제 #4
0
def recover_password(email: str, db: Session = Depends(deps.get_db)) -> Any:
    """
    Password Recovery
    """
    user = crud.user.get_by_email(db, email=email)

    if not user:
        raise HTTPException(
            status_code=404,
            detail="The user with this username does not exist in the system.",
        )
    password_reset_token = generate_password_reset_token(email=email)
    return {"msg": "Password recovery email sent"}
def test_reset_password(client: TestClient, db: Session,
                        normal_user: models.User):
    token = utils.generate_password_reset_token(normal_user.email)
    new_password = random_lower_string()
    reset_password_data = {"token": token, "new_password": new_password}
    response = client.post(f"{settings.API_V1_STR}/reset-password",
                           json=reset_password_data)
    response.raise_for_status()
    db.refresh(normal_user)
    user = crud.user.authenticate(db,
                                  username=normal_user.username,
                                  password=new_password)
    assert user
예제 #6
0
def recover_password(email: str) -> Any:
    """
    Password Recovery
    """
    user = crud.user.get_by_email(email=email)

    if not user:
        raise HTTPException(
            status_code=404,
            detail="The user with this username does not exist in the system.",
        )
    password_reset_token = generate_password_reset_token(email=email)
    send_reset_password_email(
        email_to=user.email, email=email, token=password_reset_token
    )
    return {"msg": "Password recovery email sent"}
예제 #7
0
def recover_password(email: str, db: Session = Depends(get_db)):
    """
    Password Recovery
    """
    user = crud.user.get_by_email(db, email=email)

    if not user:
        raise HTTPException(
            status_code=HTTP_404_NOT_FOUND,
            detail="The user with this username does not exist in the system.",
        )
    password_reset_token = generate_password_reset_token(email=email)
    send_reset_password_email(email_to=user.email,
                              email=email,
                              token=password_reset_token)
    return {"msg": "Password recovery email sent"}
예제 #8
0
def recover_password(username: str):
    """
    Password Recovery
    """
    bucket = get_default_bucket()
    user = crud.user.get(bucket, username=username)

    if not user:
        raise HTTPException(
            status_code=404,
            detail="The user with this username does not exist in the system.",
        )
    password_reset_token = generate_password_reset_token(username=username)
    send_reset_password_email(email_to=user.email,
                              username=username,
                              token=password_reset_token)
    return {"msg": "Password recovery email sent"}
예제 #9
0
def recover_password(email: str, db: Session = Depends(deps.get_db)) -> Any:
    """
    Password Recovery
    """
    user = crud.user.get_by_email(db, email=email)

    return_message = {
        "msg": "Password recovery email was sent if account exists."
    }
    if not user:
        return return_message

    password_reset_token = generate_password_reset_token(email=email)
    send_reset_password_email(email_to=user.email,
                              email=email,
                              token=password_reset_token)
    return return_message
예제 #10
0
async def recover_password(username: str):
    """
    Password Recovery
    """
    logging.info(">>> " + __name__ + ":" + recover_password.__name__ )
    db = get_database()
    user = await crud.get(db, username)

    if not user:
        raise HTTPException(
            status_code=404,
            detail="The user with this username does not exist in the system.",
        )

    password_reset_token = generate_password_reset_token(username=username)
    send_reset_password_email(
        email_to=user['email'], username=username, token=password_reset_token
    )
    return {"msg": "Password recovery email sent."}
예제 #11
0
    def mutate(
        root,
        info,
        username,
        db: Session = sync_db,
    ):
        user = crud.user.get_by_username(db, username=username)
        if not user:
            raise GraphQLError("A user with that username does not exist ")

        password_reset_token = generate_password_reset_token(email=user.email)
        # send httprequest to email service
        # email_to=user.email
        # email=user.email
        # token=password_reset_token
        msg = "Password recovery email sent"
        ok = True
        return RecoverPassword(ok=ok, msg=msg)


# Reset password is an api_endpoint since it will be a link
예제 #12
0
def test_verify_password_reset_token():
    test_email = '*****@*****.**'
    token = generate_password_reset_token(test_email)
    email = verify_password_reset_token(token)
    assert test_email == email