{-# 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.IAM.GetSSHPublicKey
-- 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 the specified SSH public key, including metadata about the key.
--
-- The SSH public key retrieved by this action is used only for authenticating the associated IAM user to an AWS CodeCommit repository. For more information about using SSH keys to authenticate to an AWS CodeCommit repository, see <http://docs.aws.amazon.com/codecommit/latest/userguide/setting-up-credentials-ssh.html Set up AWS CodeCommit for SSH Connections> in the /AWS CodeCommit User Guide/.
module Network.AWS.IAM.GetSSHPublicKey
    (
    -- * Creating a Request
      getSSHPublicKey
    , GetSSHPublicKey
    -- * Request Lenses
    , gspkUserName
    , gspkSSHPublicKeyId
    , gspkEncoding

    -- * Destructuring the Response
    , getSSHPublicKeyResponse
    , GetSSHPublicKeyResponse
    -- * Response Lenses
    , gspkrsSSHPublicKey
    , gspkrsResponseStatus
    ) where

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

-- | /See:/ 'getSSHPublicKey' smart constructor.
data GetSSHPublicKey = GetSSHPublicKey'
    { _gspkUserName       :: !Text
    , _gspkSSHPublicKeyId :: !Text
    , _gspkEncoding       :: !EncodingType
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'GetSSHPublicKey' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gspkUserName'
--
-- * 'gspkSSHPublicKeyId'
--
-- * 'gspkEncoding'
getSSHPublicKey
    :: Text -- ^ 'gspkUserName'
    -> Text -- ^ 'gspkSSHPublicKeyId'
    -> EncodingType -- ^ 'gspkEncoding'
    -> GetSSHPublicKey
getSSHPublicKey pUserName_ pSSHPublicKeyId_ pEncoding_ =
    GetSSHPublicKey'
    { _gspkUserName = pUserName_
    , _gspkSSHPublicKeyId = pSSHPublicKeyId_
    , _gspkEncoding = pEncoding_
    }

-- | The name of the IAM user associated with the SSH public key.
gspkUserName :: Lens' GetSSHPublicKey Text
gspkUserName = lens _gspkUserName (\ s a -> s{_gspkUserName = a});

-- | The unique identifier for the SSH public key.
gspkSSHPublicKeyId :: Lens' GetSSHPublicKey Text
gspkSSHPublicKeyId = lens _gspkSSHPublicKeyId (\ s a -> s{_gspkSSHPublicKeyId = a});

-- | Specifies the public key encoding format to use in the response. To retrieve the public key in ssh-rsa format, use 'SSH'. To retrieve the public key in PEM format, use 'PEM'.
gspkEncoding :: Lens' GetSSHPublicKey EncodingType
gspkEncoding = lens _gspkEncoding (\ s a -> s{_gspkEncoding = a});

instance AWSRequest GetSSHPublicKey where
        type Rs GetSSHPublicKey = GetSSHPublicKeyResponse
        request = postQuery iam
        response
          = receiveXMLWrapper "GetSSHPublicKeyResult"
              (\ s h x ->
                 GetSSHPublicKeyResponse' <$>
                   (x .@? "SSHPublicKey") <*> (pure (fromEnum s)))

instance Hashable GetSSHPublicKey

instance NFData GetSSHPublicKey

instance ToHeaders GetSSHPublicKey where
        toHeaders = const mempty

instance ToPath GetSSHPublicKey where
        toPath = const "/"

instance ToQuery GetSSHPublicKey where
        toQuery GetSSHPublicKey'{..}
          = mconcat
              ["Action" =: ("GetSSHPublicKey" :: ByteString),
               "Version" =: ("2010-05-08" :: ByteString),
               "UserName" =: _gspkUserName,
               "SSHPublicKeyId" =: _gspkSSHPublicKeyId,
               "Encoding" =: _gspkEncoding]

-- | Contains the response to a successful < GetSSHPublicKey> request.
--
-- /See:/ 'getSSHPublicKeyResponse' smart constructor.
data GetSSHPublicKeyResponse = GetSSHPublicKeyResponse'
    { _gspkrsSSHPublicKey   :: !(Maybe SSHPublicKey)
    , _gspkrsResponseStatus :: !Int
    } deriving (Eq,Read,Show,Data,Typeable,Generic)

-- | Creates a value of 'GetSSHPublicKeyResponse' with the minimum fields required to make a request.
--
-- Use one of the following lenses to modify other fields as desired:
--
-- * 'gspkrsSSHPublicKey'
--
-- * 'gspkrsResponseStatus'
getSSHPublicKeyResponse
    :: Int -- ^ 'gspkrsResponseStatus'
    -> GetSSHPublicKeyResponse
getSSHPublicKeyResponse pResponseStatus_ =
    GetSSHPublicKeyResponse'
    { _gspkrsSSHPublicKey = Nothing
    , _gspkrsResponseStatus = pResponseStatus_
    }

-- | Information about the SSH public key.
gspkrsSSHPublicKey :: Lens' GetSSHPublicKeyResponse (Maybe SSHPublicKey)
gspkrsSSHPublicKey = lens _gspkrsSSHPublicKey (\ s a -> s{_gspkrsSSHPublicKey = a});

-- | The response status code.
gspkrsResponseStatus :: Lens' GetSSHPublicKeyResponse Int
gspkrsResponseStatus = lens _gspkrsResponseStatus (\ s a -> s{_gspkrsResponseStatus = a});

instance NFData GetSSHPublicKeyResponse