{-# 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.Organizations.DeregisterDelegatedAdministrator
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Removes the specified member Amazon Web Services account as a delegated
-- administrator for the specified Amazon Web Services service.
--
-- Deregistering a delegated administrator can have unintended impacts on
-- the functionality of the enabled Amazon Web Services service. See the
-- documentation for the enabled service before you deregister a delegated
-- administrator so that you understand any potential impacts.
--
-- You can run this action only for Amazon Web Services services that
-- support this feature. For a current list of services that support it,
-- see the column /Supports Delegated Administrator/ in the table at
-- <https://docs.aws.amazon.com/organizations/latest/userguide/orgs_integrate_services_list.html Amazon Web Services Services that you can use with Organizations>
-- in the /Organizations User Guide./
--
-- This operation can be called only from the organization\'s management
-- account.
module Amazonka.Organizations.DeregisterDelegatedAdministrator
  ( -- * Creating a Request
    DeregisterDelegatedAdministrator (..),
    newDeregisterDelegatedAdministrator,

    -- * Request Lenses
    deregisterDelegatedAdministrator_accountId,
    deregisterDelegatedAdministrator_servicePrincipal,

    -- * Destructuring the Response
    DeregisterDelegatedAdministratorResponse (..),
    newDeregisterDelegatedAdministratorResponse,
  )
where

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

-- | /See:/ 'newDeregisterDelegatedAdministrator' smart constructor.
data DeregisterDelegatedAdministrator = DeregisterDelegatedAdministrator'
  { -- | The account ID number of the member account in the organization that you
    -- want to deregister as a delegated administrator.
    DeregisterDelegatedAdministrator -> Text
accountId :: Prelude.Text,
    -- | The service principal name of an Amazon Web Services service for which
    -- the account is a delegated administrator.
    --
    -- Delegated administrator privileges are revoked for only the specified
    -- Amazon Web Services service from the member account. If the specified
    -- service is the only service for which the member account is a delegated
    -- administrator, the operation also revokes Organizations read action
    -- permissions.
    DeregisterDelegatedAdministrator -> Text
servicePrincipal :: Prelude.Text
  }
  deriving (DeregisterDelegatedAdministrator
-> DeregisterDelegatedAdministrator -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: DeregisterDelegatedAdministrator
-> DeregisterDelegatedAdministrator -> Bool
$c/= :: DeregisterDelegatedAdministrator
-> DeregisterDelegatedAdministrator -> Bool
== :: DeregisterDelegatedAdministrator
-> DeregisterDelegatedAdministrator -> Bool
$c== :: DeregisterDelegatedAdministrator
-> DeregisterDelegatedAdministrator -> Bool
Prelude.Eq, ReadPrec [DeregisterDelegatedAdministrator]
ReadPrec DeregisterDelegatedAdministrator
Int -> ReadS DeregisterDelegatedAdministrator
ReadS [DeregisterDelegatedAdministrator]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [DeregisterDelegatedAdministrator]
$creadListPrec :: ReadPrec [DeregisterDelegatedAdministrator]
readPrec :: ReadPrec DeregisterDelegatedAdministrator
$creadPrec :: ReadPrec DeregisterDelegatedAdministrator
readList :: ReadS [DeregisterDelegatedAdministrator]
$creadList :: ReadS [DeregisterDelegatedAdministrator]
readsPrec :: Int -> ReadS DeregisterDelegatedAdministrator
$creadsPrec :: Int -> ReadS DeregisterDelegatedAdministrator
Prelude.Read, Int -> DeregisterDelegatedAdministrator -> ShowS
[DeregisterDelegatedAdministrator] -> ShowS
DeregisterDelegatedAdministrator -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [DeregisterDelegatedAdministrator] -> ShowS
$cshowList :: [DeregisterDelegatedAdministrator] -> ShowS
show :: DeregisterDelegatedAdministrator -> String
$cshow :: DeregisterDelegatedAdministrator -> String
showsPrec :: Int -> DeregisterDelegatedAdministrator -> ShowS
$cshowsPrec :: Int -> DeregisterDelegatedAdministrator -> ShowS
Prelude.Show, forall x.
Rep DeregisterDelegatedAdministrator x
-> DeregisterDelegatedAdministrator
forall x.
DeregisterDelegatedAdministrator
-> Rep DeregisterDelegatedAdministrator x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep DeregisterDelegatedAdministrator x
-> DeregisterDelegatedAdministrator
$cfrom :: forall x.
DeregisterDelegatedAdministrator
-> Rep DeregisterDelegatedAdministrator x
Prelude.Generic)

-- |
-- Create a value of 'DeregisterDelegatedAdministrator' 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:
--
-- 'accountId', 'deregisterDelegatedAdministrator_accountId' - The account ID number of the member account in the organization that you
-- want to deregister as a delegated administrator.
--
-- 'servicePrincipal', 'deregisterDelegatedAdministrator_servicePrincipal' - The service principal name of an Amazon Web Services service for which
-- the account is a delegated administrator.
--
-- Delegated administrator privileges are revoked for only the specified
-- Amazon Web Services service from the member account. If the specified
-- service is the only service for which the member account is a delegated
-- administrator, the operation also revokes Organizations read action
-- permissions.
newDeregisterDelegatedAdministrator ::
  -- | 'accountId'
  Prelude.Text ->
  -- | 'servicePrincipal'
  Prelude.Text ->
  DeregisterDelegatedAdministrator
newDeregisterDelegatedAdministrator :: Text -> Text -> DeregisterDelegatedAdministrator
newDeregisterDelegatedAdministrator
  Text
pAccountId_
  Text
pServicePrincipal_ =
    DeregisterDelegatedAdministrator'
      { $sel:accountId:DeregisterDelegatedAdministrator' :: Text
accountId =
          Text
pAccountId_,
        $sel:servicePrincipal:DeregisterDelegatedAdministrator' :: Text
servicePrincipal = Text
pServicePrincipal_
      }

-- | The account ID number of the member account in the organization that you
-- want to deregister as a delegated administrator.
deregisterDelegatedAdministrator_accountId :: Lens.Lens' DeregisterDelegatedAdministrator Prelude.Text
deregisterDelegatedAdministrator_accountId :: Lens' DeregisterDelegatedAdministrator Text
deregisterDelegatedAdministrator_accountId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeregisterDelegatedAdministrator' {Text
accountId :: Text
$sel:accountId:DeregisterDelegatedAdministrator' :: DeregisterDelegatedAdministrator -> Text
accountId} -> Text
accountId) (\s :: DeregisterDelegatedAdministrator
s@DeregisterDelegatedAdministrator' {} Text
a -> DeregisterDelegatedAdministrator
s {$sel:accountId:DeregisterDelegatedAdministrator' :: Text
accountId = Text
a} :: DeregisterDelegatedAdministrator)

