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

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

-- |
-- Module      : Amazonka.Greengrass.GetGroupCertificateConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Retrieves the current configuration for the CA used by the group.
module Amazonka.Greengrass.GetGroupCertificateConfiguration
  ( -- * Creating a Request
    GetGroupCertificateConfiguration (..),
    newGetGroupCertificateConfiguration,

    -- * Request Lenses
    getGroupCertificateConfiguration_groupId,

    -- * Destructuring the Response
    GetGroupCertificateConfigurationResponse (..),
    newGetGroupCertificateConfigurationResponse,

    -- * Response Lenses
    getGroupCertificateConfigurationResponse_certificateAuthorityExpiryInMilliseconds,
    getGroupCertificateConfigurationResponse_certificateExpiryInMilliseconds,
    getGroupCertificateConfigurationResponse_groupId,
    getGroupCertificateConfigurationResponse_httpStatus,
  )
where

import qualified Amazonka.Core as Core
import qualified Amazonka.Core.Lens.Internal as Lens
import qualified Amazonka.Data as Data
import Amazonka.Greengrass.Types
import qualified Amazonka.Prelude as Prelude
import qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newGetGroupCertificateConfiguration' smart constructor.
data GetGroupCertificateConfiguration = GetGroupCertificateConfiguration'
  { -- | The ID of the Greengrass group.
    GetGroupCertificateConfiguration -> Text
groupId :: Prelude.Text
  }
  deriving (GetGroupCertificateConfiguration
-> GetGroupCertificateConfiguration -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetGroupCertificateConfiguration
-> GetGroupCertificateConfiguration -> Bool
$c/= :: GetGroupCertificateConfiguration
-> GetGroupCertificateConfiguration -> Bool
== :: GetGroupCertificateConfiguration
-> GetGroupCertificateConfiguration -> Bool
$c== :: GetGroupCertificateConfiguration
-> GetGroupCertificateConfiguration -> Bool
Prelude.Eq, ReadPrec [GetGroupCertificateConfiguration]
ReadPrec GetGroupCertificateConfiguration
Int -> ReadS GetGroupCertificateConfiguration
ReadS [GetGroupCertificateConfiguration]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetGroupCertificateConfiguration]
$creadListPrec :: ReadPrec [GetGroupCertificateConfiguration]
readPrec :: ReadPrec GetGroupCertificateConfiguration
$creadPrec :: ReadPrec GetGroupCertificateConfiguration
readList :: ReadS [GetGroupCertificateConfiguration]
$creadList :: ReadS [GetGroupCertificateConfiguration]
readsPrec :: Int -> ReadS GetGroupCertificateConfiguration
$creadsPrec :: Int -> ReadS GetGroupCertificateConfiguration
Prelude.Read, Int -> GetGroupCertificateConfiguration -> ShowS
[GetGroupCertificateConfiguration] -> ShowS
GetGroupCertificateConfiguration -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetGroupCertificateConfiguration] -> ShowS
$cshowList :: [GetGroupCertificateConfiguration] -> ShowS
show :: GetGroupCertificateConfiguration -> String
$cshow :: GetGroupCertificateConfiguration -> String
showsPrec :: Int -> GetGroupCertificateConfiguration -> ShowS
$cshowsPrec :: Int -> GetGroupCertificateConfiguration -> ShowS
Prelude.Show, forall x.
Rep GetGroupCertificateConfiguration x
-> GetGroupCertificateConfiguration
forall x.
GetGroupCertificateConfiguration
-> Rep GetGroupCertificateConfiguration x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetGroupCertificateConfiguration x
-> GetGroupCertificateConfiguration
$cfrom :: forall x.
GetGroupCertificateConfiguration
-> Rep GetGroupCertificateConfiguration x
Prelude.Generic)

-- |
-- Create a value of 'GetGroupCertificateConfiguration' 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:
--
-- 'groupId', 'getGroupCertificateConfiguration_groupId' - The ID of the Greengrass group.
newGetGroupCertificateConfiguration ::
  -- | 'groupId'
  Prelude.Text ->
  GetGroupCertificateConfiguration
newGetGroupCertificateConfiguration :: Text -> GetGroupCertificateConfiguration
newGetGroupCertificateConfiguration Text
pGroupId_ =
  GetGroupCertificateConfiguration'
    { $sel:groupId:GetGroupCertificateConfiguration' :: Text
groupId =
        Text
pGroupId_
    }

