%% WARNING: DO NOT EDIT, AUTO-GENERATED CODE!
%% See https://github.com/aws-beam/aws-codegen for more details.
%% @doc key and an optional value. You specify the
%% certificate on input by its Amazon Resource Name (ARN). You specify the
%% tag by using a key-value pair.
%%
%% You can apply a tag to just one certificate if you want to identify a
%% specific characteristic of that certificate, or you can apply the same tag
%% to multiple certificates if you want to filter for a common relationship
%% among those certificates. Similarly, you can apply the same tag to
%% multiple resources if you want to specify a relationship among those
%% resources. For example, you can add the same tag to an ACM certificate and
%% an Elastic Load Balancing load balancer to indicate that they are both
%% used by the same website. For more information, see Tagging
%% ACM certificates.
%%
%% To remove one or more tags, use the RemoveTagsFromCertificate
%% action. To view all of the tags that have been applied to the certificate,
%% use the ListTagsForCertificate action.
add_tags_to_certificate(Client, Input)
when is_map(Client), is_map(Input) ->
add_tags_to_certificate(Client, Input, []).
add_tags_to_certificate(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"AddTagsToCertificate">>, Input, Options).
%% @doc Deletes a certificate and its associated private key. If this action
%% succeeds, the certificate no longer appears in the list that can be
%% displayed by calling the ListCertificates action or be retrieved by
%% calling the GetCertificate action. The certificate will not be
%% available for use by AWS services integrated with ACM.
%%
%%
Not Before
%% and Not After certificate fields.
%%
%% Issuer field must not be empty.
%%
%% CertificateArn argument. Include this argument only when you
%% want to replace a previously imported certifica
%%
%% file://. For example, you can
%% specify a certificate saved in the C:\temp folder as
%% file://C:\temp\certificate_to_import.pem. If you are making
%% an HTTP or HTTPS Query request, include these arguments as BLOBs.
%%
%% RSA_2048 certificates. For more
%% information, see Filters.
list_certificates(Client, Input)
when is_map(Client), is_map(Input) ->
list_certificates(Client, Input, []).
list_certificates(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListCertificates">>, Input, Options).
%% @doc Lists the tags that have been applied to the ACM certificate. Use the
%% certificate's Amazon Resource Name (ARN) to specify the certificate. To
%% add a tag to an ACM certificate, use the AddTagsToCertificate
%% action. To delete a tag, use the RemoveTagsFromCertificate action.
list_tags_for_certificate(Client, Input)
when is_map(Client), is_map(Input) ->
list_tags_for_certificate(Client, Input, []).
list_tags_for_certificate(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ListTagsForCertificate">>, Input, Options).
%% @doc Remove one or more tags from an ACM certificate. A tag consists of a
%% key-value pair. If you do not specify the value portion of the tag when
%% calling this function, the tag will be removed regardless of value. If you
%% specify a value, the tag is removed only if it is associated with the
%% specified value.
%%
%% To add tags to a certificate, use the AddTagsToCertificate action.
%% To view all of the tags that have been applied to a specific ACM
%% certificate, use the ListTagsForCertificate action.
remove_tags_from_certificate(Client, Input)
when is_map(Client), is_map(Input) ->
remove_tags_from_certificate(Client, Input, []).
remove_tags_from_certificate(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RemoveTagsFromCertificate">>, Input, Options).
%% @doc Renews an eligable ACM certificate. At this time, only exported
%% private certificates can be renewed with this operation. In order to renew
%% your ACM PCA certificates with ACM, you must first grant
%% the ACM service principal permission to do so. For more information,
%% see Testing
%% Managed Renewal in the ACM User Guide.
renew_certificate(Client, Input)
when is_map(Client), is_map(Input) ->
renew_certificate(Client, Input, []).
renew_certificate(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RenewCertificate">>, Input, Options).
%% @doc Requests an ACM certificate for use with other AWS services. To
%% request an ACM certificate, you must specify a fully qualified domain name
%% (FQDN) in the DomainName parameter. You can also specify
%% additional FQDNs in the SubjectAlternativeNames parameter.
%%
%% If you are requesting a private certificate, domain validation is not
%% required. If you are requesting a public certificate, each domain name
%% that you specify must be validated to verify that you own or control the
%% domain. You can use DNS
%% validation or email
%% validation. We recommend that you use DNS validation. ACM issues
%% public certificates after receiving approval from the domain owner.
request_certificate(Client, Input)
when is_map(Client), is_map(Input) ->
request_certificate(Client, Input, []).
request_certificate(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"RequestCertificate">>, Input, Options).
%% @doc Resends the email that requests domain ownership validation. The
%% domain owner or an authorized representative must approve the ACM
%% certificate before it can be issued. The certificate can be approved by
%% clicking a link in the mail to navigate to the Amazon certificate approval
%% website and then clicking I Approve. However, the validation email
%% can be blocked by spam filters. Therefore, if you do not receive the
%% original mail, you can request that the mail be resent within 72 hours of
%% requesting the ACM certificate. If more than 72 hours have elapsed since
%% your original request or since your last attempt to resend validation
%% mail, you must request a new certificate. For more information about
%% setting up your contact email addresses, see Configure
%% Email for your Domain.
resend_validation_email(Client, Input)
when is_map(Client), is_map(Input) ->
resend_validation_email(Client, Input, []).
resend_validation_email(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"ResendValidationEmail">>, Input, Options).
%% @doc Updates a certificate. Currently, you can use this function to
%% specify whether to opt in to or out of recording your certificate in a
%% certificate transparency log. For more information, see
%% Opting Out of Certificate Transparency Logging.
update_certificate_options(Client, Input)
when is_map(Client), is_map(Input) ->
update_certificate_options(Client, Input, []).
update_certificate_options(Client, Input, Options)
when is_map(Client), is_map(Input), is_list(Options) ->
request(Client, <<"UpdateCertificateOptions">>, Input, Options).
%%====================================================================
%% Internal functions
%%====================================================================
-spec request(aws_client:aws_client(), binary(), map(), list()) ->
{ok, Result, {integer(), list(), hackney:client()}} |
{error, Error, {integer(), list(), hackney:client()}} |
{error, term()} when
Result :: map() | undefined,
Error :: {binary(), binary()}.
request(Client, Action, Input, Options) ->
Client1 = Client#{service => <<"acm">>},
Host = get_host(<<"acm">>, Client1),
URL = get_url(Host, Client1),
Headers = [
{<<"Host">>, Host},
{<<"Content-Type">>, <<"application/x-amz-json-1.1">>},
{<<"X-Amz-Target">>, << <<"CertificateManager.">>/binary, Action/binary>>}
],
Payload = jsx:encode(Input),
SignedHeaders = aws_request:sign_request(Client1, <<"POST">>, URL, Headers, Payload),
Response = hackney:request(post, URL, SignedHeaders, Payload, Options),
handle_response(Response).
handle_response({ok, 200, ResponseHeaders, Client}) ->
case hackney:body(Client) of
{ok, <<>>} ->
{ok, undefined, {200, ResponseHeaders, Client}};
{ok, Body} ->
Result = jsx:decode(Body, [return_maps]),
{ok, Result, {200, ResponseHeaders, Client}}
end;
handle_response({ok, StatusCode, ResponseHeaders, Client}) ->
{ok, Body} = hackney:body(Client),
Error = jsx:decode(Body, [return_maps]),
Exception = maps:get(<<"__type">>, Error, undefined),
Reason = maps:get(<<"message">>, Error, undefined),
{error, {Exception, Reason}, {StatusCode, ResponseHeaders, Client}};
handle_response({error, Reason}) ->
{error, Reason}.
get_host(_EndpointPrefix, #{region := <<"local">>}) ->
<<"localhost">>;
get_host(EndpointPrefix, #{region := Region, endpoint := Endpoint}) ->
aws_util:binary_join([EndpointPrefix, <<".">>, Region, <<".">>, Endpoint], <<"">>).
get_url(Host, Client) ->
Proto = maps:get(proto, Client),
Port = maps:get(port, Client),
aws_util:binary_join([Proto, <<"://">>, Host, <<":">>, Port, <<"/">>], <<"">>).