{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

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

-- |
-- Module      : Amazonka.EC2.Types.KeyPairInfo
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.EC2.Types.KeyPairInfo where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.EC2.Internal
import Amazonka.EC2.Types.KeyType
import Amazonka.EC2.Types.Tag
import qualified Amazonka.Prelude as Prelude

-- | Describes a key pair.
--
-- /See:/ 'newKeyPairInfo' smart constructor.
data KeyPairInfo = KeyPairInfo'
  { -- | If you used Amazon EC2 to create the key pair, this is the date and time
    -- when the key was created, in
    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
    -- in the UTC time zone.
    --
    -- If you imported an existing key pair to Amazon EC2, this is the date and
    -- time the key was imported, in
    -- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
    -- in the UTC time zone.
    KeyPairInfo -> Maybe ISO8601
createTime :: Prelude.Maybe Data.ISO8601,
    -- | If you used CreateKeyPair to create the key pair:
    --
    -- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
    --     DER encoded private key.
    --
    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
    --     SHA-256 digest, which is the default for OpenSSH, starting with
    --     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
    --
    -- If you used ImportKeyPair to provide Amazon Web Services the public key:
    --
    -- -   For RSA key pairs, the key fingerprint is the MD5 public key
    --     fingerprint as specified in section 4 of RFC4716.
    --
    -- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
    --     SHA-256 digest, which is the default for OpenSSH, starting with
    --     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
    KeyPairInfo -> Maybe Text
keyFingerprint :: Prelude.Maybe Prelude.Text,
    -- | The name of the key pair.
    KeyPairInfo -> Maybe Text
keyName :: Prelude.Maybe Prelude.Text,
    -- | The ID of the key pair.
    KeyPairInfo -> Maybe Text
keyPairId :: Prelude.Maybe Prelude.Text,
    -- | The type of key pair.
    KeyPairInfo -> Maybe KeyType
keyType :: Prelude.Maybe KeyType,
    -- | The public key material.
    KeyPairInfo -> Maybe Text
publicKey :: Prelude.Maybe Prelude.Text,
    -- | Any tags applied to the key pair.
    KeyPairInfo -> Maybe [Tag]
tags :: Prelude.Maybe [Tag]
  }
  deriving (KeyPairInfo -> KeyPairInfo -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: KeyPairInfo -> KeyPairInfo -> Bool
$c/= :: KeyPairInfo -> KeyPairInfo -> Bool
== :: KeyPairInfo -> KeyPairInfo -> Bool
$c== :: KeyPairInfo -> KeyPairInfo -> Bool
Prelude.Eq, ReadPrec [KeyPairInfo]
ReadPrec KeyPairInfo
Int -> ReadS KeyPairInfo
ReadS [KeyPairInfo]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [KeyPairInfo]
$creadListPrec :: ReadPrec [KeyPairInfo]
readPrec :: ReadPrec KeyPairInfo
$creadPrec :: ReadPrec KeyPairInfo
readList :: ReadS [KeyPairInfo]
$creadList :: ReadS [KeyPairInfo]
readsPrec :: Int -> ReadS KeyPairInfo
$creadsPrec :: Int -> ReadS KeyPairInfo
Prelude.Read, Int -> KeyPairInfo -> ShowS
[KeyPairInfo] -> ShowS
KeyPairInfo -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [KeyPairInfo] -> ShowS
$cshowList :: [KeyPairInfo] -> ShowS
show :: KeyPairInfo -> String
$cshow :: KeyPairInfo -> String
showsPrec :: Int -> KeyPairInfo -> ShowS
$cshowsPrec :: Int -> KeyPairInfo -> ShowS
Prelude.Show, forall x. Rep KeyPairInfo x -> KeyPairInfo
forall x. KeyPairInfo -> Rep KeyPairInfo x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep KeyPairInfo x -> KeyPairInfo
$cfrom :: forall x. KeyPairInfo -> Rep KeyPairInfo x
Prelude.Generic)

-- |
-- Create a value of 'KeyPairInfo' with all optional fields omitted.
--
-- Use <https://hackage.haskell.org/package/generic-lens generic-lens> or <https://hackage.haskell.org/package/optics optics> to modify other optional fields.
--
-- The following record fields are available, with the corresponding lenses provided
-- for backwards compatibility:
--
-- 'createTime', 'keyPairInfo_createTime' - If you used Amazon EC2 to create the key pair, this is the date and time
-- when the key was created, in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
-- in the UTC time zone.
--
-- If you imported an existing key pair to Amazon EC2, this is the date and
-- time the key was imported, in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
-- in the UTC time zone.
--
-- 'keyFingerprint', 'keyPairInfo_keyFingerprint' - If you used CreateKeyPair to create the key pair:
--
-- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
--     DER encoded private key.
--
-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
--     SHA-256 digest, which is the default for OpenSSH, starting with
--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
--
-- If you used ImportKeyPair to provide Amazon Web Services the public key:
--
-- -   For RSA key pairs, the key fingerprint is the MD5 public key
--     fingerprint as specified in section 4 of RFC4716.
--
-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
--     SHA-256 digest, which is the default for OpenSSH, starting with
--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
--
-- 'keyName', 'keyPairInfo_keyName' - The name of the key pair.
--
-- 'keyPairId', 'keyPairInfo_keyPairId' - The ID of the key pair.
--
-- 'keyType', 'keyPairInfo_keyType' - The type of key pair.
--
-- 'publicKey', 'keyPairInfo_publicKey' - The public key material.
--
-- 'tags', 'keyPairInfo_tags' - Any tags applied to the key pair.
newKeyPairInfo ::
  KeyPairInfo
newKeyPairInfo :: KeyPairInfo
newKeyPairInfo =
  KeyPairInfo'
    { $sel:createTime:KeyPairInfo' :: Maybe ISO8601
createTime = forall a. Maybe a
Prelude.Nothing,
      $sel:keyFingerprint:KeyPairInfo' :: Maybe Text
keyFingerprint = forall a. Maybe a
Prelude.Nothing,
      $sel:keyName:KeyPairInfo' :: Maybe Text
keyName = forall a. Maybe a
Prelude.Nothing,
      $sel:keyPairId:KeyPairInfo' :: Maybe Text
keyPairId = forall a. Maybe a
Prelude.Nothing,
      $sel:keyType:KeyPairInfo' :: Maybe KeyType
keyType = forall a. Maybe a
Prelude.Nothing,
      $sel:publicKey:KeyPairInfo' :: Maybe Text
publicKey = forall a. Maybe a
Prelude.Nothing,
      $sel:tags:KeyPairInfo' :: Maybe [Tag]
tags = forall a. Maybe a
Prelude.Nothing
    }

-- | If you used Amazon EC2 to create the key pair, this is the date and time
-- when the key was created, in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
-- in the UTC time zone.
--
-- If you imported an existing key pair to Amazon EC2, this is the date and
-- time the key was imported, in
-- <https://www.iso.org/iso-8601-date-and-time-format.html ISO 8601 date-time format>,
-- in the UTC time zone.
keyPairInfo_createTime :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.UTCTime)
keyPairInfo_createTime :: Lens' KeyPairInfo (Maybe UTCTime)
keyPairInfo_createTime = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe ISO8601
createTime :: Maybe ISO8601
$sel:createTime:KeyPairInfo' :: KeyPairInfo -> Maybe ISO8601
createTime} -> Maybe ISO8601
createTime) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe ISO8601
a -> KeyPairInfo
s {$sel:createTime:KeyPairInfo' :: Maybe ISO8601
createTime = Maybe ISO8601
a} :: KeyPairInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall (a :: Format). Iso' (Time a) UTCTime
Data._Time