-- | The ID of the Greengrass group.
getGroupCertificateConfiguration_groupId :: Lens.Lens' GetGroupCertificateConfiguration Prelude.Text
getGroupCertificateConfiguration_groupId :: Lens' GetGroupCertificateConfiguration Text
getGroupCertificateConfiguration_groupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetGroupCertificateConfiguration' {Text
groupId :: Text
$sel:groupId:GetGroupCertificateConfiguration' :: GetGroupCertificateConfiguration -> Text
groupId} -> Text
groupId) (\s :: GetGroupCertificateConfiguration
s@GetGroupCertificateConfiguration' {} Text
a -> GetGroupCertificateConfiguration
s {$sel:groupId:GetGroupCertificateConfiguration' :: Text
groupId = Text
a} :: GetGroupCertificateConfiguration)

instance
  Core.AWSRequest
    GetGroupCertificateConfiguration
  where
  type
    AWSResponse GetGroupCertificateConfiguration =
      GetGroupCertificateConfigurationResponse
  request :: (Service -> Service)
-> GetGroupCertificateConfiguration
-> Request GetGroupCertificateConfiguration
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetGroupCertificateConfiguration
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse GetGroupCertificateConfiguration)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Int
-> GetGroupCertificateConfigurationResponse
GetGroupCertificateConfigurationResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> ( Object
x
                            forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"CertificateAuthorityExpiryInMilliseconds"
                        )
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"CertificateExpiryInMilliseconds")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"GroupId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance
  Prelude.Hashable
    GetGroupCertificateConfiguration
  where
  hashWithSalt :: Int -> GetGroupCertificateConfiguration -> Int
hashWithSalt
    Int
_salt
    GetGroupCertificateConfiguration' {Text
groupId :: Text
$sel:groupId:GetGroupCertificateConfiguration' :: GetGroupCertificateConfiguration -> Text
..} =
      Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
groupId

instance
  Prelude.NFData
    GetGroupCertificateConfiguration
  where
  rnf :: GetGroupCertificateConfiguration -> ()
rnf GetGroupCertificateConfiguration' {Text
groupId :: Text
$sel:groupId:GetGroupCertificateConfiguration' :: GetGroupCertificateConfiguration -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
groupId

instance
  Data.ToHeaders
    GetGroupCertificateConfiguration
  where
  toHeaders :: GetGroupCertificateConfiguration -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToPath GetGroupCertificateConfiguration where
  toPath :: GetGroupCertificateConfiguration -> ByteString
toPath GetGroupCertificateConfiguration' {Text
groupId :: Text
$sel:groupId:GetGroupCertificateConfiguration' :: GetGroupCertificateConfiguration -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/greengrass/groups/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
groupId,
        ByteString
"/certificateauthorities/configuration/expiry"
      ]

instance
  Data.ToQuery
    GetGroupCertificateConfiguration
  where
  toQuery :: GetGroupCertificateConfiguration -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newGetGroupCertificateConfigurationResponse' smart constructor.
