{-# 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.Transfer.DescribeSecurityPolicy
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Describes the security policy that is attached to your file transfer
-- protocol-enabled server. The response contains a description of the
-- security policy\'s properties. For more information about security
-- policies, see
-- <https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html Working with security policies>.
module Amazonka.Transfer.DescribeSecurityPolicy
  ( -- * Creating a Request
    DescribeSecurityPolicy (..),
    newDescribeSecurityPolicy,

    -- * Request Lenses
    describeSecurityPolicy_securityPolicyName,

    -- * Destructuring the Response
    DescribeSecurityPolicyResponse (..),
    newDescribeSecurityPolicyResponse,

    -- * Response Lenses
    describeSecurityPolicyResponse_httpStatus,
    describeSecurityPolicyResponse_securityPolicy,
  )
where

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

-- | /See:/ 'newDescribeSecurityPolicy' smart constructor.
data DescribeSecurityPolicy = DescribeSecurityPolicy'
  { -- | Specifies the name of the security policy that is attached to the
    -- server.
    DescribeSecurityPolicy -> Text
securityPolicyName :: Prelude.Text
  }
  deriving (DescribeSecurityPolicy -> DescribeSecurityPolicy -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeSecurityPolicy -> DescribeSecurityPolicy -> Bool
$c/= :: DescribeSecurityPolicy -> DescribeSecurityPolicy -> Bool
== :: DescribeSecurityPolicy -> DescribeSecurityPolicy -> Bool
$c== :: DescribeSecurityPolicy -> DescribeSecurityPolicy -> Bool
Prelude.Eq, ReadPrec [DescribeSecurityPolicy]
ReadPrec DescribeSecurityPolicy
Int -> ReadS DescribeSecurityPolicy
ReadS [DescribeSecurityPolicy]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeSecurityPolicy]
$creadListPrec :: ReadPrec [DescribeSecurityPolicy]
readPrec :: ReadPrec DescribeSecurityPolicy
$creadPrec :: ReadPrec DescribeSecurityPolicy
readList :: ReadS [DescribeSecurityPolicy]
$creadList :: ReadS [DescribeSecurityPolicy]
readsPrec :: Int -> ReadS DescribeSecurityPolicy
$creadsPrec :: Int -> ReadS DescribeSecurityPolicy
Prelude.Read, Int -> DescribeSecurityPolicy -> ShowS
[DescribeSecurityPolicy] -> ShowS
DescribeSecurityPolicy -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeSecurityPolicy] -> ShowS
$cshowList :: [DescribeSecurityPolicy] -> ShowS
show :: DescribeSecurityPolicy -> String
$cshow :: DescribeSecurityPolicy -> String
showsPrec :: Int -> DescribeSecurityPolicy -> ShowS
$cshowsPrec :: Int -> DescribeSecurityPolicy -> ShowS
Prelude.Show, forall x. Rep DescribeSecurityPolicy x -> DescribeSecurityPolicy
forall x. DescribeSecurityPolicy -> Rep DescribeSecurityPolicy x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep DescribeSecurityPolicy x -> DescribeSecurityPolicy
$cfrom :: forall x. DescribeSecurityPolicy -> Rep DescribeSecurityPolicy x
Prelude.Generic)

-- |
-- Create a value of 'DescribeSecurityPolicy' 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:
--
-- 'securityPolicyName', 'describeSecurityPolicy_securityPolicyName' - Specifies the name of the security policy that is attached to the
-- server.
newDescribeSecurityPolicy ::
  -- | 'securityPolicyName'
  Prelude.Text ->
  DescribeSecurityPolicy
newDescribeSecurityPolicy :: Text -> DescribeSecurityPolicy
newDescribeSecurityPolicy Text
pSecurityPolicyName_ =
  DescribeSecurityPolicy'
    { $sel:securityPolicyName:DescribeSecurityPolicy' :: Text
securityPolicyName =
        Text
pSecurityPolicyName_
    }

