Add iam.get_open_id_connect_provider
This commit is contained in:
		
							parent
							
								
									bd627b65f7
								
							
						
					
					
						commit
						c492c5c228
					
				@ -3227,7 +3227,7 @@
 | 
				
			|||||||
- [X] get_group_policy
 | 
					- [X] get_group_policy
 | 
				
			||||||
- [X] get_instance_profile
 | 
					- [X] get_instance_profile
 | 
				
			||||||
- [X] get_login_profile
 | 
					- [X] get_login_profile
 | 
				
			||||||
- [ ] get_open_id_connect_provider
 | 
					- [X] get_open_id_connect_provider
 | 
				
			||||||
- [ ] get_organizations_access_report
 | 
					- [ ] get_organizations_access_report
 | 
				
			||||||
- [X] get_policy
 | 
					- [X] get_policy
 | 
				
			||||||
- [X] get_policy_version
 | 
					- [X] get_policy_version
 | 
				
			||||||
 | 
				
			|||||||
@ -104,11 +104,16 @@ class OpenIDConnectProvider(BaseModel):
 | 
				
			|||||||
        self.url = parsed_url.netloc + parsed_url.path
 | 
					        self.url = parsed_url.netloc + parsed_url.path
 | 
				
			||||||
        self.thumbprint_list = thumbprint_list
 | 
					        self.thumbprint_list = thumbprint_list
 | 
				
			||||||
        self.client_id_list = client_id_list
 | 
					        self.client_id_list = client_id_list
 | 
				
			||||||
 | 
					        self.create_date = datetime.utcnow()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def arn(self):
 | 
					    def arn(self):
 | 
				
			||||||
        return 'arn:aws:iam::{0}:oidc-provider/{1}'.format(ACCOUNT_ID, self.url)
 | 
					        return 'arn:aws:iam::{0}:oidc-provider/{1}'.format(ACCOUNT_ID, self.url)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def created_iso_8601(self):
 | 
				
			||||||
 | 
					        return iso_8601_datetime_without_milliseconds(self.create_date)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _validate(self, url, thumbprint_list, client_id_list):
 | 
					    def _validate(self, url, thumbprint_list, client_id_list):
 | 
				
			||||||
        if any(len(client_id) > 255 for client_id in client_id_list):
 | 
					        if any(len(client_id) > 255 for client_id in client_id_list):
 | 
				
			||||||
            self._errors.append(self._format_error(
 | 
					            self._errors.append(self._format_error(
 | 
				
			||||||
@ -1347,5 +1352,13 @@ class IAMBackend(BaseBackend):
 | 
				
			|||||||
        self.open_id_providers[open_id_provider.arn] = open_id_provider
 | 
					        self.open_id_providers[open_id_provider.arn] = open_id_provider
 | 
				
			||||||
        return open_id_provider
 | 
					        return open_id_provider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_open_id_connect_provider(self, arn):
 | 
				
			||||||
 | 
					        open_id_provider = self.open_id_providers.get(arn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if not open_id_provider:
 | 
				
			||||||
 | 
					            raise IAMNotFoundException('OpenIDConnect Provider not found for arn {}'.format(arn))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return open_id_provider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
iam_backend = IAMBackend()
 | 
					iam_backend = IAMBackend()
 | 
				
			||||||
 | 
				
			|||||||
@ -759,11 +759,20 @@ class IamResponse(BaseResponse):
 | 
				
			|||||||
        open_id_provider_url = self._get_param('Url')
 | 
					        open_id_provider_url = self._get_param('Url')
 | 
				
			||||||
        thumbprint_list = self._get_multi_param('ThumbprintList.member')
 | 
					        thumbprint_list = self._get_multi_param('ThumbprintList.member')
 | 
				
			||||||
        client_id_list = self._get_multi_param('ClientIDList.member')
 | 
					        client_id_list = self._get_multi_param('ClientIDList.member')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        open_id_provider = iam_backend.create_open_id_connect_provider(open_id_provider_url, thumbprint_list, client_id_list)
 | 
					        open_id_provider = iam_backend.create_open_id_connect_provider(open_id_provider_url, thumbprint_list, client_id_list)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        template = self.response_template(CREATE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
 | 
					        template = self.response_template(CREATE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
 | 
				
			||||||
        return template.render(open_id_provider=open_id_provider)
 | 
					        return template.render(open_id_provider=open_id_provider)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def get_open_id_connect_provider(self):
 | 
				
			||||||
 | 
					        open_id_provider_arn = self._get_param('OpenIDConnectProviderArn')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        open_id_provider = iam_backend.get_open_id_connect_provider(open_id_provider_arn)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        template = self.response_template(GET_OPEN_ID_CONNECT_PROVIDER_TEMPLATE)
 | 
				
			||||||
 | 
					        return template.render(open_id_provider=open_id_provider)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
LIST_ENTITIES_FOR_POLICY_TEMPLATE = """<ListEntitiesForPolicyResponse>
 | 
					LIST_ENTITIES_FOR_POLICY_TEMPLATE = """<ListEntitiesForPolicyResponse>
 | 
				
			||||||
 <ListEntitiesForPolicyResult>
 | 
					 <ListEntitiesForPolicyResult>
 | 
				
			||||||
@ -1993,3 +2002,24 @@ CREATE_OPEN_ID_CONNECT_PROVIDER_TEMPLATE = """<CreateOpenIDConnectProviderRespon
 | 
				
			|||||||
    <RequestId>f248366a-4f64-11e4-aefa-bfd6aEXAMPLE</RequestId>
 | 
					    <RequestId>f248366a-4f64-11e4-aefa-bfd6aEXAMPLE</RequestId>
 | 
				
			||||||
  </ResponseMetadata>
 | 
					  </ResponseMetadata>
 | 
				
			||||||
</CreateOpenIDConnectProviderResponse>"""
 | 
					</CreateOpenIDConnectProviderResponse>"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GET_OPEN_ID_CONNECT_PROVIDER_TEMPLATE = """<GetOpenIDConnectProviderResponse xmlns="https://iam.amazonaws.com/doc/2010-05-08/">
 | 
				
			||||||
 | 
					  <GetOpenIDConnectProviderResult>
 | 
				
			||||||
 | 
					    <ThumbprintList>
 | 
				
			||||||
 | 
					      {% for thumbprint in open_id_provider.thumbprint_list %}
 | 
				
			||||||
 | 
					      <member>{{ thumbprint }}</member>
 | 
				
			||||||
 | 
					      {% endfor %}
 | 
				
			||||||
 | 
					    </ThumbprintList>
 | 
				
			||||||
 | 
					    <CreateDate>{{ open_id_provider.created_iso_8601 }}</CreateDate>
 | 
				
			||||||
 | 
					    <ClientIDList>
 | 
				
			||||||
 | 
					      {% for client_id in open_id_provider.client_id_list %}
 | 
				
			||||||
 | 
					      <member>{{ client_id }}</member>
 | 
				
			||||||
 | 
					      {% endfor %}
 | 
				
			||||||
 | 
					    </ClientIDList>
 | 
				
			||||||
 | 
					    <Url>{{ open_id_provider.url }}</Url>
 | 
				
			||||||
 | 
					  </GetOpenIDConnectProviderResult>
 | 
				
			||||||
 | 
					  <ResponseMetadata>
 | 
				
			||||||
 | 
					    <RequestId>2c91531b-4f65-11e4-aefa-bfd6aEXAMPLE</RequestId>
 | 
				
			||||||
 | 
					  </ResponseMetadata>
 | 
				
			||||||
 | 
					</GetOpenIDConnectProviderResponse>"""
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,9 @@ import sure  # noqa
 | 
				
			|||||||
import sys
 | 
					import sys
 | 
				
			||||||
from boto.exception import BotoServerError
 | 
					from boto.exception import BotoServerError
 | 
				
			||||||
from botocore.exceptions import ClientError
 | 
					from botocore.exceptions import ClientError
 | 
				
			||||||
 | 
					from dateutil.tz import tzutc
 | 
				
			||||||
 | 
					from freezegun import freeze_time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from moto import mock_iam, mock_iam_deprecated
 | 
					from moto import mock_iam, mock_iam_deprecated
 | 
				
			||||||
from moto.iam.models import aws_managed_policies
 | 
					from moto.iam.models import aws_managed_policies
 | 
				
			||||||
from nose.tools import assert_raises, assert_equals
 | 
					from nose.tools import assert_raises, assert_equals
 | 
				
			||||||
@ -1615,11 +1618,10 @@ def test_create_open_id_connect_provider():
 | 
				
			|||||||
@mock_iam
 | 
					@mock_iam
 | 
				
			||||||
def test_create_open_id_connect_provider_errors():
 | 
					def test_create_open_id_connect_provider_errors():
 | 
				
			||||||
    client = boto3.client('iam', region_name='us-east-1')
 | 
					    client = boto3.client('iam', region_name='us-east-1')
 | 
				
			||||||
    response = client.create_open_id_connect_provider(
 | 
					    client.create_open_id_connect_provider(
 | 
				
			||||||
        Url='https://example.com',
 | 
					        Url='https://example.com',
 | 
				
			||||||
        ThumbprintList=[]
 | 
					        ThumbprintList=[]
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    open_id_arn = response['OpenIDConnectProviderArn']
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    client.create_open_id_connect_provider.when.called_with(
 | 
					    client.create_open_id_connect_provider.when.called_with(
 | 
				
			||||||
        Url='https://example.com',
 | 
					        Url='https://example.com',
 | 
				
			||||||
@ -1695,3 +1697,54 @@ def test_create_open_id_connect_provider_errors():
 | 
				
			|||||||
        'Value "{2}" at "url" failed to satisfy constraint: '
 | 
					        'Value "{2}" at "url" failed to satisfy constraint: '
 | 
				
			||||||
        'Member must have length less than or equal to 255'.format([too_long_client_id], [too_long_thumbprint], too_long_url)
 | 
					        'Member must have length less than or equal to 255'.format([too_long_client_id], [too_long_thumbprint], too_long_url)
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@freeze_time('2019-01-01 00:00:00')
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					def test_get_open_id_connect_provider():
 | 
				
			||||||
 | 
					    client = boto3.client('iam', region_name='us-east-1')
 | 
				
			||||||
 | 
					    response = client.create_open_id_connect_provider(
 | 
				
			||||||
 | 
					        Url='https://example.com',
 | 
				
			||||||
 | 
					        ThumbprintList=[
 | 
				
			||||||
 | 
					            'b' * 40
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        ClientIDList=[
 | 
				
			||||||
 | 
					            'b'
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    open_id_arn = response['OpenIDConnectProviderArn']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    response = client.get_open_id_connect_provider(
 | 
				
			||||||
 | 
					        OpenIDConnectProviderArn=open_id_arn
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    response['Url'].should.equal('example.com')
 | 
				
			||||||
 | 
					    response['ThumbprintList'].should.equal([
 | 
				
			||||||
 | 
					        'b' * 40
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					    response['ClientIDList'].should.equal([
 | 
				
			||||||
 | 
					        'b'
 | 
				
			||||||
 | 
					    ])
 | 
				
			||||||
 | 
					    response['CreateDate'].should.equal(datetime.now(tzutc()))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mock_iam
 | 
				
			||||||
 | 
					def test_get_open_id_connect_provider_errors():
 | 
				
			||||||
 | 
					    client = boto3.client('iam', region_name = 'us-east-1')
 | 
				
			||||||
 | 
					    response = client.create_open_id_connect_provider(
 | 
				
			||||||
 | 
					        Url='https://example.com',
 | 
				
			||||||
 | 
					        ThumbprintList=[
 | 
				
			||||||
 | 
					            'b' * 40
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					        ClientIDList=[
 | 
				
			||||||
 | 
					            'b'
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    open_id_arn = response['OpenIDConnectProviderArn']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    client.get_open_id_connect_provider.when.called_with(
 | 
				
			||||||
 | 
					        OpenIDConnectProviderArn = open_id_arn + '-not-existing'
 | 
				
			||||||
 | 
					    ).should.throw(
 | 
				
			||||||
 | 
					        ClientError,
 | 
				
			||||||
 | 
					        'OpenIDConnect Provider not found for arn {}'.format(open_id_arn + '-not-existing')
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user