packages feed

amazonka-route53resolver-2.0: gen/Amazonka/Route53Resolver/ImportFirewallDomains.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.Route53Resolver.ImportFirewallDomains
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Imports domain names from a file into a domain list, for use in a DNS
-- firewall rule group.
--
-- Each domain specification in your domain list must satisfy the following
-- requirements:
--
-- -   It can optionally start with @*@ (asterisk).
--
-- -   With the exception of the optional starting asterisk, it must only
--     contain the following characters: @A-Z@, @a-z@, @0-9@, @-@ (hyphen).
--
-- -   It must be from 1-255 characters in length.
module Amazonka.Route53Resolver.ImportFirewallDomains
  ( -- * Creating a Request
    ImportFirewallDomains (..),
    newImportFirewallDomains,

    -- * Request Lenses
    importFirewallDomains_firewallDomainListId,
    importFirewallDomains_operation,
    importFirewallDomains_domainFileUrl,

    -- * Destructuring the Response
    ImportFirewallDomainsResponse (..),
    newImportFirewallDomainsResponse,

    -- * Response Lenses
    importFirewallDomainsResponse_id,
    importFirewallDomainsResponse_name,
    importFirewallDomainsResponse_status,
    importFirewallDomainsResponse_statusMessage,
    importFirewallDomainsResponse_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.Route53Resolver.Types

-- | /See:/ 'newImportFirewallDomains' smart constructor.
data ImportFirewallDomains = ImportFirewallDomains'
  { -- | The ID of the domain list that you want to modify with the import
    -- operation.
    firewallDomainListId :: Prelude.Text,
    -- | What you want DNS Firewall to do with the domains that are listed in the
    -- file. This must be set to @REPLACE@, which updates the domain list to
    -- exactly match the list in the file.
    operation :: FirewallDomainImportOperation,
    -- | The fully qualified URL or URI of the file stored in Amazon Simple
    -- Storage Service (Amazon S3) that contains the list of domains to import.
    --
    -- The file must be in an S3 bucket that\'s in the same Region as your DNS
    -- Firewall. The file must be a text file and must contain a single domain
    -- per line.
    domainFileUrl :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'ImportFirewallDomains' 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:
--
-- 'firewallDomainListId', 'importFirewallDomains_firewallDomainListId' - The ID of the domain list that you want to modify with the import
-- operation.
--
-- 'operation', 'importFirewallDomains_operation' - What you want DNS Firewall to do with the domains that are listed in the
-- file. This must be set to @REPLACE@, which updates the domain list to
-- exactly match the list in the file.
--
-- 'domainFileUrl', 'importFirewallDomains_domainFileUrl' - The fully qualified URL or URI of the file stored in Amazon Simple
-- Storage Service (Amazon S3) that contains the list of domains to import.
--
-- The file must be in an S3 bucket that\'s in the same Region as your DNS
-- Firewall. The file must be a text file and must contain a single domain
-- per line.
newImportFirewallDomains ::
  -- | 'firewallDomainListId'
  Prelude.Text ->
  -- | 'operation'
  FirewallDomainImportOperation ->
  -- | 'domainFileUrl'
  Prelude.Text ->
  ImportFirewallDomains
newImportFirewallDomains
  pFirewallDomainListId_
  pOperation_
  pDomainFileUrl_ =
    ImportFirewallDomains'
      { firewallDomainListId =
          pFirewallDomainListId_,
        operation = pOperation_,
        domainFileUrl = pDomainFileUrl_
      }

-- | The ID of the domain list that you want to modify with the import
-- operation.
importFirewallDomains_firewallDomainListId :: Lens.Lens' ImportFirewallDomains Prelude.Text
importFirewallDomains_firewallDomainListId = Lens.lens (\ImportFirewallDomains' {firewallDomainListId} -> firewallDomainListId) (\s@ImportFirewallDomains' {} a -> s {firewallDomainListId = a} :: ImportFirewallDomains)

-- | What you want DNS Firewall to do with the domains that are listed in the
-- file. This must be set to @REPLACE@, which updates the domain list to
-- exactly match the list in the file.
importFirewallDomains_operation :: Lens.Lens' ImportFirewallDomains FirewallDomainImportOperation
importFirewallDomains_operation = Lens.lens (\ImportFirewallDomains' {operation} -> operation) (\s@ImportFirewallDomains' {} a -> s {operation = a} :: ImportFirewallDomains)

-- | The fully qualified URL or URI of the file stored in Amazon Simple
-- Storage Service (Amazon S3) that contains the list of domains to import.
--
-- The file must be in an S3 bucket that\'s in the same Region as your DNS
-- Firewall. The file must be a text file and must contain a single domain
-- per line.
importFirewallDomains_domainFileUrl :: Lens.Lens' ImportFirewallDomains Prelude.Text
importFirewallDomains_domainFileUrl = Lens.lens (\ImportFirewallDomains' {domainFileUrl} -> domainFileUrl) (\s@ImportFirewallDomains' {} a -> s {domainFileUrl = a} :: ImportFirewallDomains)

instance Core.AWSRequest ImportFirewallDomains where
  type
    AWSResponse ImportFirewallDomains =
      ImportFirewallDomainsResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          ImportFirewallDomainsResponse'
            Prelude.<$> (x Data..?> "Id")
            Prelude.<*> (x Data..?> "Name")
            Prelude.<*> (x Data..?> "Status")
            Prelude.<*> (x Data..?> "StatusMessage")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable ImportFirewallDomains where
  hashWithSalt _salt ImportFirewallDomains' {..} =
    _salt
      `Prelude.hashWithSalt` firewallDomainListId
      `Prelude.hashWithSalt` operation
      `Prelude.hashWithSalt` domainFileUrl

instance Prelude.NFData ImportFirewallDomains where
  rnf ImportFirewallDomains' {..} =
    Prelude.rnf firewallDomainListId
      `Prelude.seq` Prelude.rnf operation
      `Prelude.seq` Prelude.rnf domainFileUrl

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

instance Data.ToJSON ImportFirewallDomains where
  toJSON ImportFirewallDomains' {..} =
    Data.object
      ( Prelude.catMaybes
          [ Prelude.Just
              ( "FirewallDomainListId"
                  Data..= firewallDomainListId
              ),
            Prelude.Just ("Operation" Data..= operation),
            Prelude.Just
              ("DomainFileUrl" Data..= domainFileUrl)
          ]
      )

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

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

-- | /See:/ 'newImportFirewallDomainsResponse' smart constructor.
data ImportFirewallDomainsResponse = ImportFirewallDomainsResponse'
  { -- | The Id of the firewall domain list that DNS Firewall just updated.
    id :: Prelude.Maybe Prelude.Text,
    -- | The name of the domain list.
    name :: Prelude.Maybe Prelude.Text,
    status :: Prelude.Maybe FirewallDomainListStatus,
    -- | Additional information about the status of the list, if available.
    statusMessage :: 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 'ImportFirewallDomainsResponse' 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:
--
-- 'id', 'importFirewallDomainsResponse_id' - The Id of the firewall domain list that DNS Firewall just updated.
--
-- 'name', 'importFirewallDomainsResponse_name' - The name of the domain list.
--
-- 'status', 'importFirewallDomainsResponse_status' -
--
-- 'statusMessage', 'importFirewallDomainsResponse_statusMessage' - Additional information about the status of the list, if available.
--
-- 'httpStatus', 'importFirewallDomainsResponse_httpStatus' - The response's http status code.
newImportFirewallDomainsResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  ImportFirewallDomainsResponse
newImportFirewallDomainsResponse pHttpStatus_ =
  ImportFirewallDomainsResponse'
    { id =
        Prelude.Nothing,
      name = Prelude.Nothing,
      status = Prelude.Nothing,
      statusMessage = Prelude.Nothing,
      httpStatus = pHttpStatus_
    }

-- | The Id of the firewall domain list that DNS Firewall just updated.
importFirewallDomainsResponse_id :: Lens.Lens' ImportFirewallDomainsResponse (Prelude.Maybe Prelude.Text)
importFirewallDomainsResponse_id = Lens.lens (\ImportFirewallDomainsResponse' {id} -> id) (\s@ImportFirewallDomainsResponse' {} a -> s {id = a} :: ImportFirewallDomainsResponse)

-- | The name of the domain list.
importFirewallDomainsResponse_name :: Lens.Lens' ImportFirewallDomainsResponse (Prelude.Maybe Prelude.Text)
importFirewallDomainsResponse_name = Lens.lens (\ImportFirewallDomainsResponse' {name} -> name) (\s@ImportFirewallDomainsResponse' {} a -> s {name = a} :: ImportFirewallDomainsResponse)

importFirewallDomainsResponse_status :: Lens.Lens' ImportFirewallDomainsResponse (Prelude.Maybe FirewallDomainListStatus)
importFirewallDomainsResponse_status = Lens.lens (\ImportFirewallDomainsResponse' {status} -> status) (\s@ImportFirewallDomainsResponse' {} a -> s {status = a} :: ImportFirewallDomainsResponse)

-- | Additional information about the status of the list, if available.
importFirewallDomainsResponse_statusMessage :: Lens.Lens' ImportFirewallDomainsResponse (Prelude.Maybe Prelude.Text)
importFirewallDomainsResponse_statusMessage = Lens.lens (\ImportFirewallDomainsResponse' {statusMessage} -> statusMessage) (\s@ImportFirewallDomainsResponse' {} a -> s {statusMessage = a} :: ImportFirewallDomainsResponse)

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

instance Prelude.NFData ImportFirewallDomainsResponse where
  rnf ImportFirewallDomainsResponse' {..} =
    Prelude.rnf id
      `Prelude.seq` Prelude.rnf name
      `Prelude.seq` Prelude.rnf status
      `Prelude.seq` Prelude.rnf statusMessage
      `Prelude.seq` Prelude.rnf httpStatus