packages feed

amazonka-workmail-2.0: gen/Amazonka/WorkMail/GetAccessControlEffect.hs

{-# 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.WorkMail.GetAccessControlEffect
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the effects of an organization\'s access control rules as they
-- apply to a specified IPv4 address, access protocol action, and user ID
-- or impersonation role ID. You must provide either the user ID or
-- impersonation role ID. Impersonation role ID can only be used with
-- Action EWS.
module Amazonka.WorkMail.GetAccessControlEffect
  ( -- * Creating a Request
    GetAccessControlEffect (..),
    newGetAccessControlEffect,

    -- * Request Lenses
    getAccessControlEffect_impersonationRoleId,
    getAccessControlEffect_userId,
    getAccessControlEffect_organizationId,
    getAccessControlEffect_ipAddress,
    getAccessControlEffect_action,

    -- * Destructuring the Response
    GetAccessControlEffectResponse (..),
    newGetAccessControlEffectResponse,

    -- * Response Lenses
    getAccessControlEffectResponse_effect,
    getAccessControlEffectResponse_matchedRules,
    getAccessControlEffectResponse_httpStatus,
  )
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.WorkMail.Types

-- | /See:/ 'newGetAccessControlEffect' smart constructor.
data GetAccessControlEffect = GetAccessControlEffect'
  { -- | The impersonation role ID.
    impersonationRoleId :: Prelude.Maybe Prelude.Text,
    -- | The user ID.
    userId :: Prelude.Maybe Prelude.Text,
    -- | The identifier for the organization.
    organizationId :: Prelude.Text,
    -- | The IPv4 address.
    ipAddress :: Prelude.Text,
    -- | The access protocol action. Valid values include @ActiveSync@,
    -- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
    action :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'GetAccessControlEffect' 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:
--
-- 'impersonationRoleId', 'getAccessControlEffect_impersonationRoleId' - The impersonation role ID.
--
-- 'userId', 'getAccessControlEffect_userId' - The user ID.
--
-- 'organizationId', 'getAccessControlEffect_organizationId' - The identifier for the organization.
--
-- 'ipAddress', 'getAccessControlEffect_ipAddress' - The IPv4 address.
--
-- 'action', 'getAccessControlEffect_action' - The access protocol action. Valid values include @ActiveSync@,
-- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
newGetAccessControlEffect ::
  -- | 'organizationId'
  Prelude.Text ->
  -- | 'ipAddress'
  Prelude.Text ->
  -- | 'action'
  Prelude.Text ->
  GetAccessControlEffect
newGetAccessControlEffect
  pOrganizationId_
  pIpAddress_
  pAction_ =
    GetAccessControlEffect'
      { impersonationRoleId =
          Prelude.Nothing,
        userId = Prelude.Nothing,
        organizationId = pOrganizationId_,
        ipAddress = pIpAddress_,
        action = pAction_
      }

-- | The impersonation role ID.
getAccessControlEffect_impersonationRoleId :: Lens.Lens' GetAccessControlEffect (Prelude.Maybe Prelude.Text)
getAccessControlEffect_impersonationRoleId = Lens.lens (\GetAccessControlEffect' {impersonationRoleId} -> impersonationRoleId) (\s@GetAccessControlEffect' {} a -> s {impersonationRoleId = a} :: GetAccessControlEffect)

-- | The user ID.
getAccessControlEffect_userId :: Lens.Lens' GetAccessControlEffect (Prelude.Maybe Prelude.Text)
getAccessControlEffect_userId = Lens.lens (\GetAccessControlEffect' {userId} -> userId) (\s@GetAccessControlEffect' {} a -> s {userId = a} :: GetAccessControlEffect)

-- | The identifier for the organization.
getAccessControlEffect_organizationId :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_organizationId = Lens.lens (\GetAccessControlEffect' {organizationId} -> organizationId) (\s@GetAccessControlEffect' {} a -> s {organizationId = a} :: GetAccessControlEffect)

-- | The IPv4 address.
getAccessControlEffect_ipAddress :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_ipAddress = Lens.lens (\GetAccessControlEffect' {ipAddress} -> ipAddress) (\s@GetAccessControlEffect' {} a -> s {ipAddress = a} :: GetAccessControlEffect)

-- | The access protocol action. Valid values include @ActiveSync@,
-- @AutoDiscover@, @EWS@, @IMAP@, @SMTP@, @WindowsOutlook@, and @WebMail@.
getAccessControlEffect_action :: Lens.Lens' GetAccessControlEffect Prelude.Text
getAccessControlEffect_action = Lens.lens (\GetAccessControlEffect' {action} -> action) (\s@GetAccessControlEffect' {} a -> s {action = a} :: GetAccessControlEffect)

instance Core.AWSRequest GetAccessControlEffect where
  type
    AWSResponse GetAccessControlEffect =
      GetAccessControlEffectResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          GetAccessControlEffectResponse'
            Prelude.<$> (x Data..?> "Effect")
            Prelude.<*> (x Data..?> "MatchedRules" Core..!@ Prelude.mempty)
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable GetAccessControlEffect where
  hashWithSalt _salt GetAccessControlEffect' {..} =
    _salt
      `Prelude.hashWithSalt` impersonationRoleId
      `Prelude.hashWithSalt` userId
      `Prelude.hashWithSalt` organizationId
      `Prelude.hashWithSalt` ipAddress
      `Prelude.hashWithSalt` action

instance Prelude.NFData GetAccessControlEffect where
  rnf GetAccessControlEffect' {..} =
    Prelude.rnf impersonationRoleId
      `Prelude.seq` Prelude.rnf userId
      `Prelude.seq` Prelude.rnf organizationId
      `Prelude.seq` Prelude.rnf ipAddress
      `Prelude.seq` Prelude.rnf action

instance Data.ToHeaders GetAccessControlEffect where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "X-Amz-Target"
              Data.=# ( "WorkMailService.GetAccessControlEffect" ::
                          Prelude.ByteString
                      ),
            "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON GetAccessControlEffect where
  toJSON GetAccessControlEffect' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ImpersonationRoleId" Data..=)
              Prelude.<$> impersonationRoleId,
            ("UserId" Data..=) Prelude.<$> userId,
            Prelude.Just
              ("OrganizationId" Data..= organizationId),
            Prelude.Just ("IpAddress" Data..= ipAddress),
            Prelude.Just ("Action" Data..= action)
          ]
      )

