diff --git a/moto/iam/models.py b/moto/iam/models.py index c3d1360b6..440c32c60 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -51,11 +51,25 @@ class InstanceProfile(object): return self.name +class Certificate(object): + def __init__(self, cert_name, cert_body, private_key, cert_chain=None, path=None): + self.cert_name = cert_name + self.cert_body = cert_body + self.private_key = private_key + self.path = path + self.cert_chain = cert_chain + + @property + def physical_resource_id(self): + return self.name + + class IAMBackend(BaseBackend): def __init__(self): self.instance_profiles = {} self.roles = {} + self.certificates = {} super(IAMBackend, self).__init__() def create_role(self, role_name, assume_role_policy_document, path, policies): @@ -96,4 +110,18 @@ class IAMBackend(BaseBackend): role = self.get_role(role_name) profile.roles.append(role) + def get_all_server_certs(self, marker=None): + return self.certificates.values() + + def upload_server_cert(self, cert_name, cert_body, private_key, cert_chain=None, path=None): + certificate_id = random_resource_id() + cert = Certificate(cert_name, cert_body, private_key, cert_chain, path) + self.certificates[certificate_id] = cert + return cert + + def get_server_certificate(self, name): + for key, cert in self.certificates.items(): + if name == cert.cert_name: + return cert + iam_backend = IAMBackend() diff --git a/moto/iam/responses.py b/moto/iam/responses.py index f30c189d0..d8f6fb410 100644 --- a/moto/iam/responses.py +++ b/moto/iam/responses.py @@ -60,6 +60,29 @@ class IamResponse(BaseResponse): template = Template(LIST_INSTANCE_PROFILES_TEMPLATE) return template.render(instance_profiles=profiles) + def upload_server_certificate(self): + cert_name = self._get_param('ServerCertificateName') + cert_body = self._get_param('CertificateBody') + path = self._get_param('Path') + private_key = self._get_param('PrivateKey') + cert_chain = self._get_param('CertificateName') + + cert = iam_backend.upload_server_cert(cert_name, cert_body, private_key, cert_chain=cert_chain, path=path) + template = Template(UPLOAD_CERT_TEMPLATE) + return template.render(certificate=cert) + + def list_server_certificates(self, marker=None): + certs = iam_backend.get_all_server_certs(marker=marker) + template = Template(LIST_SERVER_CERTIFICATES_TEMPLATE) + return template.render(server_certificates=certs) + + def get_server_certificate(self): + cert_name = self._get_param('ServerCertificateName') + cert = iam_backend.get_server_certificate(cert_name) + template = Template(GET_SERVER_CERTIFICATE_TEMPLATE) + return template.render(certificate=cert) + + CREATE_INSTANCE_PROFILE_TEMPLATE = """ @@ -182,3 +205,72 @@ LIST_INSTANCE_PROFILES_TEMPLATE = """ + + + {{ certificate.cert_name }} + {% if certificate.path %} + {{ certificate.path }} + {% endif %} + arn:aws:iam::123456789012:server-certificate/{{ certificate.path }}/{{ certificate.cert_name }} + 2010-05-08T01:02:03.004Z + ASCACKCEVSQ6C2EXAMPLE + 2012-05-08T01:02:03.004Z + + + + 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE + +""" + +LIST_SERVER_CERTIFICATES_TEMPLATE = """ + + false + + {% for certificate in server_certificates %} + + + {{ certificate.cert_name }} + {% if certificate.path %} + {{ certificate.path }} + arn:aws:iam::123456789012:server-certificate/{{ certificate.path }}/{{ certificate.cert_name }} + {% else %} + arn:aws:iam::123456789012:server-certificate/{{ certificate.cert_name }} + {% endif %} + 2010-05-08T01:02:03.004Z + ASCACKCEVSQ6C2EXAMPLE + 2012-05-08T01:02:03.004Z + + + {% endfor %} + + + + 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE + +""" + +GET_SERVER_CERTIFICATE_TEMPLATE = """ + + + + {{ certificate.cert_name }} + {% if certificate.path %} + {{ certificate.path }} + arn:aws:iam::123456789012:server-certificate/{{ certificate.path }}/{{ certificate.cert_name }} + {% else %} + arn:aws:iam::123456789012:server-certificate/{{ certificate.cert_name }} + {% endif %} + 2010-05-08T01:02:03.004Z + ASCACKCEVSQ6C2EXAMPLE + 2012-05-08T01:02:03.004Z + + {{ certificate.cert_body }} + + + + 7a62c49f-347e-4fc4-9331-6e8eEXAMPLE + +""" +