-- | Specifies the name of the security policy that is attached to the
-- server.
describeSecurityPolicy_securityPolicyName :: Lens.Lens' DescribeSecurityPolicy Prelude.Text
describeSecurityPolicy_securityPolicyName :: Lens' DescribeSecurityPolicy Text
describeSecurityPolicy_securityPolicyName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSecurityPolicy' {Text
securityPolicyName :: Text
$sel:securityPolicyName:DescribeSecurityPolicy' :: DescribeSecurityPolicy -> Text
securityPolicyName} -> Text
securityPolicyName) (\s :: DescribeSecurityPolicy
s@DescribeSecurityPolicy' {} Text
a -> DescribeSecurityPolicy
s {$sel:securityPolicyName:DescribeSecurityPolicy' :: Text
securityPolicyName = Text
a} :: DescribeSecurityPolicy)

instance Core.AWSRequest DescribeSecurityPolicy where
  type
    AWSResponse DescribeSecurityPolicy =
      DescribeSecurityPolicyResponse
  request :: (Service -> Service)
-> DescribeSecurityPolicy -> Request DescribeSecurityPolicy
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy DescribeSecurityPolicy
-> ClientResponse ClientBody
-> m (Either
        Error (ClientResponse (AWSResponse DescribeSecurityPolicy)))
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 ->
          Int -> DescribedSecurityPolicy -> DescribeSecurityPolicyResponse
DescribeSecurityPolicyResponse'
            forall (f :: * -> *) a b. Functor 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))
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String a
Data..:> Key
"SecurityPolicy")
      )

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

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

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

instance Data.ToJSON DescribeSecurityPolicy where
  toJSON :: DescribeSecurityPolicy -> Value
toJSON DescribeSecurityPolicy' {Text
securityPolicyName :: Text
$sel:securityPolicyName:DescribeSecurityPolicy' :: DescribeSecurityPolicy -> Text
..} =
    [Pair] -> Value
Data.object
      ( forall a. [Maybe a] -> [a]
Prelude.catMaybes
          [ forall a. a -> Maybe a
Prelude.Just
              (Key
"SecurityPolicyName" forall kv v. (KeyValue kv, ToJSON v) => Key -> v -> kv
Data..= Text
securityPolicyName)
          ]
      )

instance Data.ToPath DescribeSecurityPolicy where
  toPath :: DescribeSecurityPolicy -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

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

-- | /See:/ 'newDescribeSecurityPolicyResponse' smart constructor.
data DescribeSecurityPolicyResponse = DescribeSecurityPolicyResponse'
  { -- | The response's http status code.
    DescribeSecurityPolicyResponse -> Int
httpStatus :: Prelude.Int,
    -- | An array containing the properties of the security policy.
    DescribeSecurityPolicyResponse -> DescribedSecurityPolicy
securityPolicy :: DescribedSecurityPolicy
  }
  deriving (DescribeSecurityPolicyResponse
-> DescribeSecurityPolicyResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DescribeSecurityPolicyResponse
-> DescribeSecurityPolicyResponse -> Bool
$c/= :: DescribeSecurityPolicyResponse
-> DescribeSecurityPolicyResponse -> Bool
== :: DescribeSecurityPolicyResponse
-> DescribeSecurityPolicyResponse -> Bool
$c== :: DescribeSecurityPolicyResponse
-> DescribeSecurityPolicyResponse -> Bool
Prelude.Eq, ReadPrec [DescribeSecurityPolicyResponse]
ReadPrec DescribeSecurityPolicyResponse
Int -> ReadS DescribeSecurityPolicyResponse
ReadS [DescribeSecurityPolicyResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DescribeSecurityPolicyResponse]
$creadListPrec :: ReadPrec [DescribeSecurityPolicyResponse]
readPrec :: ReadPrec DescribeSecurityPolicyResponse
$creadPrec :: ReadPrec DescribeSecurityPolicyResponse
readList :: ReadS [DescribeSecurityPolicyResponse]
$creadList :: ReadS [DescribeSecurityPolicyResponse]
readsPrec :: Int -> ReadS DescribeSecurityPolicyResponse
$creadsPrec :: Int -> ReadS DescribeSecurityPolicyResponse
Prelude.Read, Int -> DescribeSecurityPolicyResponse -> ShowS
[DescribeSecurityPolicyResponse] -> ShowS
DescribeSecurityPolicyResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DescribeSecurityPolicyResponse] -> ShowS
$cshowList :: [DescribeSecurityPolicyResponse] -> ShowS
show :: DescribeSecurityPolicyResponse -> String
$cshow :: DescribeSecurityPolicyResponse -> String
showsPrec :: Int -> DescribeSecurityPolicyResponse -> ShowS
$cshowsPrec :: Int -> DescribeSecurityPolicyResponse -> ShowS
Prelude.Show, forall x.
Rep DescribeSecurityPolicyResponse x
-> DescribeSecurityPolicyResponse
forall x.
DescribeSecurityPolicyResponse
-> Rep DescribeSecurityPolicyResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DescribeSecurityPolicyResponse x
-> DescribeSecurityPolicyResponse
$cfrom :: forall x.
DescribeSecurityPolicyResponse
-> Rep DescribeSecurityPolicyResponse x
Prelude.Generic)