data GetGroupCertificateConfigurationResponse = GetGroupCertificateConfigurationResponse'
  { -- | The amount of time remaining before the certificate authority expires,
    -- in milliseconds.
    GetGroupCertificateConfigurationResponse -> Maybe Text
certificateAuthorityExpiryInMilliseconds :: Prelude.Maybe Prelude.Text,
    -- | The amount of time remaining before the certificate expires, in
    -- milliseconds.
    GetGroupCertificateConfigurationResponse -> Maybe Text
certificateExpiryInMilliseconds :: Prelude.Maybe Prelude.Text,
    -- | The ID of the group certificate configuration.
    GetGroupCertificateConfigurationResponse -> Maybe Text
groupId :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    GetGroupCertificateConfigurationResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (GetGroupCertificateConfigurationResponse
-> GetGroupCertificateConfigurationResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetGroupCertificateConfigurationResponse
-> GetGroupCertificateConfigurationResponse -> Bool
$c/= :: GetGroupCertificateConfigurationResponse
-> GetGroupCertificateConfigurationResponse -> Bool
== :: GetGroupCertificateConfigurationResponse
-> GetGroupCertificateConfigurationResponse -> Bool
$c== :: GetGroupCertificateConfigurationResponse
-> GetGroupCertificateConfigurationResponse -> Bool
Prelude.Eq, ReadPrec [GetGroupCertificateConfigurationResponse]
ReadPrec GetGroupCertificateConfigurationResponse
Int -> ReadS GetGroupCertificateConfigurationResponse
ReadS [GetGroupCertificateConfigurationResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetGroupCertificateConfigurationResponse]
$creadListPrec :: ReadPrec [GetGroupCertificateConfigurationResponse]
readPrec :: ReadPrec GetGroupCertificateConfigurationResponse
$creadPrec :: ReadPrec GetGroupCertificateConfigurationResponse
readList :: ReadS [GetGroupCertificateConfigurationResponse]
$creadList :: ReadS [GetGroupCertificateConfigurationResponse]
readsPrec :: Int -> ReadS GetGroupCertificateConfigurationResponse
$creadsPrec :: Int -> ReadS GetGroupCertificateConfigurationResponse
Prelude.Read, Int -> GetGroupCertificateConfigurationResponse -> ShowS
[GetGroupCertificateConfigurationResponse] -> ShowS
GetGroupCertificateConfigurationResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetGroupCertificateConfigurationResponse] -> ShowS
$cshowList :: [GetGroupCertificateConfigurationResponse] -> ShowS
show :: GetGroupCertificateConfigurationResponse -> String
$cshow :: GetGroupCertificateConfigurationResponse -> String
showsPrec :: Int -> GetGroupCertificateConfigurationResponse -> ShowS
$cshowsPrec :: Int -> GetGroupCertificateConfigurationResponse -> ShowS
Prelude.Show, forall x.
Rep GetGroupCertificateConfigurationResponse x
-> GetGroupCertificateConfigurationResponse
forall x.
GetGroupCertificateConfigurationResponse
-> Rep GetGroupCertificateConfigurationResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep GetGroupCertificateConfigurationResponse x
-> GetGroupCertificateConfigurationResponse
$cfrom :: forall x.
GetGroupCertificateConfigurationResponse
-> Rep GetGroupCertificateConfigurationResponse x
Prelude.Generic)

-- |
-- Create a value of 'GetGroupCertificateConfigurationResponse' 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:
--
-- 'certificateAuthorityExpiryInMilliseconds', 'getGroupCertificateConfigurationResponse_certificateAuthorityExpiryInMilliseconds' - The amount of time remaining before the certificate authority expires,
-- in milliseconds.
--
-- 'certificateExpiryInMilliseconds', 'getGroupCertificateConfigurationResponse_certificateExpiryInMilliseconds' - The amount of time remaining before the certificate expires, in
-- milliseconds.
--
-- 'groupId', 'getGroupCertificateConfigurationResponse_groupId' - The ID of the group certificate configuration.
--
-- 'httpStatus', 'getGroupCertificateConfigurationResponse_httpStatus' - The response's http status code.
newGetGroupCertificateConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetGroupCertificateConfigurationResponse
newGetGroupCertificateConfigurationResponse :: Int -> GetGroupCertificateConfigurationResponse
newGetGroupCertificateConfigurationResponse
  Int
pHttpStatus_ =
    GetGroupCertificateConfigurationResponse'
      { $sel:certificateAuthorityExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: Maybe Text
certificateAuthorityExpiryInMilliseconds =
          forall a. Maybe a
Prelude.Nothing,
        $sel:certificateExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: Maybe Text
certificateExpiryInMilliseconds =
          forall a. Maybe a
Prelude.Nothing,
        $sel:groupId:GetGroupCertificateConfigurationResponse' :: Maybe Text
groupId = forall a. Maybe a
Prelude.Nothing,
        $sel:httpStatus:GetGroupCertificateConfigurationResponse' :: Int
httpStatus = Int
pHttpStatus_
      }

