packages feed

amazonka-securityhub-2.0: gen/Amazonka/SecurityHub/Types/StandardsControl.hs

{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE NamedFieldPuns #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-unused-imports #-}
{-# OPTIONS_GHC -fno-warn-unused-matches #-}

-- Derived from AWS service descriptions, licensed under Apache 2.0.

-- |
-- Module      : Amazonka.SecurityHub.Types.StandardsControl
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
module Amazonka.SecurityHub.Types.StandardsControl 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 Amazonka.SecurityHub.Types.ControlStatus
import Amazonka.SecurityHub.Types.SeverityRating

-- | Details for an individual security standard control.
--
-- /See:/ 'newStandardsControl' smart constructor.
data StandardsControl = StandardsControl'
  { -- | The identifier of the security standard control.
    controlId :: Prelude.Maybe Prelude.Text,
    -- | The current status of the security standard control. Indicates whether
    -- the control is enabled or disabled. Security Hub does not check against
    -- disabled controls.
    controlStatus :: Prelude.Maybe ControlStatus,
    -- | The date and time that the status of the security standard control was
    -- most recently updated.
    controlStatusUpdatedAt :: Prelude.Maybe Data.ISO8601,
    -- | The longer description of the security standard control. Provides
    -- information about what the control is checking for.
    description :: Prelude.Maybe Prelude.Text,
    -- | The reason provided for the most recent change in status for the
    -- control.
    disabledReason :: Prelude.Maybe Prelude.Text,
    -- | The list of requirements that are related to this control.
    relatedRequirements :: Prelude.Maybe [Prelude.Text],
    -- | A link to remediation information for the control in the Security Hub
    -- user documentation.
    remediationUrl :: Prelude.Maybe Prelude.Text,
    -- | The severity of findings generated from this security standard control.
    --
    -- The finding severity is based on an assessment of how easy it would be
    -- to compromise Amazon Web Services resources if the issue is detected.
    severityRating :: Prelude.Maybe SeverityRating,
    -- | The ARN of the security standard control.
    standardsControlArn :: Prelude.Maybe Prelude.Text,
    -- | The title of the security standard control.
    title :: Prelude.Maybe Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'StandardsControl' 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:
--
-- 'controlId', 'standardsControl_controlId' - The identifier of the security standard control.
--
-- 'controlStatus', 'standardsControl_controlStatus' - The current status of the security standard control. Indicates whether
-- the control is enabled or disabled. Security Hub does not check against
-- disabled controls.
--
-- 'controlStatusUpdatedAt', 'standardsControl_controlStatusUpdatedAt' - The date and time that the status of the security standard control was
-- most recently updated.
--
-- 'description', 'standardsControl_description' - The longer description of the security standard control. Provides
-- information about what the control is checking for.
--
-- 'disabledReason', 'standardsControl_disabledReason' - The reason provided for the most recent change in status for the
-- control.
--
-- 'relatedRequirements', 'standardsControl_relatedRequirements' - The list of requirements that are related to this control.
--
-- 'remediationUrl', 'standardsControl_remediationUrl' - A link to remediation information for the control in the Security Hub
-- user documentation.
--
-- 'severityRating', 'standardsControl_severityRating' - The severity of findings generated from this security standard control.
--
-- The finding severity is based on an assessment of how easy it would be
-- to compromise Amazon Web Services resources if the issue is detected.
--
-- 'standardsControlArn', 'standardsControl_standardsControlArn' - The ARN of the security standard control.
--
-- 'title', 'standardsControl_title' - The title of the security standard control.
newStandardsControl ::
  StandardsControl
newStandardsControl =
  StandardsControl'
    { controlId = Prelude.Nothing,
      controlStatus = Prelude.Nothing,
      controlStatusUpdatedAt = Prelude.Nothing,
      description = Prelude.Nothing,
      disabledReason = Prelude.Nothing,
      relatedRequirements = Prelude.Nothing,
      remediationUrl = Prelude.Nothing,
      severityRating = Prelude.Nothing,
      standardsControlArn = Prelude.Nothing,
      title = Prelude.Nothing
    }

-- | The identifier of the security standard control.
standardsControl_controlId :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_controlId = Lens.lens (\StandardsControl' {controlId} -> controlId) (\s@StandardsControl' {} a -> s {controlId = a} :: StandardsControl)

-- | The current status of the security standard control. Indicates whether
-- the control is enabled or disabled. Security Hub does not check against
-- disabled controls.
standardsControl_controlStatus :: Lens.Lens' StandardsControl (Prelude.Maybe ControlStatus)
standardsControl_controlStatus = Lens.lens (\StandardsControl' {controlStatus} -> controlStatus) (\s@StandardsControl' {} a -> s {controlStatus = a} :: StandardsControl)

-- | The date and time that the status of the security standard control was
-- most recently updated.
standardsControl_controlStatusUpdatedAt :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.UTCTime)
standardsControl_controlStatusUpdatedAt = Lens.lens (\StandardsControl' {controlStatusUpdatedAt} -> controlStatusUpdatedAt) (\s@StandardsControl' {} a -> s {controlStatusUpdatedAt = a} :: StandardsControl) Prelude.. Lens.mapping Data._Time

-- | The longer description of the security standard control. Provides
-- information about what the control is checking for.
standardsControl_description :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_description = Lens.lens (\StandardsControl' {description} -> description) (\s@StandardsControl' {} a -> s {description = a} :: StandardsControl)

-- | The reason provided for the most recent change in status for the
-- control.
standardsControl_disabledReason :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_disabledReason = Lens.lens (\StandardsControl' {disabledReason} -> disabledReason) (\s@StandardsControl' {} a -> s {disabledReason = a} :: StandardsControl)

-- | The list of requirements that are related to this control.
standardsControl_relatedRequirements :: Lens.Lens' StandardsControl (Prelude.Maybe [Prelude.Text])
standardsControl_relatedRequirements = Lens.lens (\StandardsControl' {relatedRequirements} -> relatedRequirements) (\s@StandardsControl' {} a -> s {relatedRequirements = a} :: StandardsControl) Prelude.. Lens.mapping Lens.coerced

-- | A link to remediation information for the control in the Security Hub
-- user documentation.
standardsControl_remediationUrl :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_remediationUrl = Lens.lens (\StandardsControl' {remediationUrl} -> remediationUrl) (\s@StandardsControl' {} a -> s {remediationUrl = a} :: StandardsControl)

-- | The severity of findings generated from this security standard control.
--
-- The finding severity is based on an assessment of how easy it would be
-- to compromise Amazon Web Services resources if the issue is detected.
standardsControl_severityRating :: Lens.Lens' StandardsControl (Prelude.Maybe SeverityRating)
standardsControl_severityRating = Lens.lens (\StandardsControl' {severityRating} -> severityRating) (\s@StandardsControl' {} a -> s {severityRating = a} :: StandardsControl)

-- | The ARN of the security standard control.
standardsControl_standardsControlArn :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_standardsControlArn = Lens.lens (\StandardsControl' {standardsControlArn} -> standardsControlArn) (\s@StandardsControl' {} a -> s {standardsControlArn = a} :: StandardsControl)

-- | The title of the security standard control.
standardsControl_title :: Lens.Lens' StandardsControl (Prelude.Maybe Prelude.Text)
standardsControl_title = Lens.lens (\StandardsControl' {title} -> title) (\s@StandardsControl' {} a -> s {title = a} :: StandardsControl)

instance Data.FromJSON StandardsControl where
  parseJSON =
    Data.withObject
      "StandardsControl"
      ( \x ->
          StandardsControl'
            Prelude.<$> (x Data..:? "ControlId")
            Prelude.<*> (x Data..:? "ControlStatus")
            Prelude.<*> (x Data..:? "ControlStatusUpdatedAt")
            Prelude.<*> (x Data..:? "Description")
            Prelude.<*> (x Data..:? "DisabledReason")
            Prelude.<*> ( x
                            Data..:? "RelatedRequirements"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "RemediationUrl")
            Prelude.<*> (x Data..:? "SeverityRating")
            Prelude.<*> (x Data..:? "StandardsControlArn")
            Prelude.<*> (x Data..:? "Title")
      )

instance Prelude.Hashable StandardsControl where
  hashWithSalt _salt StandardsControl' {..} =
    _salt
      `Prelude.hashWithSalt` controlId
      `Prelude.hashWithSalt` controlStatus
      `Prelude.hashWithSalt` controlStatusUpdatedAt
      `Prelude.hashWithSalt` description
      `Prelude.hashWithSalt` disabledReason
      `Prelude.hashWithSalt` relatedRequirements
      `Prelude.hashWithSalt` remediationUrl
      `Prelude.hashWithSalt` severityRating
      `Prelude.hashWithSalt` standardsControlArn
      `Prelude.hashWithSalt` title

instance Prelude.NFData StandardsControl where
  rnf StandardsControl' {..} =
    Prelude.rnf controlId
      `Prelude.seq` Prelude.rnf controlStatus
      `Prelude.seq` Prelude.rnf controlStatusUpdatedAt
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf disabledReason
      `Prelude.seq` Prelude.rnf relatedRequirements
      `Prelude.seq` Prelude.rnf remediationUrl
      `Prelude.seq` Prelude.rnf severityRating
      `Prelude.seq` Prelude.rnf standardsControlArn
      `Prelude.seq` Prelude.rnf title