diff --git a/moto/iam/models.py b/moto/iam/models.py index aaa199b9e..83b5094da 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -135,6 +135,14 @@ class User(object): def get_all_access_keys(self): return self.access_keys + def delete_access_key(self, access_key_id): + for key in self.access_keys: + if key.access_key_id == access_key_id: + self.access_keys.remove(key) + break + else: + raise BotoServerError(404, 'Not Found') + class IAMBackend(BaseBackend): @@ -207,7 +215,6 @@ class IAMBackend(BaseBackend): return group def get_group(self, group_name, marker=None, max_items=None): - group = None try: group = self.groups[group_name] @@ -224,6 +231,15 @@ class IAMBackend(BaseBackend): self.users[user_name] = user return user + def get_user(self, user_name): + user = None + try: + user = self.users[user_name] + except KeyError: + raise BotoServerError(404, 'Not Found') + + return user + def add_user_to_group(self, group_name, user_name): group = None user = None @@ -292,6 +308,13 @@ class IAMBackend(BaseBackend): return keys + def delete_access_key(self, access_key_id, user_name): + try: + user = self.users[user_name] + user.delete_access_key(access_key_id) + except KeyError: + raise BotoServerError(404, 'Not Found') + def delete_user(self, user_name): try: del self.users[user_name] diff --git a/moto/iam/responses.py b/moto/iam/responses.py index bac627361..3d6cf3c20 100644 --- a/moto/iam/responses.py +++ b/moto/iam/responses.py @@ -106,6 +106,12 @@ class IamResponse(BaseResponse): template = Template(USER_TEMPLATE) return template.render(action='Create', user=user) + def get_user(self): + user_name = self._get_param('UserName') + user = iam_backend.get_user(user_name) + template = Template(USER_TEMPLATE) + return template.render(action='Get', user=user) + def add_user_to_group(self): group_name = self._get_param('GroupName') user_name = self._get_param('UserName') @@ -165,6 +171,14 @@ class IamResponse(BaseResponse): template = Template(LIST_ACCESS_KEYS_TEMPLATE) return template.render(user_name=user_name, keys=keys) + def delete_access_key(self): + user_name = self._get_param('UserName') + access_key_id = self._get_param('AccessKeyId') + + iam_backend.delete_access_key(access_key_id, user_name) + template = Template(GENERIC_EMPTY_TEMPLATE) + return template.render(name='DeleteAccessKey') + def delete_user(self): user_name = self._get_param('UserName') iam_backend.delete_user(user_name) diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py index 91359cf72..867da98f8 100644 --- a/tests/test_iam/test_iam.py +++ b/tests/test_iam/test_iam.py @@ -84,6 +84,14 @@ def test_create_user(): assert_raises(BotoServerError, conn.create_user, 'my-user') +@mock_iam() +def test_get_user(): + conn = boto.connect_iam() + assert_raises(BotoServerError, conn.get_user, 'my-user') + conn.create_user('my-user') + conn.get_user('my-user') + + @mock_iam() def test_add_user_to_group(): conn = boto.connect_iam() @@ -130,6 +138,13 @@ def test_get_all_access_keys(): ) +@mock_iam() +def test_delete_access_key(): + conn = boto.connect_iam() + conn.create_user('my-user') + access_key_id = conn.create_access_key('my-user')['create_access_key_response']['create_access_key_result']['access_key']['access_key_id'] + conn.delete_access_key(access_key_id, 'my-user') + @mock_iam() def test_delete_user():