{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveGeneric      #-}
{-# LANGUAGE OverloadedStrings  #-}
{-# LANGUAGE RecordWildCards    #-}
{-# LANGUAGE TypeFamilies       #-}

{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-binds   #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Network.AWS.CertificateManager.GetCertificate
-- Copyright   : (c) 2013-2016 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay <brendan.g.hay@gmail.com>
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves an ACM Certificate and certificate chain for the certificate specified by an ARN. The chain is an ordered list of certificates that contains the root certificate, intermediate certificates of subordinate CAs, and the ACM Certificate. The certificate and certificate chain are base64 encoded. If you want to decode the certificate chain to see the individual certificate fields, you can use OpenSSL.
--
--
module Network.AWS.CertificateManager.GetCertificate
    (
    -- * Creating a Request
      getCertificate
    , GetCertificate
    -- * Request Lenses
    , gcCertificateARN

    -- * Destructuring the Response
    , getCertificateResponse
    , GetCertificateResponse
    -- * Response Lenses
    , gcrsCertificate
    , gcrsCertificateChain
    , gcrsResponseStatus
    ) where

import           Network.AWS.CertificateManager.Types
import           Network.AWS.CertificateManager.Types.Product
import           Network.AWS.Lens
import           Network.AWS.Prelude
import           Network.AWS.Request
import           Network.AWS.Response

-- | /See:/ 'getCertificate' smart constructor.
newtype GetCertificate = GetCertificate'
    { _gcCertificateARN :: Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'GetCertificate' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gcCertificateARN' - String that contains a certificate ARN in the following format: @arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012@  For more information about ARNs, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
getCertificate
    :: Text -- ^ 'gcCertificateARN'
    -> GetCertificate
getCertificate pCertificateARN_ =
    GetCertificate'
    { _gcCertificateARN = pCertificateARN_
    }

-- | String that contains a certificate ARN in the following format: @arn:aws:acm:region:123456789012:certificate/12345678-1234-1234-1234-123456789012@  For more information about ARNs, see <http://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Amazon Resource Names (ARNs) and AWS Service Namespaces> .
gcCertificateARN :: Lens' GetCertificate Text
gcCertificateARN = lens _gcCertificateARN (\ s a -> s{_gcCertificateARN = a});

instance AWSRequest GetCertificate where
        type Rs GetCertificate = GetCertificateResponse
        request = postJSON certificateManager
        response
          = receiveJSON
              (\ s h x ->
                 GetCertificateResponse' <$>
                   (x .?> "Certificate") <*> (x .?> "CertificateChain")
                     <*> (pure (fromEnum s)))

instance Hashable GetCertificate

instance NFData GetCertificate

instance ToHeaders GetCertificate where
        toHeaders
          = const
              (mconcat
                 ["X-Amz-Target" =#
                    ("CertificateManager.GetCertificate" :: ByteString),
                  "Content-Type" =#
                    ("application/x-amz-json-1.1" :: ByteString)])

instance ToJSON GetCertificate where
        toJSON GetCertificate'{..}
          = object
              (catMaybes
                 [Just ("CertificateArn" .= _gcCertificateARN)])

instance ToPath GetCertificate where
        toPath = const "/"

instance ToQuery GetCertificate where
        toQuery = const mempty

-- | /See:/ 'getCertificateResponse' smart constructor.
data GetCertificateResponse = GetCertificateResponse'
    { _gcrsCertificate      :: !(Maybe Text)
    , _gcrsCertificateChain :: !(Maybe Text)
    , _gcrsResponseStatus   :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'GetCertificateResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gcrsCertificate' - String that contains the ACM Certificate represented by the ARN specified at input.
--
-- * 'gcrsCertificateChain' - The certificate chain that contains the root certificate issued by the certificate authority (CA).
--
-- * 'gcrsResponseStatus' - -- | The response status code.
getCertificateResponse
    :: Int -- ^ 'gcrsResponseStatus'
    -> GetCertificateResponse
getCertificateResponse pResponseStatus_ =
    GetCertificateResponse'
    { _gcrsCertificate = Nothing
    , _gcrsCertificateChain = Nothing
    , _gcrsResponseStatus = pResponseStatus_
    }

-- | String that contains the ACM Certificate represented by the ARN specified at input.
gcrsCertificate :: Lens' GetCertificateResponse (Maybe Text)
gcrsCertificate = lens _gcrsCertificate (\ s a -> s{_gcrsCertificate = a});

-- | The certificate chain that contains the root certificate issued by the certificate authority (CA).
gcrsCertificateChain :: Lens' GetCertificateResponse (Maybe Text)
gcrsCertificateChain = lens _gcrsCertificateChain (\ s a -> s{_gcrsCertificateChain = a});

-- | -- | The response status code.
gcrsResponseStatus :: Lens' GetCertificateResponse Int
gcrsResponseStatus = lens _gcrsResponseStatus (\ s a -> s{_gcrsResponseStatus = a});

instance NFData GetCertificateResponse