-- | The service principal name of an Amazon Web Services service for which
-- the account is a delegated administrator.
--
-- Delegated administrator privileges are revoked for only the specified
-- Amazon Web Services service from the member account. If the specified
-- service is the only service for which the member account is a delegated
-- administrator, the operation also revokes Organizations read action
-- permissions.
deregisterDelegatedAdministrator_servicePrincipal :: Lens.Lens' DeregisterDelegatedAdministrator Prelude.Text
deregisterDelegatedAdministrator_servicePrincipal :: Lens' DeregisterDelegatedAdministrator Text
deregisterDelegatedAdministrator_servicePrincipal = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\DeregisterDelegatedAdministrator' {Text
servicePrincipal :: Text
$sel:servicePrincipal:DeregisterDelegatedAdministrator' :: DeregisterDelegatedAdministrator -> Text
servicePrincipal} -> Text
servicePrincipal) (\s :: DeregisterDelegatedAdministrator
s@DeregisterDelegatedAdministrator' {} Text
a -> DeregisterDelegatedAdministrator
s {$sel:servicePrincipal:DeregisterDelegatedAdministrator' :: Text
servicePrincipal = Text
a} :: DeregisterDelegatedAdministrator)

instance
  Core.AWSRequest
    DeregisterDelegatedAdministrator
  where
  type
    AWSResponse DeregisterDelegatedAdministrator =
      DeregisterDelegatedAdministratorResponse
  request :: (Service -> Service)
-> DeregisterDelegatedAdministrator
-> Request DeregisterDelegatedAdministrator
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 DeregisterDelegatedAdministrator
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse DeregisterDelegatedAdministrator)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      DeregisterDelegatedAdministratorResponse
DeregisterDelegatedAdministratorResponse'

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

instance
  Prelude.NFData
    DeregisterDelegatedAdministrator
  where
  rnf :: DeregisterDelegatedAdministrator -> ()
rnf DeregisterDelegatedAdministrator' {Text
servicePrincipal :: Text
accountId :: Text
$sel:servicePrincipal:DeregisterDelegatedAdministrator' :: DeregisterDelegatedAdministrator -> Text
$sel:accountId:DeregisterDelegatedAdministrator' :: DeregisterDelegatedAdministrator -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
accountId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
servicePrincipal

instance
  Data.ToHeaders
    DeregisterDelegatedAdministrator
  where
  toHeaders :: DeregisterDelegatedAdministrator -> [Header]
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 -> [Header]
Data.=# ( ByteString
"AWSOrganizationsV20161128.DeregisterDelegatedAdministrator" ::
                          Prelude.ByteString
                      ),
            HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> [Header]
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

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

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

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

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

-- |
-- Create a value of 'DeregisterDelegatedAdministratorResponse' 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.
newDeregisterDelegatedAdministratorResponse ::
  DeregisterDelegatedAdministratorResponse
newDeregisterDelegatedAdministratorResponse :: DeregisterDelegatedAdministratorResponse
newDeregisterDelegatedAdministratorResponse =
  DeregisterDelegatedAdministratorResponse
DeregisterDelegatedAdministratorResponse'

instance
  Prelude.NFData
    DeregisterDelegatedAdministratorResponse
  where
  rnf :: DeregisterDelegatedAdministratorResponse -> ()
rnf DeregisterDelegatedAdministratorResponse
_ = ()