instance Data.ToPath GetAccessControlEffect where
  toPath = Prelude.const "/"

instance Data.ToQuery GetAccessControlEffect where
  toQuery = Prelude.const Prelude.mempty

-- | /See:/ 'newGetAccessControlEffectResponse' smart constructor.
data GetAccessControlEffectResponse = GetAccessControlEffectResponse'
  { -- | The rule effect.
    effect :: Prelude.Maybe AccessControlRuleEffect,
    -- | The rules that match the given parameters, resulting in an effect.
    matchedRules :: Prelude.Maybe [Prelude.Text],
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'GetAccessControlEffectResponse' 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:
--
-- 'effect', 'getAccessControlEffectResponse_effect' - The rule effect.
--
-- 'matchedRules', 'getAccessControlEffectResponse_matchedRules' - The rules that match the given parameters, resulting in an effect.
--
-- 'httpStatus', 'getAccessControlEffectResponse_httpStatus' - The response's http status code.
newGetAccessControlEffectResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  GetAccessControlEffectResponse
newGetAccessControlEffectResponse pHttpStatus_ =
  GetAccessControlEffectResponse'
    { effect =
        Prelude.Nothing,
      matchedRules = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The rule effect.
getAccessControlEffectResponse_effect :: Lens.Lens' GetAccessControlEffectResponse (Prelude.Maybe AccessControlRuleEffect)
getAccessControlEffectResponse_effect = Lens.lens (\GetAccessControlEffectResponse' {effect} -> effect) (\s@GetAccessControlEffectResponse' {} a -> s {effect = a} :: GetAccessControlEffectResponse)

-- | The rules that match the given parameters, resulting in an effect.
getAccessControlEffectResponse_matchedRules :: Lens.Lens' GetAccessControlEffectResponse (Prelude.Maybe [Prelude.Text])
getAccessControlEffectResponse_matchedRules = Lens.lens (\GetAccessControlEffectResponse' {matchedRules} -> matchedRules) (\s@GetAccessControlEffectResponse' {} a -> s {matchedRules = a} :: GetAccessControlEffectResponse) Prelude.. Lens.mapping Lens.coerced

-- | The response's http status code.
getAccessControlEffectResponse_httpStatus :: Lens.Lens' GetAccessControlEffectResponse Prelude.Int
getAccessControlEffectResponse_httpStatus = Lens.lens (\GetAccessControlEffectResponse' {httpStatus} -> httpStatus) (\s@GetAccessControlEffectResponse' {} a -> s {httpStatus = a} :: GetAccessControlEffectResponse)

instance
  Prelude.NFData
    GetAccessControlEffectResponse
  where
  rnf GetAccessControlEffectResponse' {..} =
    Prelude.rnf effect
      `Prelude.seq` Prelude.rnf matchedRules
      `Prelude.seq` Prelude.rnf httpStatus