-- | If you used CreateKeyPair to create the key pair:
--
-- -   For RSA key pairs, the key fingerprint is the SHA-1 digest of the
--     DER encoded private key.
--
-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
--     SHA-256 digest, which is the default for OpenSSH, starting with
--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
--
-- If you used ImportKeyPair to provide Amazon Web Services the public key:
--
-- -   For RSA key pairs, the key fingerprint is the MD5 public key
--     fingerprint as specified in section 4 of RFC4716.
--
-- -   For ED25519 key pairs, the key fingerprint is the base64-encoded
--     SHA-256 digest, which is the default for OpenSSH, starting with
--     <http://www.openssh.com/txt/release-6.8 OpenSSH 6.8>.
keyPairInfo_keyFingerprint :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
keyPairInfo_keyFingerprint :: Lens' KeyPairInfo (Maybe Text)
keyPairInfo_keyFingerprint = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe Text
keyFingerprint :: Maybe Text
$sel:keyFingerprint:KeyPairInfo' :: KeyPairInfo -> Maybe Text
keyFingerprint} -> Maybe Text
keyFingerprint) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe Text
a -> KeyPairInfo
s {$sel:keyFingerprint:KeyPairInfo' :: Maybe Text
keyFingerprint = Maybe Text
a} :: KeyPairInfo)

