def test_validate_user_update(self):
        """Test the update data validation.
        """
        # Missing username
        data = dict()
        self.assertRaises(userdata.UserNameRequiredError, userdata.user_update_fields_ok, data)

        # No other fields results in a NOOP
        data = dict(username="******")
        self.assertEquals(userdata.user_update_fields_ok(data), data)

        # Missing new_password is too small.
        data = dict(username="******", new_password="")
        self.assertRaises(userdata.PasswordTooSmallError, userdata.user_update_fields_ok, data)

        data = dict(username="******", new_password=None)
        self.assertRaises(userdata.PasswordTooSmallError, userdata.user_update_fields_ok, data)

        # trailing whitespace stripped:
        data = dict(username="******", new_password="******")
        correct = dict(username="******", new_password="******")
        self.assertEquals(userdata.user_update_fields_ok(data), correct)
예제 #2
0
    def update(self, data):
        """Update the details about an existing user.

        :param data: This must contain the 'username' field at least.

        You only need to provide the fields that are to be updated.

        To change password, the "new_password" field is provided.

        :returns: A dict containing the updated user details.

        """
        self.log.debug("update: validating given data")

        data = userdata.user_update_fields_ok(data)
        username = data['username']

        self.log.debug("update: attempting to update user <%s>." % username)

        # TODO: at the moment this is travelling over the intranet we control,
        # however this needs much stronger protection i.e. HTTPS/SSL between
        # services talking to each other.
        #
        # obuscate for moment.
        if "new_password" in data:
            data["new_password"] = data["new_password"].encode("base64")

        uri = urljoin(self.base_uri, self.GET_UPDATE_OR_DELETE % dict(
            username=username,
        ))
        self.log.debug("update: uri <%s>" % uri)

        res = requests.put(uri, json.dumps(data), headers=self.JSON_CT)
        rc = res.json()
        if not rc['success']:
            raise userdata.UserServiceError(rc['message'])

        return rc['data']