packages feed

amazonka-iot-1.4.1: gen/Network/AWS/IoT/RegisterCACertificate.hs

{-# 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.IoT.RegisterCACertificate
-- 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)
--
-- Registers a CA certificate with AWS IoT. This CA certificate can then be
-- used to sign device certificates, which can be then registered with AWS
-- IoT. You can register up to 10 CA certificates per AWS account that have
-- the same subject field and public key. This enables you to have up to 10
-- certificate authorities sign your device certificates. If you have more
-- than one CA certificate registered, make sure you pass the CA
-- certificate when you register your device certificates with the
-- RegisterCertificate API.
module Network.AWS.IoT.RegisterCACertificate
    (
    -- * Creating a Request
      registerCACertificate
    , RegisterCACertificate
    -- * Request Lenses
    , rcacSetAsActive
    , rcacCaCertificate
    , rcacVerificationCertificate

    -- * Destructuring the Response
    , registerCACertificateResponse
    , RegisterCACertificateResponse
    -- * Response Lenses
    , rcacrsCertificateARN
    , rcacrsCertificateId
    , rcacrsResponseStatus
    ) where

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

-- | The input to the RegisterCACertificate operation.
--
-- /See:/ 'registerCACertificate' smart constructor.
data RegisterCACertificate = RegisterCACertificate'
    { _rcacSetAsActive             :: !(Maybe Bool)
    , _rcacCaCertificate           :: !Text
    , _rcacVerificationCertificate :: !Text
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'RegisterCACertificate' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'rcacSetAsActive'
--
-- * 'rcacCaCertificate'
--
-- * 'rcacVerificationCertificate'
registerCACertificate
    :: Text -- ^ 'rcacCaCertificate'
    -> Text -- ^ 'rcacVerificationCertificate'
    -> RegisterCACertificate
registerCACertificate pCaCertificate_ pVerificationCertificate_ =
    RegisterCACertificate'
    { _rcacSetAsActive = Nothing
    , _rcacCaCertificate = pCaCertificate_
    , _rcacVerificationCertificate = pVerificationCertificate_
    }

-- | A boolean value that specifies if the CA certificate is set to active.
rcacSetAsActive :: Lens' RegisterCACertificate (Maybe Bool)
rcacSetAsActive = lens _rcacSetAsActive (\ s a -> s{_rcacSetAsActive = a});

-- | The CA certificate.
rcacCaCertificate :: Lens' RegisterCACertificate Text
rcacCaCertificate = lens _rcacCaCertificate (\ s a -> s{_rcacCaCertificate = a});

-- | The private key verification certificate.
rcacVerificationCertificate :: Lens' RegisterCACertificate Text
rcacVerificationCertificate = lens _rcacVerificationCertificate (\ s a -> s{_rcacVerificationCertificate = a});

instance AWSRequest RegisterCACertificate where
        type Rs RegisterCACertificate =
             RegisterCACertificateResponse
        request = postJSON ioT
        response
          = receiveJSON
              (\ s h x ->
                 RegisterCACertificateResponse' <$>
                   (x .?> "certificateArn") <*> (x .?> "certificateId")
                     <*> (pure (fromEnum s)))

instance Hashable RegisterCACertificate

instance NFData RegisterCACertificate

instance ToHeaders RegisterCACertificate where
        toHeaders = const mempty

instance ToJSON RegisterCACertificate where
        toJSON RegisterCACertificate'{..}
          = object
              (catMaybes
                 [Just ("caCertificate" .= _rcacCaCertificate),
                  Just
                    ("verificationCertificate" .=
                       _rcacVerificationCertificate)])

instance ToPath RegisterCACertificate where
        toPath = const "/cacertificate"

instance ToQuery RegisterCACertificate where
        toQuery RegisterCACertificate'{..}
          = mconcat ["setAsActive" =: _rcacSetAsActive]

-- | The output from the RegisterCACertificateResponse operation.
--
-- /See:/ 'registerCACertificateResponse' smart constructor.
data RegisterCACertificateResponse = RegisterCACertificateResponse'
    { _rcacrsCertificateARN :: !(Maybe Text)
    , _rcacrsCertificateId  :: !(Maybe Text)
    , _rcacrsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'RegisterCACertificateResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'rcacrsCertificateARN'
--
-- * 'rcacrsCertificateId'
--
-- * 'rcacrsResponseStatus'
registerCACertificateResponse
    :: Int -- ^ 'rcacrsResponseStatus'
    -> RegisterCACertificateResponse
registerCACertificateResponse pResponseStatus_ =
    RegisterCACertificateResponse'
    { _rcacrsCertificateARN = Nothing
    , _rcacrsCertificateId = Nothing
    , _rcacrsResponseStatus = pResponseStatus_
    }

-- | The CA certificate ARN.
rcacrsCertificateARN :: Lens' RegisterCACertificateResponse (Maybe Text)
rcacrsCertificateARN = lens _rcacrsCertificateARN (\ s a -> s{_rcacrsCertificateARN = a});

-- | The CA certificate identifier.
rcacrsCertificateId :: Lens' RegisterCACertificateResponse (Maybe Text)
rcacrsCertificateId = lens _rcacrsCertificateId (\ s a -> s{_rcacrsCertificateId = a});

-- | The response status code.
rcacrsResponseStatus :: Lens' RegisterCACertificateResponse Int
rcacrsResponseStatus = lens _rcacrsResponseStatus (\ s a -> s{_rcacrsResponseStatus = a});

instance NFData RegisterCACertificateResponse