-- | The name of the key pair.
keyPairInfo_keyName :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
keyPairInfo_keyName :: Lens' KeyPairInfo (Maybe Text)
keyPairInfo_keyName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe Text
keyName :: Maybe Text
$sel:keyName:KeyPairInfo' :: KeyPairInfo -> Maybe Text
keyName} -> Maybe Text
keyName) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe Text
a -> KeyPairInfo
s {$sel:keyName:KeyPairInfo' :: Maybe Text
keyName = Maybe Text
a} :: KeyPairInfo)

-- | The ID of the key pair.
keyPairInfo_keyPairId :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
keyPairInfo_keyPairId :: Lens' KeyPairInfo (Maybe Text)
keyPairInfo_keyPairId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe Text
keyPairId :: Maybe Text
$sel:keyPairId:KeyPairInfo' :: KeyPairInfo -> Maybe Text
keyPairId} -> Maybe Text
keyPairId) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe Text
a -> KeyPairInfo
s {$sel:keyPairId:KeyPairInfo' :: Maybe Text
keyPairId = Maybe Text
a} :: KeyPairInfo)

-- | The type of key pair.
keyPairInfo_keyType :: Lens.Lens' KeyPairInfo (Prelude.Maybe KeyType)
keyPairInfo_keyType :: Lens' KeyPairInfo (Maybe KeyType)
keyPairInfo_keyType = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe KeyType
keyType :: Maybe KeyType
$sel:keyType:KeyPairInfo' :: KeyPairInfo -> Maybe KeyType
keyType} -> Maybe KeyType
keyType) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe KeyType
a -> KeyPairInfo
s {$sel:keyType:KeyPairInfo' :: Maybe KeyType
keyType = Maybe KeyType
a} :: KeyPairInfo)

-- | The public key material.
keyPairInfo_publicKey :: Lens.Lens' KeyPairInfo (Prelude.Maybe Prelude.Text)
keyPairInfo_publicKey :: Lens' KeyPairInfo (Maybe Text)
keyPairInfo_publicKey = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe Text
publicKey :: Maybe Text
$sel:publicKey:KeyPairInfo' :: KeyPairInfo -> Maybe Text
publicKey} -> Maybe Text
publicKey) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe Text
a -> KeyPairInfo
s {$sel:publicKey:KeyPairInfo' :: Maybe Text
publicKey = Maybe Text
a} :: KeyPairInfo)