-- | The amount of time remaining before the certificate authority expires,
-- in milliseconds.
getGroupCertificateConfigurationResponse_certificateAuthorityExpiryInMilliseconds :: Lens.Lens' GetGroupCertificateConfigurationResponse (Prelude.Maybe Prelude.Text)
getGroupCertificateConfigurationResponse_certificateAuthorityExpiryInMilliseconds :: Lens' GetGroupCertificateConfigurationResponse (Maybe Text)
getGroupCertificateConfigurationResponse_certificateAuthorityExpiryInMilliseconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetGroupCertificateConfigurationResponse' {Maybe Text
certificateAuthorityExpiryInMilliseconds :: Maybe Text
$sel:certificateAuthorityExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
certificateAuthorityExpiryInMilliseconds} -> Maybe Text
certificateAuthorityExpiryInMilliseconds) (\s :: GetGroupCertificateConfigurationResponse
s@GetGroupCertificateConfigurationResponse' {} Maybe Text
a -> GetGroupCertificateConfigurationResponse
s {$sel:certificateAuthorityExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: Maybe Text
certificateAuthorityExpiryInMilliseconds = Maybe Text
a} :: GetGroupCertificateConfigurationResponse)

-- | The amount of time remaining before the certificate expires, in
-- milliseconds.
getGroupCertificateConfigurationResponse_certificateExpiryInMilliseconds :: Lens.Lens' GetGroupCertificateConfigurationResponse (Prelude.Maybe Prelude.Text)
getGroupCertificateConfigurationResponse_certificateExpiryInMilliseconds :: Lens' GetGroupCertificateConfigurationResponse (Maybe Text)
getGroupCertificateConfigurationResponse_certificateExpiryInMilliseconds = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetGroupCertificateConfigurationResponse' {Maybe Text
certificateExpiryInMilliseconds :: Maybe Text
$sel:certificateExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
certificateExpiryInMilliseconds} -> Maybe Text
certificateExpiryInMilliseconds) (\s :: GetGroupCertificateConfigurationResponse
s@GetGroupCertificateConfigurationResponse' {} Maybe Text
a -> GetGroupCertificateConfigurationResponse
s {$sel:certificateExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: Maybe Text
certificateExpiryInMilliseconds = Maybe Text
a} :: GetGroupCertificateConfigurationResponse)

-- | The ID of the group certificate configuration.
getGroupCertificateConfigurationResponse_groupId :: Lens.Lens' GetGroupCertificateConfigurationResponse (Prelude.Maybe Prelude.Text)
getGroupCertificateConfigurationResponse_groupId :: Lens' GetGroupCertificateConfigurationResponse (Maybe Text)
getGroupCertificateConfigurationResponse_groupId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetGroupCertificateConfigurationResponse' {Maybe Text
groupId :: Maybe Text
$sel:groupId:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
groupId} -> Maybe Text
groupId) (\s :: GetGroupCertificateConfigurationResponse
s@GetGroupCertificateConfigurationResponse' {} Maybe Text
a -> GetGroupCertificateConfigurationResponse
s {$sel:groupId:GetGroupCertificateConfigurationResponse' :: Maybe Text
groupId = Maybe Text
a} :: GetGroupCertificateConfigurationResponse)

-- | The response's http status code.
getGroupCertificateConfigurationResponse_httpStatus :: Lens.Lens' GetGroupCertificateConfigurationResponse Prelude.Int
getGroupCertificateConfigurationResponse_httpStatus :: Lens' GetGroupCertificateConfigurationResponse Int
getGroupCertificateConfigurationResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetGroupCertificateConfigurationResponse' {Int
httpStatus :: Int
$sel:httpStatus:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: GetGroupCertificateConfigurationResponse
s@GetGroupCertificateConfigurationResponse' {} Int
a -> GetGroupCertificateConfigurationResponse
s {$sel:httpStatus:GetGroupCertificateConfigurationResponse' :: Int
httpStatus = Int
a} :: GetGroupCertificateConfigurationResponse)

instance
  Prelude.NFData
    GetGroupCertificateConfigurationResponse
  where
  rnf :: GetGroupCertificateConfigurationResponse -> ()
rnf GetGroupCertificateConfigurationResponse' {Int
Maybe Text
httpStatus :: Int
groupId :: Maybe Text
certificateExpiryInMilliseconds :: Maybe Text
certificateAuthorityExpiryInMilliseconds :: Maybe Text
$sel:httpStatus:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Int
$sel:groupId:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
$sel:certificateExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
$sel:certificateAuthorityExpiryInMilliseconds:GetGroupCertificateConfigurationResponse' :: GetGroupCertificateConfigurationResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf
      Maybe Text
certificateAuthorityExpiryInMilliseconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
certificateExpiryInMilliseconds
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
groupId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus