Implemented get_access_key_last_used
Written test that still does not work due to:
    ParamValidationError: Parameter validation failed:
    Unknown parameter in input: "UserName", must be one of: AccessKeyId
Refactored update_access_key and delete_access_key functions
			
			
This commit is contained in:
		
							parent
							
								
									ed861ecae1
								
							
						
					
					
						commit
						7189d019df
					
				| @ -2257,7 +2257,7 @@ | |||||||
| - [X] detach_user_policy | - [X] detach_user_policy | ||||||
| - [X] enable_mfa_device | - [X] enable_mfa_device | ||||||
| - [ ] generate_credential_report | - [ ] generate_credential_report | ||||||
| - [ ] get_access_key_last_used | - [X] get_access_key_last_used | ||||||
| - [X] get_account_authorization_details | - [X] get_account_authorization_details | ||||||
| - [ ] get_account_password_policy | - [ ] get_account_password_policy | ||||||
| - [ ] get_account_summary | - [ ] get_account_summary | ||||||
|  | |||||||
| @ -224,6 +224,10 @@ class AccessKey(BaseModel): | |||||||
|             datetime.utcnow(), |             datetime.utcnow(), | ||||||
|             "%Y-%m-%dT%H:%M:%SZ" |             "%Y-%m-%dT%H:%M:%SZ" | ||||||
|         ) |         ) | ||||||
|  |         self.last_used = datetime.strftime( | ||||||
|  |             datetime.utcnow(), | ||||||
|  |             "%Y-%m-%dT%H:%M:%SZ" | ||||||
|  |         ) | ||||||
| 
 | 
 | ||||||
|     def get_cfn_attribute(self, attribute_name): |     def get_cfn_attribute(self, attribute_name): | ||||||
|         from moto.cloudformation.exceptions import UnformattedGetAttTemplateException |         from moto.cloudformation.exceptions import UnformattedGetAttTemplateException | ||||||
| @ -351,22 +355,25 @@ class User(BaseModel): | |||||||
|     def get_all_access_keys(self): |     def get_all_access_keys(self): | ||||||
|         return self.access_keys |         return self.access_keys | ||||||
| 
 | 
 | ||||||
|  |     def get_access_key_last_used(self, access_key_id): | ||||||
|  |         key = self.get_access_key_by_id(access_key_id) | ||||||
|  |         return key.last_used | ||||||
|  | 
 | ||||||
|     def delete_access_key(self, access_key_id): |     def delete_access_key(self, access_key_id): | ||||||
|         for key in self.access_keys: |         key = self.get_access_key_by_id(access_key_id) | ||||||
|             if key.access_key_id == access_key_id: |         self.access_keys.remove(key) | ||||||
|                 self.access_keys.remove(key) |  | ||||||
|                 break |  | ||||||
|         else: |  | ||||||
|             raise IAMNotFoundException( |  | ||||||
|                 "Key {0} not found".format(access_key_id)) |  | ||||||
| 
 | 
 | ||||||
|     def update_access_key(self, access_key_id, status): |     def update_access_key(self, access_key_id, status): | ||||||
|  |         key = self.get_access_key_by_id(access_key_id) | ||||||
|  |         key.status = status | ||||||
|  | 
 | ||||||
|  |     def get_access_key_by_id(self, access_key_id): | ||||||
|         for key in self.access_keys: |         for key in self.access_keys: | ||||||
|             if key.access_key_id == access_key_id: |             if key.access_key_id == access_key_id: | ||||||
|                 key.status = status |                 return key | ||||||
|                 break |  | ||||||
|         else: |         else: | ||||||
|             raise IAMNotFoundException("The Access Key with id {0} cannot be found".format(access_key_id)) |             raise IAMNotFoundException( | ||||||
|  |                 "The Access Key with id {0} cannot be found".format(access_key_id)) | ||||||
| 
 | 
 | ||||||
|     def get_cfn_attribute(self, attribute_name): |     def get_cfn_attribute(self, attribute_name): | ||||||
|         from moto.cloudformation.exceptions import UnformattedGetAttTemplateException |         from moto.cloudformation.exceptions import UnformattedGetAttTemplateException | ||||||
| @ -838,6 +845,11 @@ class IAMBackend(BaseBackend): | |||||||
|         user = self.get_user(user_name) |         user = self.get_user(user_name) | ||||||
|         user.update_access_key(access_key_id, status) |         user.update_access_key(access_key_id, status) | ||||||
| 
 | 
 | ||||||
|  |     def get_access_key_last_used(self, user_name, access_key_id): | ||||||
|  |         user = self.get_user(user_name) | ||||||
|  |         last_used = user.get_access_key_last_used(access_key_id) | ||||||
|  |         return last_used | ||||||
|  | 
 | ||||||
|     def get_all_access_keys(self, user_name, marker=None, max_items=None): |     def get_all_access_keys(self, user_name, marker=None, max_items=None): | ||||||
|         user = self.get_user(user_name) |         user = self.get_user(user_name) | ||||||
|         keys = user.get_all_access_keys() |         keys = user.get_all_access_keys() | ||||||
|  | |||||||
| @ -454,6 +454,13 @@ class IamResponse(BaseResponse): | |||||||
|         template = self.response_template(GENERIC_EMPTY_TEMPLATE) |         template = self.response_template(GENERIC_EMPTY_TEMPLATE) | ||||||
|         return template.render(name='UpdateAccessKey') |         return template.render(name='UpdateAccessKey') | ||||||
| 
 | 
 | ||||||
|  |     def get_access_key_last_used(self): | ||||||
|  |         user_name = self._get_param('UserName') | ||||||
|  |         access_key_id = self._get_param('AccessKeyId') | ||||||
|  |         iam_backend.get_access_key_last_used(user_name, access_key_id) | ||||||
|  |         template = self.response_template(GENERIC_EMPTY_TEMPLATE) | ||||||
|  |         return template.render(name='GetAccessKeyLastUsed') | ||||||
|  | 
 | ||||||
|     def list_access_keys(self): |     def list_access_keys(self): | ||||||
|         user_name = self._get_param('UserName') |         user_name = self._get_param('UserName') | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -695,6 +695,19 @@ def test_update_access_key(): | |||||||
|     resp['AccessKeyMetadata'][0]['Status'].should.equal('Inactive') |     resp['AccessKeyMetadata'][0]['Status'].should.equal('Inactive') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @mock_iam | ||||||
|  | def test_get_access_key_last_used(): | ||||||
|  |     iam = boto3.resource('iam', region_name='us-east-1') | ||||||
|  |     client = iam.meta.client | ||||||
|  |     username = 'test-user' | ||||||
|  |     iam.create_user(UserName=username) | ||||||
|  |     with assert_raises(ClientError): | ||||||
|  |         client.get_access_key_last_used(UserName=username, AccessKeyId='non-existent-key') | ||||||
|  |     key = client.create_access_key(UserName=username)['AccessKey'] | ||||||
|  |     resp = client.get_access_key_last_used(UserName=username, AccessKeyId=key['AccessKeyId']) | ||||||
|  |     resp.should.equal(key.last_used) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @mock_iam | @mock_iam | ||||||
| def test_get_account_authorization_details(): | def test_get_account_authorization_details(): | ||||||
|     import json |     import json | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user