-- | Any tags applied to the key pair.
keyPairInfo_tags :: Lens.Lens' KeyPairInfo (Prelude.Maybe [Tag])
keyPairInfo_tags :: Lens' KeyPairInfo (Maybe [Tag])
keyPairInfo_tags = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\KeyPairInfo' {Maybe [Tag]
tags :: Maybe [Tag]
$sel:tags:KeyPairInfo' :: KeyPairInfo -> Maybe [Tag]
tags} -> Maybe [Tag]
tags) (\s :: KeyPairInfo
s@KeyPairInfo' {} Maybe [Tag]
a -> KeyPairInfo
s {$sel:tags:KeyPairInfo' :: Maybe [Tag]
tags = Maybe [Tag]
a} :: KeyPairInfo) forall b c a. (b -> c) -> (a -> b) -> a -> c
Prelude.. forall (f :: * -> *) (g :: * -> *) s t a b.
(Functor f, Functor g) =>
AnIso s t a b -> Iso (f s) (g t) (f a) (g b)
Lens.mapping forall s t a b. (Coercible s a, Coercible t b) => Iso s t a b
Lens.coerced

instance Data.FromXML KeyPairInfo where
  parseXML :: [Node] -> Either String KeyPairInfo
parseXML [Node]
x =
    Maybe ISO8601
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe KeyType
-> Maybe Text
-> Maybe [Tag]
-> KeyPairInfo
KeyPairInfo'
      forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"createTime")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"keyFingerprint")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"keyName")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"keyPairId")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"keyType")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ([Node]
x forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"publicKey")
      forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> ( [Node]
x
                      forall a. FromXML a => [Node] -> Text -> Either String (Maybe a)
Data..@? Text
"tagSet"
                      forall (f :: * -> *) a. Functor f => f (Maybe a) -> a -> f a
Core..!@ forall a. Monoid a => a
Prelude.mempty
                      forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
Prelude.>>= forall (f :: * -> *) a b.
Applicative f =>
([a] -> f b) -> [a] -> f (Maybe b)
Core.may (forall a. FromXML a => Text -> [Node] -> Either String [a]
Data.parseXMLList Text
"item")
                  )

instance Prelude.Hashable KeyPairInfo where
  hashWithSalt :: Int -> KeyPairInfo -> Int
hashWithSalt Int
_salt KeyPairInfo' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe KeyType
tags :: Maybe [Tag]
publicKey :: Maybe Text
keyType :: Maybe KeyType
keyPairId :: Maybe Text
keyName :: Maybe Text
keyFingerprint :: Maybe Text
createTime :: Maybe ISO8601
$sel:tags:KeyPairInfo' :: KeyPairInfo -> Maybe [Tag]
$sel:publicKey:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyType:KeyPairInfo' :: KeyPairInfo -> Maybe KeyType
$sel:keyPairId:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyName:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyFingerprint:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:createTime:KeyPairInfo' :: KeyPairInfo -> Maybe ISO8601
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe ISO8601
createTime
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
keyFingerprint
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
keyName
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
keyPairId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe KeyType
keyType
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
publicKey
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe [Tag]
tags

instance Prelude.NFData KeyPairInfo where
  rnf :: KeyPairInfo -> ()
rnf KeyPairInfo' {Maybe [Tag]
Maybe Text
Maybe ISO8601
Maybe KeyType
tags :: Maybe [Tag]
publicKey :: Maybe Text
keyType :: Maybe KeyType
keyPairId :: Maybe Text
keyName :: Maybe Text
keyFingerprint :: Maybe Text
createTime :: Maybe ISO8601
$sel:tags:KeyPairInfo' :: KeyPairInfo -> Maybe [Tag]
$sel:publicKey:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyType:KeyPairInfo' :: KeyPairInfo -> Maybe KeyType
$sel:keyPairId:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyName:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:keyFingerprint:KeyPairInfo' :: KeyPairInfo -> Maybe Text
$sel:createTime:KeyPairInfo' :: KeyPairInfo -> Maybe ISO8601
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe ISO8601
createTime
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
keyFingerprint
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
keyName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
keyPairId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe KeyType
keyType
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
publicKey
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe [Tag]
tags