package com.amazonaws.iot.certificate; import software.amazon.awssdk.services.iot.IotClient; import software.amazon.awssdk.services.iot.model.DescribeCertificateRequest; import software.amazon.awssdk.services.iot.model.DescribeCertificateResponse; import software.amazon.awssdk.services.iot.model.InternalFailureException; import software.amazon.awssdk.services.iot.model.InvalidRequestException; import software.amazon.awssdk.services.iot.model.ResourceNotFoundException; import software.amazon.awssdk.services.iot.model.ServiceUnavailableException; import software.amazon.awssdk.services.iot.model.ThrottlingException; import software.amazon.awssdk.services.iot.model.UnauthorizedException; import software.amazon.cloudformation.exceptions.CfnAccessDeniedException; import software.amazon.cloudformation.exceptions.CfnGeneralServiceException; import software.amazon.cloudformation.exceptions.CfnInvalidRequestException; import software.amazon.cloudformation.exceptions.CfnNotFoundException; import software.amazon.cloudformation.exceptions.CfnServiceInternalErrorException; import software.amazon.cloudformation.exceptions.CfnThrottlingException; import software.amazon.cloudformation.proxy.AmazonWebServicesClientProxy; import software.amazon.cloudformation.proxy.Logger; import software.amazon.cloudformation.proxy.ProgressEvent; import software.amazon.cloudformation.proxy.ResourceHandlerRequest; public class ReadHandler extends BaseHandler { private static final String OPERATION = "DescribeCertificate"; private IotClient iotClient; public ReadHandler() { iotClient = ClientBuilder.getClient(); } public ReadHandler(IotClient iotClient) { this.iotClient = iotClient; } @Override public ProgressEvent handleRequest( final AmazonWebServicesClientProxy proxy, final ResourceHandlerRequest request, final CallbackContext callbackContext, final Logger logger) { final DescribeCertificateRequest describeRequest = DescribeCertificateRequest.builder() .certificateId(request.getDesiredResourceState().getId()) .build(); try { final DescribeCertificateResponse response = proxy.injectCredentialsAndInvokeV2( describeRequest, iotClient::describeCertificate); return ProgressEvent.defaultSuccessHandler(ResourceModel.builder() .status(response.certificateDescription().statusAsString()) .arn(response.certificateDescription().certificateArn()) .id(response.certificateDescription().certificateId()) .build()); } catch (final InternalFailureException e) { throw new CfnServiceInternalErrorException(OPERATION, e); } catch (final InvalidRequestException e) { throw new CfnInvalidRequestException(e.getMessage(), e); } catch (final ResourceNotFoundException e) { throw new CfnNotFoundException(ResourceModel.TYPE_NAME, describeRequest.certificateId()); } catch (final ServiceUnavailableException e) { throw new CfnGeneralServiceException(OPERATION, e); } catch (final ThrottlingException e) { throw new CfnThrottlingException(OPERATION, e); } catch (final UnauthorizedException e) { throw new CfnAccessDeniedException(OPERATION, e); } } }