-- |
-- Create a value of 'DescribeSecurityPolicyResponse' 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:
--
-- 'httpStatus', 'describeSecurityPolicyResponse_httpStatus' - The response's http status code.
--
-- 'securityPolicy', 'describeSecurityPolicyResponse_securityPolicy' - An array containing the properties of the security policy.
newDescribeSecurityPolicyResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'securityPolicy'
  DescribedSecurityPolicy ->
  DescribeSecurityPolicyResponse
newDescribeSecurityPolicyResponse :: Int -> DescribedSecurityPolicy -> DescribeSecurityPolicyResponse
newDescribeSecurityPolicyResponse
  Int
pHttpStatus_
  DescribedSecurityPolicy
pSecurityPolicy_ =
    DescribeSecurityPolicyResponse'
      { $sel:httpStatus:DescribeSecurityPolicyResponse' :: Int
httpStatus =
          Int
pHttpStatus_,
        $sel:securityPolicy:DescribeSecurityPolicyResponse' :: DescribedSecurityPolicy
securityPolicy = DescribedSecurityPolicy
pSecurityPolicy_
      }

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

-- | An array containing the properties of the security policy.
describeSecurityPolicyResponse_securityPolicy :: Lens.Lens' DescribeSecurityPolicyResponse DescribedSecurityPolicy
describeSecurityPolicyResponse_securityPolicy :: Lens' DescribeSecurityPolicyResponse DescribedSecurityPolicy
describeSecurityPolicyResponse_securityPolicy = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DescribeSecurityPolicyResponse' {DescribedSecurityPolicy
securityPolicy :: DescribedSecurityPolicy
$sel:securityPolicy:DescribeSecurityPolicyResponse' :: DescribeSecurityPolicyResponse -> DescribedSecurityPolicy
securityPolicy} -> DescribedSecurityPolicy
securityPolicy) (\s :: DescribeSecurityPolicyResponse
s@DescribeSecurityPolicyResponse' {} DescribedSecurityPolicy
a -> DescribeSecurityPolicyResponse
s {$sel:securityPolicy:DescribeSecurityPolicyResponse' :: DescribedSecurityPolicy
securityPolicy = DescribedSecurityPolicy
a} :: DescribeSecurityPolicyResponse)

instance
  Prelude.NFData
    DescribeSecurityPolicyResponse
  where
  rnf :: DescribeSecurityPolicyResponse -> ()
rnf DescribeSecurityPolicyResponse' {Int
DescribedSecurityPolicy
securityPolicy :: DescribedSecurityPolicy
httpStatus :: Int
$sel:securityPolicy:DescribeSecurityPolicyResponse' :: DescribeSecurityPolicyResponse -> DescribedSecurityPolicy
$sel:httpStatus:DescribeSecurityPolicyResponse' :: DescribeSecurityPolicyResponse -> Int
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf DescribedSecurityPolicy
securityPolicy