1 /**
2  * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3  * SPDX-License-Identifier: Apache-2.0.
4  */
5 
6 #pragma once
7 #include <aws/acm/ACM_EXPORTS.h>
8 #include <aws/acm/ACMErrors.h>
9 #include <aws/core/client/AWSError.h>
10 #include <aws/core/client/ClientConfiguration.h>
11 #include <aws/core/client/AWSClient.h>
12 #include <aws/core/utils/memory/stl/AWSString.h>
13 #include <aws/core/utils/json/JsonSerializer.h>
14 #include <aws/acm/model/DescribeCertificateResult.h>
15 #include <aws/acm/model/ExportCertificateResult.h>
16 #include <aws/acm/model/GetAccountConfigurationResult.h>
17 #include <aws/acm/model/GetCertificateResult.h>
18 #include <aws/acm/model/ImportCertificateResult.h>
19 #include <aws/acm/model/ListCertificatesResult.h>
20 #include <aws/acm/model/ListTagsForCertificateResult.h>
21 #include <aws/acm/model/RequestCertificateResult.h>
22 #include <aws/core/NoResult.h>
23 #include <aws/core/client/AsyncCallerContext.h>
24 #include <aws/core/http/HttpTypes.h>
25 #include <future>
26 #include <functional>
27 
28 namespace Aws
29 {
30 
31 namespace Http
32 {
33   class HttpClient;
34   class HttpClientFactory;
35 } // namespace Http
36 
37 namespace Utils
38 {
39   template< typename R, typename E> class Outcome;
40 namespace Threading
41 {
42   class Executor;
43 } // namespace Threading
44 } // namespace Utils
45 
46 namespace Auth
47 {
48   class AWSCredentials;
49   class AWSCredentialsProvider;
50 } // namespace Auth
51 
52 namespace Client
53 {
54   class RetryStrategy;
55 } // namespace Client
56 
57 namespace ACM
58 {
59 
60 namespace Model
61 {
62         class AddTagsToCertificateRequest;
63         class DeleteCertificateRequest;
64         class DescribeCertificateRequest;
65         class ExportCertificateRequest;
66         class GetCertificateRequest;
67         class ImportCertificateRequest;
68         class ListCertificatesRequest;
69         class ListTagsForCertificateRequest;
70         class PutAccountConfigurationRequest;
71         class RemoveTagsFromCertificateRequest;
72         class RenewCertificateRequest;
73         class RequestCertificateRequest;
74         class ResendValidationEmailRequest;
75         class UpdateCertificateOptionsRequest;
76 
77         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> AddTagsToCertificateOutcome;
78         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> DeleteCertificateOutcome;
79         typedef Aws::Utils::Outcome<DescribeCertificateResult, ACMError> DescribeCertificateOutcome;
80         typedef Aws::Utils::Outcome<ExportCertificateResult, ACMError> ExportCertificateOutcome;
81         typedef Aws::Utils::Outcome<GetAccountConfigurationResult, ACMError> GetAccountConfigurationOutcome;
82         typedef Aws::Utils::Outcome<GetCertificateResult, ACMError> GetCertificateOutcome;
83         typedef Aws::Utils::Outcome<ImportCertificateResult, ACMError> ImportCertificateOutcome;
84         typedef Aws::Utils::Outcome<ListCertificatesResult, ACMError> ListCertificatesOutcome;
85         typedef Aws::Utils::Outcome<ListTagsForCertificateResult, ACMError> ListTagsForCertificateOutcome;
86         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> PutAccountConfigurationOutcome;
87         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> RemoveTagsFromCertificateOutcome;
88         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> RenewCertificateOutcome;
89         typedef Aws::Utils::Outcome<RequestCertificateResult, ACMError> RequestCertificateOutcome;
90         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> ResendValidationEmailOutcome;
91         typedef Aws::Utils::Outcome<Aws::NoResult, ACMError> UpdateCertificateOptionsOutcome;
92 
93         typedef std::future<AddTagsToCertificateOutcome> AddTagsToCertificateOutcomeCallable;
94         typedef std::future<DeleteCertificateOutcome> DeleteCertificateOutcomeCallable;
95         typedef std::future<DescribeCertificateOutcome> DescribeCertificateOutcomeCallable;
96         typedef std::future<ExportCertificateOutcome> ExportCertificateOutcomeCallable;
97         typedef std::future<GetAccountConfigurationOutcome> GetAccountConfigurationOutcomeCallable;
98         typedef std::future<GetCertificateOutcome> GetCertificateOutcomeCallable;
99         typedef std::future<ImportCertificateOutcome> ImportCertificateOutcomeCallable;
100         typedef std::future<ListCertificatesOutcome> ListCertificatesOutcomeCallable;
101         typedef std::future<ListTagsForCertificateOutcome> ListTagsForCertificateOutcomeCallable;
102         typedef std::future<PutAccountConfigurationOutcome> PutAccountConfigurationOutcomeCallable;
103         typedef std::future<RemoveTagsFromCertificateOutcome> RemoveTagsFromCertificateOutcomeCallable;
104         typedef std::future<RenewCertificateOutcome> RenewCertificateOutcomeCallable;
105         typedef std::future<RequestCertificateOutcome> RequestCertificateOutcomeCallable;
106         typedef std::future<ResendValidationEmailOutcome> ResendValidationEmailOutcomeCallable;
107         typedef std::future<UpdateCertificateOptionsOutcome> UpdateCertificateOptionsOutcomeCallable;
108 } // namespace Model
109 
110   class ACMClient;
111 
112     typedef std::function<void(const ACMClient*, const Model::AddTagsToCertificateRequest&, const Model::AddTagsToCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > AddTagsToCertificateResponseReceivedHandler;
113     typedef std::function<void(const ACMClient*, const Model::DeleteCertificateRequest&, const Model::DeleteCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DeleteCertificateResponseReceivedHandler;
114     typedef std::function<void(const ACMClient*, const Model::DescribeCertificateRequest&, const Model::DescribeCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > DescribeCertificateResponseReceivedHandler;
115     typedef std::function<void(const ACMClient*, const Model::ExportCertificateRequest&, const Model::ExportCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ExportCertificateResponseReceivedHandler;
116     typedef std::function<void(const ACMClient*, const Model::GetAccountConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetAccountConfigurationResponseReceivedHandler;
117     typedef std::function<void(const ACMClient*, const Model::GetCertificateRequest&, const Model::GetCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > GetCertificateResponseReceivedHandler;
118     typedef std::function<void(const ACMClient*, const Model::ImportCertificateRequest&, const Model::ImportCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ImportCertificateResponseReceivedHandler;
119     typedef std::function<void(const ACMClient*, const Model::ListCertificatesRequest&, const Model::ListCertificatesOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListCertificatesResponseReceivedHandler;
120     typedef std::function<void(const ACMClient*, const Model::ListTagsForCertificateRequest&, const Model::ListTagsForCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ListTagsForCertificateResponseReceivedHandler;
121     typedef std::function<void(const ACMClient*, const Model::PutAccountConfigurationRequest&, const Model::PutAccountConfigurationOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > PutAccountConfigurationResponseReceivedHandler;
122     typedef std::function<void(const ACMClient*, const Model::RemoveTagsFromCertificateRequest&, const Model::RemoveTagsFromCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > RemoveTagsFromCertificateResponseReceivedHandler;
123     typedef std::function<void(const ACMClient*, const Model::RenewCertificateRequest&, const Model::RenewCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > RenewCertificateResponseReceivedHandler;
124     typedef std::function<void(const ACMClient*, const Model::RequestCertificateRequest&, const Model::RequestCertificateOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > RequestCertificateResponseReceivedHandler;
125     typedef std::function<void(const ACMClient*, const Model::ResendValidationEmailRequest&, const Model::ResendValidationEmailOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > ResendValidationEmailResponseReceivedHandler;
126     typedef std::function<void(const ACMClient*, const Model::UpdateCertificateOptionsRequest&, const Model::UpdateCertificateOptionsOutcome&, const std::shared_ptr<const Aws::Client::AsyncCallerContext>&) > UpdateCertificateOptionsResponseReceivedHandler;
127 
128   /**
129    * <fullname>Amazon Web Services Certificate Manager</fullname> <p>You can use
130    * Amazon Web Services Certificate Manager (ACM) to manage SSL/TLS certificates for
131    * your Amazon Web Services-based websites and applications. For more information
132    * about using ACM, see the <a
133    * href="https://docs.aws.amazon.com/acm/latest/userguide/">Amazon Web Services
134    * Certificate Manager User Guide</a>.</p>
135    */
136   class AWS_ACM_API ACMClient : public Aws::Client::AWSJsonClient
137   {
138     public:
139       typedef Aws::Client::AWSJsonClient BASECLASS;
140 
141        /**
142         * Initializes client to use DefaultCredentialProviderChain, with default http client factory, and optional client config. If client config
143         * is not specified, it will be initialized to default values.
144         */
145         ACMClient(const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
146 
147        /**
148         * Initializes client to use SimpleAWSCredentialsProvider, with default http client factory, and optional client config. If client config
149         * is not specified, it will be initialized to default values.
150         */
151         ACMClient(const Aws::Auth::AWSCredentials& credentials, const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
152 
153        /**
154         * Initializes client to use specified credentials provider with specified client config. If http client factory is not supplied,
155         * the default http client factory will be used
156         */
157         ACMClient(const std::shared_ptr<Aws::Auth::AWSCredentialsProvider>& credentialsProvider,
158             const Aws::Client::ClientConfiguration& clientConfiguration = Aws::Client::ClientConfiguration());
159 
160         virtual ~ACMClient();
161 
162 
163         /**
164          * <p>Adds one or more tags to an ACM certificate. Tags are labels that you can use
165          * to identify and organize your Amazon Web Services resources. Each tag consists
166          * of a <code>key</code> and an optional <code>value</code>. You specify the
167          * certificate on input by its Amazon Resource Name (ARN). You specify the tag by
168          * using a key-value pair. </p> <p>You can apply a tag to just one certificate if
169          * you want to identify a specific characteristic of that certificate, or you can
170          * apply the same tag to multiple certificates if you want to filter for a common
171          * relationship among those certificates. Similarly, you can apply the same tag to
172          * multiple resources if you want to specify a relationship among those resources.
173          * For example, you can add the same tag to an ACM certificate and an Elastic Load
174          * Balancing load balancer to indicate that they are both used by the same website.
175          * For more information, see <a
176          * href="https://docs.aws.amazon.com/acm/latest/userguide/tags.html">Tagging ACM
177          * certificates</a>. </p> <p>To remove one or more tags, use the
178          * <a>RemoveTagsFromCertificate</a> action. To view all of the tags that have been
179          * applied to the certificate, use the <a>ListTagsForCertificate</a> action.
180          * </p><p><h3>See Also:</h3>   <a
181          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/AddTagsToCertificate">AWS
182          * API Reference</a></p>
183          */
184         virtual Model::AddTagsToCertificateOutcome AddTagsToCertificate(const Model::AddTagsToCertificateRequest& request) const;
185 
186         /**
187          * <p>Adds one or more tags to an ACM certificate. Tags are labels that you can use
188          * to identify and organize your Amazon Web Services resources. Each tag consists
189          * of a <code>key</code> and an optional <code>value</code>. You specify the
190          * certificate on input by its Amazon Resource Name (ARN). You specify the tag by
191          * using a key-value pair. </p> <p>You can apply a tag to just one certificate if
192          * you want to identify a specific characteristic of that certificate, or you can
193          * apply the same tag to multiple certificates if you want to filter for a common
194          * relationship among those certificates. Similarly, you can apply the same tag to
195          * multiple resources if you want to specify a relationship among those resources.
196          * For example, you can add the same tag to an ACM certificate and an Elastic Load
197          * Balancing load balancer to indicate that they are both used by the same website.
198          * For more information, see <a
199          * href="https://docs.aws.amazon.com/acm/latest/userguide/tags.html">Tagging ACM
200          * certificates</a>. </p> <p>To remove one or more tags, use the
201          * <a>RemoveTagsFromCertificate</a> action. To view all of the tags that have been
202          * applied to the certificate, use the <a>ListTagsForCertificate</a> action.
203          * </p><p><h3>See Also:</h3>   <a
204          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/AddTagsToCertificate">AWS
205          * API Reference</a></p>
206          *
207          * returns a future to the operation so that it can be executed in parallel to other requests.
208          */
209         virtual Model::AddTagsToCertificateOutcomeCallable AddTagsToCertificateCallable(const Model::AddTagsToCertificateRequest& request) const;
210 
211         /**
212          * <p>Adds one or more tags to an ACM certificate. Tags are labels that you can use
213          * to identify and organize your Amazon Web Services resources. Each tag consists
214          * of a <code>key</code> and an optional <code>value</code>. You specify the
215          * certificate on input by its Amazon Resource Name (ARN). You specify the tag by
216          * using a key-value pair. </p> <p>You can apply a tag to just one certificate if
217          * you want to identify a specific characteristic of that certificate, or you can
218          * apply the same tag to multiple certificates if you want to filter for a common
219          * relationship among those certificates. Similarly, you can apply the same tag to
220          * multiple resources if you want to specify a relationship among those resources.
221          * For example, you can add the same tag to an ACM certificate and an Elastic Load
222          * Balancing load balancer to indicate that they are both used by the same website.
223          * For more information, see <a
224          * href="https://docs.aws.amazon.com/acm/latest/userguide/tags.html">Tagging ACM
225          * certificates</a>. </p> <p>To remove one or more tags, use the
226          * <a>RemoveTagsFromCertificate</a> action. To view all of the tags that have been
227          * applied to the certificate, use the <a>ListTagsForCertificate</a> action.
228          * </p><p><h3>See Also:</h3>   <a
229          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/AddTagsToCertificate">AWS
230          * API Reference</a></p>
231          *
232          * Queues the request into a thread executor and triggers associated callback when operation has finished.
233          */
234         virtual void AddTagsToCertificateAsync(const Model::AddTagsToCertificateRequest& request, const AddTagsToCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
235 
236         /**
237          * <p>Deletes a certificate and its associated private key. If this action
238          * succeeds, the certificate no longer appears in the list that can be displayed by
239          * calling the <a>ListCertificates</a> action or be retrieved by calling the
240          * <a>GetCertificate</a> action. The certificate will not be available for use by
241          * Amazon Web Services services integrated with ACM. </p>  <p>You cannot
242          * delete an ACM certificate that is being used by another Amazon Web Services
243          * service. To delete a certificate that is in use, the certificate association
244          * must first be removed.</p> <p><h3>See Also:</h3>   <a
245          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DeleteCertificate">AWS
246          * API Reference</a></p>
247          */
248         virtual Model::DeleteCertificateOutcome DeleteCertificate(const Model::DeleteCertificateRequest& request) const;
249 
250         /**
251          * <p>Deletes a certificate and its associated private key. If this action
252          * succeeds, the certificate no longer appears in the list that can be displayed by
253          * calling the <a>ListCertificates</a> action or be retrieved by calling the
254          * <a>GetCertificate</a> action. The certificate will not be available for use by
255          * Amazon Web Services services integrated with ACM. </p>  <p>You cannot
256          * delete an ACM certificate that is being used by another Amazon Web Services
257          * service. To delete a certificate that is in use, the certificate association
258          * must first be removed.</p> <p><h3>See Also:</h3>   <a
259          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DeleteCertificate">AWS
260          * API Reference</a></p>
261          *
262          * returns a future to the operation so that it can be executed in parallel to other requests.
263          */
264         virtual Model::DeleteCertificateOutcomeCallable DeleteCertificateCallable(const Model::DeleteCertificateRequest& request) const;
265 
266         /**
267          * <p>Deletes a certificate and its associated private key. If this action
268          * succeeds, the certificate no longer appears in the list that can be displayed by
269          * calling the <a>ListCertificates</a> action or be retrieved by calling the
270          * <a>GetCertificate</a> action. The certificate will not be available for use by
271          * Amazon Web Services services integrated with ACM. </p>  <p>You cannot
272          * delete an ACM certificate that is being used by another Amazon Web Services
273          * service. To delete a certificate that is in use, the certificate association
274          * must first be removed.</p> <p><h3>See Also:</h3>   <a
275          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DeleteCertificate">AWS
276          * API Reference</a></p>
277          *
278          * Queues the request into a thread executor and triggers associated callback when operation has finished.
279          */
280         virtual void DeleteCertificateAsync(const Model::DeleteCertificateRequest& request, const DeleteCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
281 
282         /**
283          * <p>Returns detailed metadata about the specified ACM certificate.</p><p><h3>See
284          * Also:</h3>   <a
285          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DescribeCertificate">AWS
286          * API Reference</a></p>
287          */
288         virtual Model::DescribeCertificateOutcome DescribeCertificate(const Model::DescribeCertificateRequest& request) const;
289 
290         /**
291          * <p>Returns detailed metadata about the specified ACM certificate.</p><p><h3>See
292          * Also:</h3>   <a
293          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DescribeCertificate">AWS
294          * API Reference</a></p>
295          *
296          * returns a future to the operation so that it can be executed in parallel to other requests.
297          */
298         virtual Model::DescribeCertificateOutcomeCallable DescribeCertificateCallable(const Model::DescribeCertificateRequest& request) const;
299 
300         /**
301          * <p>Returns detailed metadata about the specified ACM certificate.</p><p><h3>See
302          * Also:</h3>   <a
303          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/DescribeCertificate">AWS
304          * API Reference</a></p>
305          *
306          * Queues the request into a thread executor and triggers associated callback when operation has finished.
307          */
308         virtual void DescribeCertificateAsync(const Model::DescribeCertificateRequest& request, const DescribeCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
309 
310         /**
311          * <p>Exports a private certificate issued by a private certificate authority (CA)
312          * for use anywhere. The exported file contains the certificate, the certificate
313          * chain, and the encrypted private 2048-bit RSA key associated with the public key
314          * that is embedded in the certificate. For security, you must assign a passphrase
315          * for the private key when exporting it. </p> <p>For information about exporting
316          * and formatting a certificate using the ACM console or CLI, see <a
317          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-export-private.html">Export
318          * a Private Certificate</a>.</p><p><h3>See Also:</h3>   <a
319          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ExportCertificate">AWS
320          * API Reference</a></p>
321          */
322         virtual Model::ExportCertificateOutcome ExportCertificate(const Model::ExportCertificateRequest& request) const;
323 
324         /**
325          * <p>Exports a private certificate issued by a private certificate authority (CA)
326          * for use anywhere. The exported file contains the certificate, the certificate
327          * chain, and the encrypted private 2048-bit RSA key associated with the public key
328          * that is embedded in the certificate. For security, you must assign a passphrase
329          * for the private key when exporting it. </p> <p>For information about exporting
330          * and formatting a certificate using the ACM console or CLI, see <a
331          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-export-private.html">Export
332          * a Private Certificate</a>.</p><p><h3>See Also:</h3>   <a
333          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ExportCertificate">AWS
334          * API Reference</a></p>
335          *
336          * returns a future to the operation so that it can be executed in parallel to other requests.
337          */
338         virtual Model::ExportCertificateOutcomeCallable ExportCertificateCallable(const Model::ExportCertificateRequest& request) const;
339 
340         /**
341          * <p>Exports a private certificate issued by a private certificate authority (CA)
342          * for use anywhere. The exported file contains the certificate, the certificate
343          * chain, and the encrypted private 2048-bit RSA key associated with the public key
344          * that is embedded in the certificate. For security, you must assign a passphrase
345          * for the private key when exporting it. </p> <p>For information about exporting
346          * and formatting a certificate using the ACM console or CLI, see <a
347          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-export-private.html">Export
348          * a Private Certificate</a>.</p><p><h3>See Also:</h3>   <a
349          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ExportCertificate">AWS
350          * API Reference</a></p>
351          *
352          * Queues the request into a thread executor and triggers associated callback when operation has finished.
353          */
354         virtual void ExportCertificateAsync(const Model::ExportCertificateRequest& request, const ExportCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
355 
356         /**
357          * <p>Returns the account configuration options associated with an Amazon Web
358          * Services account.</p><p><h3>See Also:</h3>   <a
359          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetAccountConfiguration">AWS
360          * API Reference</a></p>
361          */
362         virtual Model::GetAccountConfigurationOutcome GetAccountConfiguration() const;
363 
364         /**
365          * <p>Returns the account configuration options associated with an Amazon Web
366          * Services account.</p><p><h3>See Also:</h3>   <a
367          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetAccountConfiguration">AWS
368          * API Reference</a></p>
369          *
370          * returns a future to the operation so that it can be executed in parallel to other requests.
371          */
372         virtual Model::GetAccountConfigurationOutcomeCallable GetAccountConfigurationCallable() const;
373 
374         /**
375          * <p>Returns the account configuration options associated with an Amazon Web
376          * Services account.</p><p><h3>See Also:</h3>   <a
377          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetAccountConfiguration">AWS
378          * API Reference</a></p>
379          *
380          * Queues the request into a thread executor and triggers associated callback when operation has finished.
381          */
382         virtual void GetAccountConfigurationAsync(const GetAccountConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
383         /**
384          * <p>Retrieves an Amazon-issued certificate and its certificate chain. The chain
385          * consists of the certificate of the issuing CA and the intermediate certificates
386          * of any other subordinate CAs. All of the certificates are base64 encoded. You
387          * can use <a
388          * href="https://wiki.openssl.org/index.php/Command_Line_Utilities">OpenSSL</a> to
389          * decode the certificates and inspect individual fields.</p><p><h3>See Also:</h3>
390          * <a
391          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetCertificate">AWS
392          * API Reference</a></p>
393          */
394         virtual Model::GetCertificateOutcome GetCertificate(const Model::GetCertificateRequest& request) const;
395 
396         /**
397          * <p>Retrieves an Amazon-issued certificate and its certificate chain. The chain
398          * consists of the certificate of the issuing CA and the intermediate certificates
399          * of any other subordinate CAs. All of the certificates are base64 encoded. You
400          * can use <a
401          * href="https://wiki.openssl.org/index.php/Command_Line_Utilities">OpenSSL</a> to
402          * decode the certificates and inspect individual fields.</p><p><h3>See Also:</h3>
403          * <a
404          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetCertificate">AWS
405          * API Reference</a></p>
406          *
407          * returns a future to the operation so that it can be executed in parallel to other requests.
408          */
409         virtual Model::GetCertificateOutcomeCallable GetCertificateCallable(const Model::GetCertificateRequest& request) const;
410 
411         /**
412          * <p>Retrieves an Amazon-issued certificate and its certificate chain. The chain
413          * consists of the certificate of the issuing CA and the intermediate certificates
414          * of any other subordinate CAs. All of the certificates are base64 encoded. You
415          * can use <a
416          * href="https://wiki.openssl.org/index.php/Command_Line_Utilities">OpenSSL</a> to
417          * decode the certificates and inspect individual fields.</p><p><h3>See Also:</h3>
418          * <a
419          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/GetCertificate">AWS
420          * API Reference</a></p>
421          *
422          * Queues the request into a thread executor and triggers associated callback when operation has finished.
423          */
424         virtual void GetCertificateAsync(const Model::GetCertificateRequest& request, const GetCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
425 
426         /**
427          * <p>Imports a certificate into Amazon Web Services Certificate Manager (ACM) to
428          * use with services that are integrated with ACM. Note that <a
429          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-services.html">integrated
430          * services</a> allow only certificate types and keys they support to be associated
431          * with their resources. Further, their support differs depending on whether the
432          * certificate is imported into IAM or into ACM. For more information, see the
433          * documentation for each service. For more information about importing
434          * certificates into ACM, see <a
435          * href="https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html">Importing
436          * Certificates</a> in the <i>Amazon Web Services Certificate Manager User
437          * Guide</i>. </p>  <p>ACM does not provide <a
438          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html">managed
439          * renewal</a> for certificates that you import.</p>  <p>Note the following
440          * guidelines when importing third party certificates:</p> <ul> <li> <p>You must
441          * enter the private key that matches the certificate you are importing.</p> </li>
442          * <li> <p>The private key must be unencrypted. You cannot import a private key
443          * that is protected by a password or a passphrase.</p> </li> <li> <p>The private
444          * key must be no larger than 5 KB (5,120 bytes).</p> </li> <li> <p>If the
445          * certificate you are importing is not self-signed, you must enter its certificate
446          * chain.</p> </li> <li> <p>If a certificate chain is included, the issuer must be
447          * the subject of one of the certificates in the chain.</p> </li> <li> <p>The
448          * certificate, private key, and certificate chain must be PEM-encoded.</p> </li>
449          * <li> <p>The current time must be between the <code>Not Before</code> and
450          * <code>Not After</code> certificate fields.</p> </li> <li> <p>The
451          * <code>Issuer</code> field must not be empty.</p> </li> <li> <p>The OCSP
452          * authority URL, if present, must not exceed 1000 characters.</p> </li> <li> <p>To
453          * import a new certificate, omit the <code>CertificateArn</code> argument. Include
454          * this argument only when you want to replace a previously imported
455          * certificate.</p> </li> <li> <p>When you import a certificate by using the CLI,
456          * you must specify the certificate, the certificate chain, and the private key by
457          * their file names preceded by <code>fileb://</code>. For example, you can specify
458          * a certificate saved in the <code>C:\temp</code> folder as
459          * <code>fileb://C:\temp\certificate_to_import.pem</code>. If you are making an
460          * HTTP or HTTPS Query request, include these arguments as BLOBs. </p> </li> <li>
461          * <p>When you import a certificate by using an SDK, you must specify the
462          * certificate, the certificate chain, and the private key files in the manner
463          * required by the programming language you're using. </p> </li> <li> <p>The
464          * cryptographic algorithm of an imported certificate must match the algorithm of
465          * the signing CA. For example, if the signing CA key type is RSA, then the
466          * certificate key type must also be RSA.</p> </li> </ul> <p>This operation returns
467          * the <a
468          * href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon
469          * Resource Name (ARN)</a> of the imported certificate.</p><p><h3>See Also:</h3>
470          * <a
471          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ImportCertificate">AWS
472          * API Reference</a></p>
473          */
474         virtual Model::ImportCertificateOutcome ImportCertificate(const Model::ImportCertificateRequest& request) const;
475 
476         /**
477          * <p>Imports a certificate into Amazon Web Services Certificate Manager (ACM) to
478          * use with services that are integrated with ACM. Note that <a
479          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-services.html">integrated
480          * services</a> allow only certificate types and keys they support to be associated
481          * with their resources. Further, their support differs depending on whether the
482          * certificate is imported into IAM or into ACM. For more information, see the
483          * documentation for each service. For more information about importing
484          * certificates into ACM, see <a
485          * href="https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html">Importing
486          * Certificates</a> in the <i>Amazon Web Services Certificate Manager User
487          * Guide</i>. </p>  <p>ACM does not provide <a
488          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html">managed
489          * renewal</a> for certificates that you import.</p>  <p>Note the following
490          * guidelines when importing third party certificates:</p> <ul> <li> <p>You must
491          * enter the private key that matches the certificate you are importing.</p> </li>
492          * <li> <p>The private key must be unencrypted. You cannot import a private key
493          * that is protected by a password or a passphrase.</p> </li> <li> <p>The private
494          * key must be no larger than 5 KB (5,120 bytes).</p> </li> <li> <p>If the
495          * certificate you are importing is not self-signed, you must enter its certificate
496          * chain.</p> </li> <li> <p>If a certificate chain is included, the issuer must be
497          * the subject of one of the certificates in the chain.</p> </li> <li> <p>The
498          * certificate, private key, and certificate chain must be PEM-encoded.</p> </li>
499          * <li> <p>The current time must be between the <code>Not Before</code> and
500          * <code>Not After</code> certificate fields.</p> </li> <li> <p>The
501          * <code>Issuer</code> field must not be empty.</p> </li> <li> <p>The OCSP
502          * authority URL, if present, must not exceed 1000 characters.</p> </li> <li> <p>To
503          * import a new certificate, omit the <code>CertificateArn</code> argument. Include
504          * this argument only when you want to replace a previously imported
505          * certificate.</p> </li> <li> <p>When you import a certificate by using the CLI,
506          * you must specify the certificate, the certificate chain, and the private key by
507          * their file names preceded by <code>fileb://</code>. For example, you can specify
508          * a certificate saved in the <code>C:\temp</code> folder as
509          * <code>fileb://C:\temp\certificate_to_import.pem</code>. If you are making an
510          * HTTP or HTTPS Query request, include these arguments as BLOBs. </p> </li> <li>
511          * <p>When you import a certificate by using an SDK, you must specify the
512          * certificate, the certificate chain, and the private key files in the manner
513          * required by the programming language you're using. </p> </li> <li> <p>The
514          * cryptographic algorithm of an imported certificate must match the algorithm of
515          * the signing CA. For example, if the signing CA key type is RSA, then the
516          * certificate key type must also be RSA.</p> </li> </ul> <p>This operation returns
517          * the <a
518          * href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon
519          * Resource Name (ARN)</a> of the imported certificate.</p><p><h3>See Also:</h3>
520          * <a
521          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ImportCertificate">AWS
522          * API Reference</a></p>
523          *
524          * returns a future to the operation so that it can be executed in parallel to other requests.
525          */
526         virtual Model::ImportCertificateOutcomeCallable ImportCertificateCallable(const Model::ImportCertificateRequest& request) const;
527 
528         /**
529          * <p>Imports a certificate into Amazon Web Services Certificate Manager (ACM) to
530          * use with services that are integrated with ACM. Note that <a
531          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-services.html">integrated
532          * services</a> allow only certificate types and keys they support to be associated
533          * with their resources. Further, their support differs depending on whether the
534          * certificate is imported into IAM or into ACM. For more information, see the
535          * documentation for each service. For more information about importing
536          * certificates into ACM, see <a
537          * href="https://docs.aws.amazon.com/acm/latest/userguide/import-certificate.html">Importing
538          * Certificates</a> in the <i>Amazon Web Services Certificate Manager User
539          * Guide</i>. </p>  <p>ACM does not provide <a
540          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-renewal.html">managed
541          * renewal</a> for certificates that you import.</p>  <p>Note the following
542          * guidelines when importing third party certificates:</p> <ul> <li> <p>You must
543          * enter the private key that matches the certificate you are importing.</p> </li>
544          * <li> <p>The private key must be unencrypted. You cannot import a private key
545          * that is protected by a password or a passphrase.</p> </li> <li> <p>The private
546          * key must be no larger than 5 KB (5,120 bytes).</p> </li> <li> <p>If the
547          * certificate you are importing is not self-signed, you must enter its certificate
548          * chain.</p> </li> <li> <p>If a certificate chain is included, the issuer must be
549          * the subject of one of the certificates in the chain.</p> </li> <li> <p>The
550          * certificate, private key, and certificate chain must be PEM-encoded.</p> </li>
551          * <li> <p>The current time must be between the <code>Not Before</code> and
552          * <code>Not After</code> certificate fields.</p> </li> <li> <p>The
553          * <code>Issuer</code> field must not be empty.</p> </li> <li> <p>The OCSP
554          * authority URL, if present, must not exceed 1000 characters.</p> </li> <li> <p>To
555          * import a new certificate, omit the <code>CertificateArn</code> argument. Include
556          * this argument only when you want to replace a previously imported
557          * certificate.</p> </li> <li> <p>When you import a certificate by using the CLI,
558          * you must specify the certificate, the certificate chain, and the private key by
559          * their file names preceded by <code>fileb://</code>. For example, you can specify
560          * a certificate saved in the <code>C:\temp</code> folder as
561          * <code>fileb://C:\temp\certificate_to_import.pem</code>. If you are making an
562          * HTTP or HTTPS Query request, include these arguments as BLOBs. </p> </li> <li>
563          * <p>When you import a certificate by using an SDK, you must specify the
564          * certificate, the certificate chain, and the private key files in the manner
565          * required by the programming language you're using. </p> </li> <li> <p>The
566          * cryptographic algorithm of an imported certificate must match the algorithm of
567          * the signing CA. For example, if the signing CA key type is RSA, then the
568          * certificate key type must also be RSA.</p> </li> </ul> <p>This operation returns
569          * the <a
570          * href="https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html">Amazon
571          * Resource Name (ARN)</a> of the imported certificate.</p><p><h3>See Also:</h3>
572          * <a
573          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ImportCertificate">AWS
574          * API Reference</a></p>
575          *
576          * Queues the request into a thread executor and triggers associated callback when operation has finished.
577          */
578         virtual void ImportCertificateAsync(const Model::ImportCertificateRequest& request, const ImportCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
579 
580         /**
581          * <p>Retrieves a list of certificate ARNs and domain names. You can request that
582          * only certificates that match a specific status be listed. You can also filter by
583          * specific attributes of the certificate. Default filtering returns only
584          * <code>RSA_2048</code> certificates. For more information, see
585          * <a>Filters</a>.</p><p><h3>See Also:</h3>   <a
586          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListCertificates">AWS
587          * API Reference</a></p>
588          */
589         virtual Model::ListCertificatesOutcome ListCertificates(const Model::ListCertificatesRequest& request) const;
590 
591         /**
592          * <p>Retrieves a list of certificate ARNs and domain names. You can request that
593          * only certificates that match a specific status be listed. You can also filter by
594          * specific attributes of the certificate. Default filtering returns only
595          * <code>RSA_2048</code> certificates. For more information, see
596          * <a>Filters</a>.</p><p><h3>See Also:</h3>   <a
597          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListCertificates">AWS
598          * API Reference</a></p>
599          *
600          * returns a future to the operation so that it can be executed in parallel to other requests.
601          */
602         virtual Model::ListCertificatesOutcomeCallable ListCertificatesCallable(const Model::ListCertificatesRequest& request) const;
603 
604         /**
605          * <p>Retrieves a list of certificate ARNs and domain names. You can request that
606          * only certificates that match a specific status be listed. You can also filter by
607          * specific attributes of the certificate. Default filtering returns only
608          * <code>RSA_2048</code> certificates. For more information, see
609          * <a>Filters</a>.</p><p><h3>See Also:</h3>   <a
610          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListCertificates">AWS
611          * API Reference</a></p>
612          *
613          * Queues the request into a thread executor and triggers associated callback when operation has finished.
614          */
615         virtual void ListCertificatesAsync(const Model::ListCertificatesRequest& request, const ListCertificatesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
616 
617         /**
618          * <p>Lists the tags that have been applied to the ACM certificate. Use the
619          * certificate's Amazon Resource Name (ARN) to specify the certificate. To add a
620          * tag to an ACM certificate, use the <a>AddTagsToCertificate</a> action. To delete
621          * a tag, use the <a>RemoveTagsFromCertificate</a> action. </p><p><h3>See
622          * Also:</h3>   <a
623          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListTagsForCertificate">AWS
624          * API Reference</a></p>
625          */
626         virtual Model::ListTagsForCertificateOutcome ListTagsForCertificate(const Model::ListTagsForCertificateRequest& request) const;
627 
628         /**
629          * <p>Lists the tags that have been applied to the ACM certificate. Use the
630          * certificate's Amazon Resource Name (ARN) to specify the certificate. To add a
631          * tag to an ACM certificate, use the <a>AddTagsToCertificate</a> action. To delete
632          * a tag, use the <a>RemoveTagsFromCertificate</a> action. </p><p><h3>See
633          * Also:</h3>   <a
634          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListTagsForCertificate">AWS
635          * API Reference</a></p>
636          *
637          * returns a future to the operation so that it can be executed in parallel to other requests.
638          */
639         virtual Model::ListTagsForCertificateOutcomeCallable ListTagsForCertificateCallable(const Model::ListTagsForCertificateRequest& request) const;
640 
641         /**
642          * <p>Lists the tags that have been applied to the ACM certificate. Use the
643          * certificate's Amazon Resource Name (ARN) to specify the certificate. To add a
644          * tag to an ACM certificate, use the <a>AddTagsToCertificate</a> action. To delete
645          * a tag, use the <a>RemoveTagsFromCertificate</a> action. </p><p><h3>See
646          * Also:</h3>   <a
647          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ListTagsForCertificate">AWS
648          * API Reference</a></p>
649          *
650          * Queues the request into a thread executor and triggers associated callback when operation has finished.
651          */
652         virtual void ListTagsForCertificateAsync(const Model::ListTagsForCertificateRequest& request, const ListTagsForCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
653 
654         /**
655          * <p>Adds or modifies account-level configurations in ACM. </p> <p>The supported
656          * configuration option is <code>DaysBeforeExpiry</code>. This option specifies the
657          * number of days prior to certificate expiration when ACM starts generating
658          * <code>EventBridge</code> events. ACM sends one event per day per certificate
659          * until the certificate expires. By default, accounts receive events starting 45
660          * days before certificate expiration.</p><p><h3>See Also:</h3>   <a
661          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/PutAccountConfiguration">AWS
662          * API Reference</a></p>
663          */
664         virtual Model::PutAccountConfigurationOutcome PutAccountConfiguration(const Model::PutAccountConfigurationRequest& request) const;
665 
666         /**
667          * <p>Adds or modifies account-level configurations in ACM. </p> <p>The supported
668          * configuration option is <code>DaysBeforeExpiry</code>. This option specifies the
669          * number of days prior to certificate expiration when ACM starts generating
670          * <code>EventBridge</code> events. ACM sends one event per day per certificate
671          * until the certificate expires. By default, accounts receive events starting 45
672          * days before certificate expiration.</p><p><h3>See Also:</h3>   <a
673          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/PutAccountConfiguration">AWS
674          * API Reference</a></p>
675          *
676          * returns a future to the operation so that it can be executed in parallel to other requests.
677          */
678         virtual Model::PutAccountConfigurationOutcomeCallable PutAccountConfigurationCallable(const Model::PutAccountConfigurationRequest& request) const;
679 
680         /**
681          * <p>Adds or modifies account-level configurations in ACM. </p> <p>The supported
682          * configuration option is <code>DaysBeforeExpiry</code>. This option specifies the
683          * number of days prior to certificate expiration when ACM starts generating
684          * <code>EventBridge</code> events. ACM sends one event per day per certificate
685          * until the certificate expires. By default, accounts receive events starting 45
686          * days before certificate expiration.</p><p><h3>See Also:</h3>   <a
687          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/PutAccountConfiguration">AWS
688          * API Reference</a></p>
689          *
690          * Queues the request into a thread executor and triggers associated callback when operation has finished.
691          */
692         virtual void PutAccountConfigurationAsync(const Model::PutAccountConfigurationRequest& request, const PutAccountConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
693 
694         /**
695          * <p>Remove one or more tags from an ACM certificate. A tag consists of a
696          * key-value pair. If you do not specify the value portion of the tag when calling
697          * this function, the tag will be removed regardless of value. If you specify a
698          * value, the tag is removed only if it is associated with the specified value.
699          * </p> <p>To add tags to a certificate, use the <a>AddTagsToCertificate</a>
700          * action. To view all of the tags that have been applied to a specific ACM
701          * certificate, use the <a>ListTagsForCertificate</a> action. </p><p><h3>See
702          * Also:</h3>   <a
703          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RemoveTagsFromCertificate">AWS
704          * API Reference</a></p>
705          */
706         virtual Model::RemoveTagsFromCertificateOutcome RemoveTagsFromCertificate(const Model::RemoveTagsFromCertificateRequest& request) const;
707 
708         /**
709          * <p>Remove one or more tags from an ACM certificate. A tag consists of a
710          * key-value pair. If you do not specify the value portion of the tag when calling
711          * this function, the tag will be removed regardless of value. If you specify a
712          * value, the tag is removed only if it is associated with the specified value.
713          * </p> <p>To add tags to a certificate, use the <a>AddTagsToCertificate</a>
714          * action. To view all of the tags that have been applied to a specific ACM
715          * certificate, use the <a>ListTagsForCertificate</a> action. </p><p><h3>See
716          * Also:</h3>   <a
717          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RemoveTagsFromCertificate">AWS
718          * API Reference</a></p>
719          *
720          * returns a future to the operation so that it can be executed in parallel to other requests.
721          */
722         virtual Model::RemoveTagsFromCertificateOutcomeCallable RemoveTagsFromCertificateCallable(const Model::RemoveTagsFromCertificateRequest& request) const;
723 
724         /**
725          * <p>Remove one or more tags from an ACM certificate. A tag consists of a
726          * key-value pair. If you do not specify the value portion of the tag when calling
727          * this function, the tag will be removed regardless of value. If you specify a
728          * value, the tag is removed only if it is associated with the specified value.
729          * </p> <p>To add tags to a certificate, use the <a>AddTagsToCertificate</a>
730          * action. To view all of the tags that have been applied to a specific ACM
731          * certificate, use the <a>ListTagsForCertificate</a> action. </p><p><h3>See
732          * Also:</h3>   <a
733          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RemoveTagsFromCertificate">AWS
734          * API Reference</a></p>
735          *
736          * Queues the request into a thread executor and triggers associated callback when operation has finished.
737          */
738         virtual void RemoveTagsFromCertificateAsync(const Model::RemoveTagsFromCertificateRequest& request, const RemoveTagsFromCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
739 
740         /**
741          * <p>Renews an eligible ACM certificate. At this time, only exported private
742          * certificates can be renewed with this operation. In order to renew your ACM PCA
743          * certificates with ACM, you must first <a
744          * href="https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaPermissions.html">grant
745          * the ACM service principal permission to do so</a>. For more information, see <a
746          * href="https://docs.aws.amazon.com/acm/latest/userguide/manual-renewal.html">Testing
747          * Managed Renewal</a> in the ACM User Guide.</p><p><h3>See Also:</h3>   <a
748          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RenewCertificate">AWS
749          * API Reference</a></p>
750          */
751         virtual Model::RenewCertificateOutcome RenewCertificate(const Model::RenewCertificateRequest& request) const;
752 
753         /**
754          * <p>Renews an eligible ACM certificate. At this time, only exported private
755          * certificates can be renewed with this operation. In order to renew your ACM PCA
756          * certificates with ACM, you must first <a
757          * href="https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaPermissions.html">grant
758          * the ACM service principal permission to do so</a>. For more information, see <a
759          * href="https://docs.aws.amazon.com/acm/latest/userguide/manual-renewal.html">Testing
760          * Managed Renewal</a> in the ACM User Guide.</p><p><h3>See Also:</h3>   <a
761          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RenewCertificate">AWS
762          * API Reference</a></p>
763          *
764          * returns a future to the operation so that it can be executed in parallel to other requests.
765          */
766         virtual Model::RenewCertificateOutcomeCallable RenewCertificateCallable(const Model::RenewCertificateRequest& request) const;
767 
768         /**
769          * <p>Renews an eligible ACM certificate. At this time, only exported private
770          * certificates can be renewed with this operation. In order to renew your ACM PCA
771          * certificates with ACM, you must first <a
772          * href="https://docs.aws.amazon.com/acm-pca/latest/userguide/PcaPermissions.html">grant
773          * the ACM service principal permission to do so</a>. For more information, see <a
774          * href="https://docs.aws.amazon.com/acm/latest/userguide/manual-renewal.html">Testing
775          * Managed Renewal</a> in the ACM User Guide.</p><p><h3>See Also:</h3>   <a
776          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RenewCertificate">AWS
777          * API Reference</a></p>
778          *
779          * Queues the request into a thread executor and triggers associated callback when operation has finished.
780          */
781         virtual void RenewCertificateAsync(const Model::RenewCertificateRequest& request, const RenewCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
782 
783         /**
784          * <p>Requests an ACM certificate for use with other Amazon Web Services services.
785          * To request an ACM certificate, you must specify a fully qualified domain name
786          * (FQDN) in the <code>DomainName</code> parameter. You can also specify additional
787          * FQDNs in the <code>SubjectAlternativeNames</code> parameter. </p> <p>If you are
788          * requesting a private certificate, domain validation is not required. If you are
789          * requesting a public certificate, each domain name that you specify must be
790          * validated to verify that you own or control the domain. You can use <a
791          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html">DNS
792          * validation</a> or <a
793          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html">email
794          * validation</a>. We recommend that you use DNS validation. ACM issues public
795          * certificates after receiving approval from the domain owner. </p>  <p>ACM
796          * behavior differs from the <a
797          * href="https://tools.ietf.org/html/rfc6125#appendix-B.2">https://tools.ietf.org/html/rfc6125#appendix-B.2</a>RFC
798          * 6125 specification of the certificate validation process. first checks for a
799          * subject alternative name, and, if it finds one, ignores the common name (CN)</p>
800          * <p><h3>See Also:</h3>   <a
801          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RequestCertificate">AWS
802          * API Reference</a></p>
803          */
804         virtual Model::RequestCertificateOutcome RequestCertificate(const Model::RequestCertificateRequest& request) const;
805 
806         /**
807          * <p>Requests an ACM certificate for use with other Amazon Web Services services.
808          * To request an ACM certificate, you must specify a fully qualified domain name
809          * (FQDN) in the <code>DomainName</code> parameter. You can also specify additional
810          * FQDNs in the <code>SubjectAlternativeNames</code> parameter. </p> <p>If you are
811          * requesting a private certificate, domain validation is not required. If you are
812          * requesting a public certificate, each domain name that you specify must be
813          * validated to verify that you own or control the domain. You can use <a
814          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html">DNS
815          * validation</a> or <a
816          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html">email
817          * validation</a>. We recommend that you use DNS validation. ACM issues public
818          * certificates after receiving approval from the domain owner. </p>  <p>ACM
819          * behavior differs from the <a
820          * href="https://tools.ietf.org/html/rfc6125#appendix-B.2">https://tools.ietf.org/html/rfc6125#appendix-B.2</a>RFC
821          * 6125 specification of the certificate validation process. first checks for a
822          * subject alternative name, and, if it finds one, ignores the common name (CN)</p>
823          * <p><h3>See Also:</h3>   <a
824          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RequestCertificate">AWS
825          * API Reference</a></p>
826          *
827          * returns a future to the operation so that it can be executed in parallel to other requests.
828          */
829         virtual Model::RequestCertificateOutcomeCallable RequestCertificateCallable(const Model::RequestCertificateRequest& request) const;
830 
831         /**
832          * <p>Requests an ACM certificate for use with other Amazon Web Services services.
833          * To request an ACM certificate, you must specify a fully qualified domain name
834          * (FQDN) in the <code>DomainName</code> parameter. You can also specify additional
835          * FQDNs in the <code>SubjectAlternativeNames</code> parameter. </p> <p>If you are
836          * requesting a private certificate, domain validation is not required. If you are
837          * requesting a public certificate, each domain name that you specify must be
838          * validated to verify that you own or control the domain. You can use <a
839          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-dns.html">DNS
840          * validation</a> or <a
841          * href="https://docs.aws.amazon.com/acm/latest/userguide/gs-acm-validate-email.html">email
842          * validation</a>. We recommend that you use DNS validation. ACM issues public
843          * certificates after receiving approval from the domain owner. </p>  <p>ACM
844          * behavior differs from the <a
845          * href="https://tools.ietf.org/html/rfc6125#appendix-B.2">https://tools.ietf.org/html/rfc6125#appendix-B.2</a>RFC
846          * 6125 specification of the certificate validation process. first checks for a
847          * subject alternative name, and, if it finds one, ignores the common name (CN)</p>
848          * <p><h3>See Also:</h3>   <a
849          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/RequestCertificate">AWS
850          * API Reference</a></p>
851          *
852          * Queues the request into a thread executor and triggers associated callback when operation has finished.
853          */
854         virtual void RequestCertificateAsync(const Model::RequestCertificateRequest& request, const RequestCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
855 
856         /**
857          * <p>Resends the email that requests domain ownership validation. The domain owner
858          * or an authorized representative must approve the ACM certificate before it can
859          * be issued. The certificate can be approved by clicking a link in the mail to
860          * navigate to the Amazon certificate approval website and then clicking <b>I
861          * Approve</b>. However, the validation email can be blocked by spam filters.
862          * Therefore, if you do not receive the original mail, you can request that the
863          * mail be resent within 72 hours of requesting the ACM certificate. If more than
864          * 72 hours have elapsed since your original request or since your last attempt to
865          * resend validation mail, you must request a new certificate. For more information
866          * about setting up your contact email addresses, see <a
867          * href="https://docs.aws.amazon.com/acm/latest/userguide/setup-email.html">Configure
868          * Email for your Domain</a>. </p><p><h3>See Also:</h3>   <a
869          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ResendValidationEmail">AWS
870          * API Reference</a></p>
871          */
872         virtual Model::ResendValidationEmailOutcome ResendValidationEmail(const Model::ResendValidationEmailRequest& request) const;
873 
874         /**
875          * <p>Resends the email that requests domain ownership validation. The domain owner
876          * or an authorized representative must approve the ACM certificate before it can
877          * be issued. The certificate can be approved by clicking a link in the mail to
878          * navigate to the Amazon certificate approval website and then clicking <b>I
879          * Approve</b>. However, the validation email can be blocked by spam filters.
880          * Therefore, if you do not receive the original mail, you can request that the
881          * mail be resent within 72 hours of requesting the ACM certificate. If more than
882          * 72 hours have elapsed since your original request or since your last attempt to
883          * resend validation mail, you must request a new certificate. For more information
884          * about setting up your contact email addresses, see <a
885          * href="https://docs.aws.amazon.com/acm/latest/userguide/setup-email.html">Configure
886          * Email for your Domain</a>. </p><p><h3>See Also:</h3>   <a
887          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ResendValidationEmail">AWS
888          * API Reference</a></p>
889          *
890          * returns a future to the operation so that it can be executed in parallel to other requests.
891          */
892         virtual Model::ResendValidationEmailOutcomeCallable ResendValidationEmailCallable(const Model::ResendValidationEmailRequest& request) const;
893 
894         /**
895          * <p>Resends the email that requests domain ownership validation. The domain owner
896          * or an authorized representative must approve the ACM certificate before it can
897          * be issued. The certificate can be approved by clicking a link in the mail to
898          * navigate to the Amazon certificate approval website and then clicking <b>I
899          * Approve</b>. However, the validation email can be blocked by spam filters.
900          * Therefore, if you do not receive the original mail, you can request that the
901          * mail be resent within 72 hours of requesting the ACM certificate. If more than
902          * 72 hours have elapsed since your original request or since your last attempt to
903          * resend validation mail, you must request a new certificate. For more information
904          * about setting up your contact email addresses, see <a
905          * href="https://docs.aws.amazon.com/acm/latest/userguide/setup-email.html">Configure
906          * Email for your Domain</a>. </p><p><h3>See Also:</h3>   <a
907          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/ResendValidationEmail">AWS
908          * API Reference</a></p>
909          *
910          * Queues the request into a thread executor and triggers associated callback when operation has finished.
911          */
912         virtual void ResendValidationEmailAsync(const Model::ResendValidationEmailRequest& request, const ResendValidationEmailResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
913 
914         /**
915          * <p>Updates a certificate. Currently, you can use this function to specify
916          * whether to opt in to or out of recording your certificate in a certificate
917          * transparency log. For more information, see <a
918          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency">
919          * Opting Out of Certificate Transparency Logging</a>. </p><p><h3>See Also:</h3>
920          * <a
921          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/UpdateCertificateOptions">AWS
922          * API Reference</a></p>
923          */
924         virtual Model::UpdateCertificateOptionsOutcome UpdateCertificateOptions(const Model::UpdateCertificateOptionsRequest& request) const;
925 
926         /**
927          * <p>Updates a certificate. Currently, you can use this function to specify
928          * whether to opt in to or out of recording your certificate in a certificate
929          * transparency log. For more information, see <a
930          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency">
931          * Opting Out of Certificate Transparency Logging</a>. </p><p><h3>See Also:</h3>
932          * <a
933          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/UpdateCertificateOptions">AWS
934          * API Reference</a></p>
935          *
936          * returns a future to the operation so that it can be executed in parallel to other requests.
937          */
938         virtual Model::UpdateCertificateOptionsOutcomeCallable UpdateCertificateOptionsCallable(const Model::UpdateCertificateOptionsRequest& request) const;
939 
940         /**
941          * <p>Updates a certificate. Currently, you can use this function to specify
942          * whether to opt in to or out of recording your certificate in a certificate
943          * transparency log. For more information, see <a
944          * href="https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-transparency">
945          * Opting Out of Certificate Transparency Logging</a>. </p><p><h3>See Also:</h3>
946          * <a
947          * href="http://docs.aws.amazon.com/goto/WebAPI/acm-2015-12-08/UpdateCertificateOptions">AWS
948          * API Reference</a></p>
949          *
950          * Queues the request into a thread executor and triggers associated callback when operation has finished.
951          */
952         virtual void UpdateCertificateOptionsAsync(const Model::UpdateCertificateOptionsRequest& request, const UpdateCertificateOptionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context = nullptr) const;
953 
954 
955       void OverrideEndpoint(const Aws::String& endpoint);
956     private:
957       void init(const Aws::Client::ClientConfiguration& clientConfiguration);
958         void AddTagsToCertificateAsyncHelper(const Model::AddTagsToCertificateRequest& request, const AddTagsToCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
959         void DeleteCertificateAsyncHelper(const Model::DeleteCertificateRequest& request, const DeleteCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
960         void DescribeCertificateAsyncHelper(const Model::DescribeCertificateRequest& request, const DescribeCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
961         void ExportCertificateAsyncHelper(const Model::ExportCertificateRequest& request, const ExportCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
962         void GetAccountConfigurationAsyncHelper(const GetAccountConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
963         void GetCertificateAsyncHelper(const Model::GetCertificateRequest& request, const GetCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
964         void ImportCertificateAsyncHelper(const Model::ImportCertificateRequest& request, const ImportCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
965         void ListCertificatesAsyncHelper(const Model::ListCertificatesRequest& request, const ListCertificatesResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
966         void ListTagsForCertificateAsyncHelper(const Model::ListTagsForCertificateRequest& request, const ListTagsForCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
967         void PutAccountConfigurationAsyncHelper(const Model::PutAccountConfigurationRequest& request, const PutAccountConfigurationResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
968         void RemoveTagsFromCertificateAsyncHelper(const Model::RemoveTagsFromCertificateRequest& request, const RemoveTagsFromCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
969         void RenewCertificateAsyncHelper(const Model::RenewCertificateRequest& request, const RenewCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
970         void RequestCertificateAsyncHelper(const Model::RequestCertificateRequest& request, const RequestCertificateResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
971         void ResendValidationEmailAsyncHelper(const Model::ResendValidationEmailRequest& request, const ResendValidationEmailResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
972         void UpdateCertificateOptionsAsyncHelper(const Model::UpdateCertificateOptionsRequest& request, const UpdateCertificateOptionsResponseReceivedHandler& handler, const std::shared_ptr<const Aws::Client::AsyncCallerContext>& context) const;
973 
974       Aws::String m_uri;
975       Aws::String m_configScheme;
976       std::shared_ptr<Aws::Utils::Threading::Executor> m_executor;
977   };
978 
979 } // namespace ACM
980 } // namespace Aws
981