packages feed

amazonka-ecr-2.0: gen/Amazonka/ECR/PutRegistryScanningConfiguration.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.ECR.PutRegistryScanningConfiguration
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Creates or updates the scanning configuration for your private registry.
module Amazonka.ECR.PutRegistryScanningConfiguration
  ( -- * Creating a Request
    PutRegistryScanningConfiguration (..),
    newPutRegistryScanningConfiguration,

    -- * Request Lenses
    putRegistryScanningConfiguration_rules,
    putRegistryScanningConfiguration_scanType,

    -- * Destructuring the Response
    PutRegistryScanningConfigurationResponse (..),
    newPutRegistryScanningConfigurationResponse,

    -- * Response Lenses
    putRegistryScanningConfigurationResponse_registryScanningConfiguration,
    putRegistryScanningConfigurationResponse_httpStatus,
  )
where

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

-- | /See:/ 'newPutRegistryScanningConfiguration' smart constructor.
data PutRegistryScanningConfiguration = PutRegistryScanningConfiguration'
  { -- | The scanning rules to use for the registry. A scanning rule is used to
    -- determine which repository filters are used and at what frequency
    -- scanning will occur.
    rules :: Prelude.Maybe [RegistryScanningRule],
    -- | The scanning type to set for the registry.
    --
    -- When a registry scanning configuration is not defined, by default the
    -- @BASIC@ scan type is used. When basic scanning is used, you may specify
    -- filters to determine which individual repositories, or all repositories,
    -- are scanned when new images are pushed to those repositories.
    -- Alternatively, you can do manual scans of images with basic scanning.
    --
    -- When the @ENHANCED@ scan type is set, Amazon Inspector provides
    -- automated vulnerability scanning. You may choose between continuous
    -- scanning or scan on push and you may specify filters to determine which
    -- individual repositories, or all repositories, are scanned.
    scanType :: Prelude.Maybe ScanType
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutRegistryScanningConfiguration' 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:
--
-- 'rules', 'putRegistryScanningConfiguration_rules' - The scanning rules to use for the registry. A scanning rule is used to
-- determine which repository filters are used and at what frequency
-- scanning will occur.
--
-- 'scanType', 'putRegistryScanningConfiguration_scanType' - The scanning type to set for the registry.
--
-- When a registry scanning configuration is not defined, by default the
-- @BASIC@ scan type is used. When basic scanning is used, you may specify
-- filters to determine which individual repositories, or all repositories,
-- are scanned when new images are pushed to those repositories.
-- Alternatively, you can do manual scans of images with basic scanning.
--
-- When the @ENHANCED@ scan type is set, Amazon Inspector provides
-- automated vulnerability scanning. You may choose between continuous
-- scanning or scan on push and you may specify filters to determine which
-- individual repositories, or all repositories, are scanned.
newPutRegistryScanningConfiguration ::
  PutRegistryScanningConfiguration
newPutRegistryScanningConfiguration =
  PutRegistryScanningConfiguration'
    { rules =
        Prelude.Nothing,
      scanType = Prelude.Nothing
    }

-- | The scanning rules to use for the registry. A scanning rule is used to
-- determine which repository filters are used and at what frequency
-- scanning will occur.
putRegistryScanningConfiguration_rules :: Lens.Lens' PutRegistryScanningConfiguration (Prelude.Maybe [RegistryScanningRule])
putRegistryScanningConfiguration_rules = Lens.lens (\PutRegistryScanningConfiguration' {rules} -> rules) (\s@PutRegistryScanningConfiguration' {} a -> s {rules = a} :: PutRegistryScanningConfiguration) Prelude.. Lens.mapping Lens.coerced

-- | The scanning type to set for the registry.
--
-- When a registry scanning configuration is not defined, by default the
-- @BASIC@ scan type is used. When basic scanning is used, you may specify
-- filters to determine which individual repositories, or all repositories,
-- are scanned when new images are pushed to those repositories.
-- Alternatively, you can do manual scans of images with basic scanning.
--
-- When the @ENHANCED@ scan type is set, Amazon Inspector provides
-- automated vulnerability scanning. You may choose between continuous
-- scanning or scan on push and you may specify filters to determine which
-- individual repositories, or all repositories, are scanned.
putRegistryScanningConfiguration_scanType :: Lens.Lens' PutRegistryScanningConfiguration (Prelude.Maybe ScanType)
putRegistryScanningConfiguration_scanType = Lens.lens (\PutRegistryScanningConfiguration' {scanType} -> scanType) (\s@PutRegistryScanningConfiguration' {} a -> s {scanType = a} :: PutRegistryScanningConfiguration)

instance
  Core.AWSRequest
    PutRegistryScanningConfiguration
  where
  type
    AWSResponse PutRegistryScanningConfiguration =
      PutRegistryScanningConfigurationResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveJSON
      ( \s h x ->
          PutRegistryScanningConfigurationResponse'
            Prelude.<$> (x Data..?> "registryScanningConfiguration")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    PutRegistryScanningConfiguration
  where
  hashWithSalt
    _salt
    PutRegistryScanningConfiguration' {..} =
      _salt
        `Prelude.hashWithSalt` rules
        `Prelude.hashWithSalt` scanType

instance
  Prelude.NFData
    PutRegistryScanningConfiguration
  where
  rnf PutRegistryScanningConfiguration' {..} =
    Prelude.rnf rules
      `Prelude.seq` Prelude.rnf scanType

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

instance Data.ToJSON PutRegistryScanningConfiguration where
  toJSON PutRegistryScanningConfiguration' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("rules" Data..=) Prelude.<$> rules,
            ("scanType" Data..=) Prelude.<$> scanType
          ]
      )

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

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

-- | /See:/ 'newPutRegistryScanningConfigurationResponse' smart constructor.
data PutRegistryScanningConfigurationResponse = PutRegistryScanningConfigurationResponse'
  { -- | The scanning configuration for your registry.
    registryScanningConfiguration :: Prelude.Maybe RegistryScanningConfiguration,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PutRegistryScanningConfigurationResponse' 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:
--
-- 'registryScanningConfiguration', 'putRegistryScanningConfigurationResponse_registryScanningConfiguration' - The scanning configuration for your registry.
--
-- 'httpStatus', 'putRegistryScanningConfigurationResponse_httpStatus' - The response's http status code.
newPutRegistryScanningConfigurationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  PutRegistryScanningConfigurationResponse
newPutRegistryScanningConfigurationResponse
  pHttpStatus_ =
    PutRegistryScanningConfigurationResponse'
      { registryScanningConfiguration =
          Prelude.Nothing,
        httpStatus = pHttpStatus_
      }

-- | The scanning configuration for your registry.
putRegistryScanningConfigurationResponse_registryScanningConfiguration :: Lens.Lens' PutRegistryScanningConfigurationResponse (Prelude.Maybe RegistryScanningConfiguration)
putRegistryScanningConfigurationResponse_registryScanningConfiguration = Lens.lens (\PutRegistryScanningConfigurationResponse' {registryScanningConfiguration} -> registryScanningConfiguration) (\s@PutRegistryScanningConfigurationResponse' {} a -> s {registryScanningConfiguration = a} :: PutRegistryScanningConfigurationResponse)

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

instance
  Prelude.NFData
    PutRegistryScanningConfigurationResponse
  where
  rnf PutRegistryScanningConfigurationResponse' {..} =
    Prelude.rnf registryScanningConfiguration
      `Prelude.seq` Prelude.rnf httpStatus