def change_password(self, auth_secret, old_password, new_password):
        """Change the user password.

        Parameters
        ----------
        auth_secret: str
            The authentication secret which will be used for user authentication.
        old_password: str
            The old password before the change.
        new_password: str
            The new password after the change.

        Returns
        -------
        bool
            True if the password is successfully changed, False otherwise.
        result
            A dict containing the new authentication secret with the key AUTH_KEY
            if the password is successfully changed, a dict containing the error
            string with the key ERROR_KEY otherwise.

        Note
        ----
        Possible error strings are listed as below:

        -  ERROR_NEW_PASSWORD_NO_CHANGE
        -  ERROR_NOT_LOGGED_IN
        -  ERROR_INCORRECT_OLD_PASSWORD
        -  ERROR_WEAK_PASSWORD
        """
        result = {pytwis_constants.ERROR_KEY: None}

        if old_password == new_password:
            result[pytwis_constants.ERROR_KEY] = \
                pytwis_constants.ERROR_NEW_PASSWORD_NO_CHANGE
            return (False, result)

        # Check if the user is logged in.
        loggedin, userid = self._is_loggedin(auth_secret)
        if not loggedin:
            result[pytwis_constants.ERROR_KEY] = pytwis_constants.ERROR_NOT_LOGGED_IN
            return (False, result)

        # Check if the old password matches.
        userid_profile_key = pytwis_constants.USER_PROFILE_KEY_FORMAT.format(userid)
        stored_password_hash = self._rc.hget(userid_profile_key,
                                             pytwis_constants.PASSWORD_HASH_KEY)
        if not check_password_hash(stored_password_hash, old_password):
            result[pytwis_constants.ERROR_KEY] = \
                pytwis_constants.ERROR_INCORRECT_OLD_PASSWORD
            return (False, result)

        # Check the password.
        if not Pytwis._check_password(new_password):
            result[pytwis_constants.ERROR_KEY] = pytwis_constants.ERROR_WEAK_PASSWORD
            return (False, result)

        # Generate the new authentication secret.
        new_auth_secret = secrets.token_hex()

        # Generate the new password hash.
        # The format of the new password hash looks like "method$salt$hash".
        new_password_hash = generate_password_hash(new_password,
                                                   method=\
                                                   pytwis_constants.PASSWORD_HASH_METHOD)

        # Replace the old password hash by the new one and the old authentication secret
        # by the new one.
        with self._rc.pipeline() as pipe:
            pipe.multi()
            pipe.hset(userid_profile_key,
                      pytwis_constants.PASSWORD_HASH_KEY,
                      new_password_hash)
            pipe.hset(userid_profile_key, pytwis_constants.AUTH_KEY, new_auth_secret)
            pipe.hset(pytwis_constants.AUTHS_KEY, new_auth_secret, userid)
            pipe.hdel(pytwis_constants.AUTHS_KEY, auth_secret)
            pipe.execute()

        result[pytwis_constants.AUTH_KEY] = new_auth_secret
        return (True, result)
def change_password ( self , auth_secret , old_password , new_password ) : result = { pytwis_constants . ERROR_KEY : None } if old_password == new_password : result [ pytwis_constants . ERROR_KEY ] = pytwis_constants . ERROR_NEW_PASSWORD_NO_CHANGE return ( False , result ) loggedin , userid = self . _is_loggedin ( auth_secret ) if not loggedin : result [ pytwis_constants . ERROR_KEY ] = pytwis_constants . ERROR_NOT_LOGGED_IN return ( False , result ) userid_profile_key = pytwis_constants . USER_PROFILE_KEY_FORMAT . format ( userid ) stored_password_hash = self . _rc . hget ( userid_profile_key , pytwis_constants . PASSWORD_HASH_KEY ) if not check_password_hash ( stored_password_hash , old_password ) : result [ pytwis_constants . ERROR_KEY ] = pytwis_constants . ERROR_INCORRECT_OLD_PASSWORD return ( False , result ) if not Pytwis . _check_password ( new_password ) : result [ pytwis_constants . ERROR_KEY ] = pytwis_constants . ERROR_WEAK_PASSWORD return ( False , result ) new_auth_secret = secrets . token_hex ( ) new_password_hash = generate_password_hash ( new_password , method = pytwis_constants . PASSWORD_HASH_METHOD ) with self . _rc . pipeline ( ) as pipe : pipe . multi ( ) pipe . hset ( userid_profile_key , pytwis_constants . PASSWORD_HASH_KEY , new_password_hash ) pipe . hset ( userid_profile_key , pytwis_constants . AUTH_KEY , new_auth_secret ) pipe . hset ( pytwis_constants . AUTHS_KEY , new_auth_secret , userid ) pipe . hdel ( pytwis_constants . AUTHS_KEY , auth_secret ) pipe . execute ( ) result [ pytwis_constants . AUTH_KEY ] = new_auth_secret return ( True , result )
Change the user password.

        Parameters
        ----------
        auth_secret: str
            The authentication secret which will be used for user authentication.
        old_password: str
            The old password before the change.
        new_password: str
            The new password after the change.

        Returns
        -------
        bool
            True if the password is successfully changed, False otherwise.
        result
            A dict containing the new authentication secret with the key AUTH_KEY
            if the password is successfully changed, a dict containing the error
            string with the key ERROR_KEY otherwise.

        Note
        ----
        Possible error strings are listed as below:

        -  ERROR_NEW_PASSWORD_NO_CHANGE
        -  ERROR_NOT_LOGGED_IN
        -  ERROR_INCORRECT_OLD_PASSWORD
        -  ERROR_WEAK_PASSWORD