packages feed

amazonka-ecr-2.0: gen/Amazonka/ECR/Types/PackageVulnerabilityDetails.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.ECR.Types.PackageVulnerabilityDetails
-- 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.ECR.Types.PackageVulnerabilityDetails 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.CvssScore
import Amazonka.ECR.Types.VulnerablePackage
import qualified Amazonka.Prelude as Prelude

-- | Information about a package vulnerability finding.
--
-- /See:/ 'newPackageVulnerabilityDetails' smart constructor.
data PackageVulnerabilityDetails = PackageVulnerabilityDetails'
  { -- | An object that contains details about the CVSS score of a finding.
    cvss :: Prelude.Maybe [CvssScore],
    -- | One or more URLs that contain details about this vulnerability type.
    referenceUrls :: Prelude.Maybe [Prelude.Text],
    -- | One or more vulnerabilities related to the one identified in this
    -- finding.
    relatedVulnerabilities :: Prelude.Maybe [Prelude.Text],
    -- | The source of the vulnerability information.
    source :: Prelude.Maybe Prelude.Text,
    -- | A URL to the source of the vulnerability information.
    sourceUrl :: Prelude.Maybe Prelude.Text,
    -- | The date and time that this vulnerability was first added to the
    -- vendor\'s database.
    vendorCreatedAt :: Prelude.Maybe Data.POSIX,
    -- | The severity the vendor has given to this vulnerability type.
    vendorSeverity :: Prelude.Maybe Prelude.Text,
    -- | The date and time the vendor last updated this vulnerability in their
    -- database.
    vendorUpdatedAt :: Prelude.Maybe Data.POSIX,
    -- | The ID given to this vulnerability.
    vulnerabilityId :: Prelude.Maybe Prelude.Text,
    -- | The packages impacted by this vulnerability.
    vulnerablePackages :: Prelude.Maybe [VulnerablePackage]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'PackageVulnerabilityDetails' 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:
--
-- 'cvss', 'packageVulnerabilityDetails_cvss' - An object that contains details about the CVSS score of a finding.
--
-- 'referenceUrls', 'packageVulnerabilityDetails_referenceUrls' - One or more URLs that contain details about this vulnerability type.
--
-- 'relatedVulnerabilities', 'packageVulnerabilityDetails_relatedVulnerabilities' - One or more vulnerabilities related to the one identified in this
-- finding.
--
-- 'source', 'packageVulnerabilityDetails_source' - The source of the vulnerability information.
--
-- 'sourceUrl', 'packageVulnerabilityDetails_sourceUrl' - A URL to the source of the vulnerability information.
--
-- 'vendorCreatedAt', 'packageVulnerabilityDetails_vendorCreatedAt' - The date and time that this vulnerability was first added to the
-- vendor\'s database.
--
-- 'vendorSeverity', 'packageVulnerabilityDetails_vendorSeverity' - The severity the vendor has given to this vulnerability type.
--
-- 'vendorUpdatedAt', 'packageVulnerabilityDetails_vendorUpdatedAt' - The date and time the vendor last updated this vulnerability in their
-- database.
--
-- 'vulnerabilityId', 'packageVulnerabilityDetails_vulnerabilityId' - The ID given to this vulnerability.
--
-- 'vulnerablePackages', 'packageVulnerabilityDetails_vulnerablePackages' - The packages impacted by this vulnerability.
newPackageVulnerabilityDetails ::
  PackageVulnerabilityDetails
newPackageVulnerabilityDetails =
  PackageVulnerabilityDetails'
    { cvss =
        Prelude.Nothing,
      referenceUrls = Prelude.Nothing,
      relatedVulnerabilities = Prelude.Nothing,
      source = Prelude.Nothing,
      sourceUrl = Prelude.Nothing,
      vendorCreatedAt = Prelude.Nothing,
      vendorSeverity = Prelude.Nothing,
      vendorUpdatedAt = Prelude.Nothing,
      vulnerabilityId = Prelude.Nothing,
      vulnerablePackages = Prelude.Nothing
    }

-- | An object that contains details about the CVSS score of a finding.
packageVulnerabilityDetails_cvss :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe [CvssScore])
packageVulnerabilityDetails_cvss = Lens.lens (\PackageVulnerabilityDetails' {cvss} -> cvss) (\s@PackageVulnerabilityDetails' {} a -> s {cvss = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Lens.coerced

-- | One or more URLs that contain details about this vulnerability type.
packageVulnerabilityDetails_referenceUrls :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe [Prelude.Text])
packageVulnerabilityDetails_referenceUrls = Lens.lens (\PackageVulnerabilityDetails' {referenceUrls} -> referenceUrls) (\s@PackageVulnerabilityDetails' {} a -> s {referenceUrls = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Lens.coerced

-- | One or more vulnerabilities related to the one identified in this
-- finding.
packageVulnerabilityDetails_relatedVulnerabilities :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe [Prelude.Text])
packageVulnerabilityDetails_relatedVulnerabilities = Lens.lens (\PackageVulnerabilityDetails' {relatedVulnerabilities} -> relatedVulnerabilities) (\s@PackageVulnerabilityDetails' {} a -> s {relatedVulnerabilities = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Lens.coerced

-- | The source of the vulnerability information.
packageVulnerabilityDetails_source :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.Text)
packageVulnerabilityDetails_source = Lens.lens (\PackageVulnerabilityDetails' {source} -> source) (\s@PackageVulnerabilityDetails' {} a -> s {source = a} :: PackageVulnerabilityDetails)

-- | A URL to the source of the vulnerability information.
packageVulnerabilityDetails_sourceUrl :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.Text)
packageVulnerabilityDetails_sourceUrl = Lens.lens (\PackageVulnerabilityDetails' {sourceUrl} -> sourceUrl) (\s@PackageVulnerabilityDetails' {} a -> s {sourceUrl = a} :: PackageVulnerabilityDetails)

-- | The date and time that this vulnerability was first added to the
-- vendor\'s database.
packageVulnerabilityDetails_vendorCreatedAt :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.UTCTime)
packageVulnerabilityDetails_vendorCreatedAt = Lens.lens (\PackageVulnerabilityDetails' {vendorCreatedAt} -> vendorCreatedAt) (\s@PackageVulnerabilityDetails' {} a -> s {vendorCreatedAt = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Data._Time

-- | The severity the vendor has given to this vulnerability type.
packageVulnerabilityDetails_vendorSeverity :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.Text)
packageVulnerabilityDetails_vendorSeverity = Lens.lens (\PackageVulnerabilityDetails' {vendorSeverity} -> vendorSeverity) (\s@PackageVulnerabilityDetails' {} a -> s {vendorSeverity = a} :: PackageVulnerabilityDetails)

-- | The date and time the vendor last updated this vulnerability in their
-- database.
packageVulnerabilityDetails_vendorUpdatedAt :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.UTCTime)
packageVulnerabilityDetails_vendorUpdatedAt = Lens.lens (\PackageVulnerabilityDetails' {vendorUpdatedAt} -> vendorUpdatedAt) (\s@PackageVulnerabilityDetails' {} a -> s {vendorUpdatedAt = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Data._Time

-- | The ID given to this vulnerability.
packageVulnerabilityDetails_vulnerabilityId :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe Prelude.Text)
packageVulnerabilityDetails_vulnerabilityId = Lens.lens (\PackageVulnerabilityDetails' {vulnerabilityId} -> vulnerabilityId) (\s@PackageVulnerabilityDetails' {} a -> s {vulnerabilityId = a} :: PackageVulnerabilityDetails)

-- | The packages impacted by this vulnerability.
packageVulnerabilityDetails_vulnerablePackages :: Lens.Lens' PackageVulnerabilityDetails (Prelude.Maybe [VulnerablePackage])
packageVulnerabilityDetails_vulnerablePackages = Lens.lens (\PackageVulnerabilityDetails' {vulnerablePackages} -> vulnerablePackages) (\s@PackageVulnerabilityDetails' {} a -> s {vulnerablePackages = a} :: PackageVulnerabilityDetails) Prelude.. Lens.mapping Lens.coerced

instance Data.FromJSON PackageVulnerabilityDetails where
  parseJSON =
    Data.withObject
      "PackageVulnerabilityDetails"
      ( \x ->
          PackageVulnerabilityDetails'
            Prelude.<$> (x Data..:? "cvss" Data..!= Prelude.mempty)
            Prelude.<*> (x Data..:? "referenceUrls" Data..!= Prelude.mempty)
            Prelude.<*> ( x
                            Data..:? "relatedVulnerabilities"
                            Data..!= Prelude.mempty
                        )
            Prelude.<*> (x Data..:? "source")
            Prelude.<*> (x Data..:? "sourceUrl")
            Prelude.<*> (x Data..:? "vendorCreatedAt")
            Prelude.<*> (x Data..:? "vendorSeverity")
            Prelude.<*> (x Data..:? "vendorUpdatedAt")
            Prelude.<*> (x Data..:? "vulnerabilityId")
            Prelude.<*> ( x
                            Data..:? "vulnerablePackages"
                            Data..!= Prelude.mempty
                        )
      )

instance Prelude.Hashable PackageVulnerabilityDetails where
  hashWithSalt _salt PackageVulnerabilityDetails' {..} =
    _salt
      `Prelude.hashWithSalt` cvss
      `Prelude.hashWithSalt` referenceUrls
      `Prelude.hashWithSalt` relatedVulnerabilities
      `Prelude.hashWithSalt` source
      `Prelude.hashWithSalt` sourceUrl
      `Prelude.hashWithSalt` vendorCreatedAt
      `Prelude.hashWithSalt` vendorSeverity
      `Prelude.hashWithSalt` vendorUpdatedAt
      `Prelude.hashWithSalt` vulnerabilityId
      `Prelude.hashWithSalt` vulnerablePackages

instance Prelude.NFData PackageVulnerabilityDetails where
  rnf PackageVulnerabilityDetails' {..} =
    Prelude.rnf cvss
      `Prelude.seq` Prelude.rnf referenceUrls
      `Prelude.seq` Prelude.rnf relatedVulnerabilities
      `Prelude.seq` Prelude.rnf source
      `Prelude.seq` Prelude.rnf sourceUrl
      `Prelude.seq` Prelude.rnf vendorCreatedAt
      `Prelude.seq` Prelude.rnf vendorSeverity
      `Prelude.seq` Prelude.rnf vendorUpdatedAt
      `Prelude.seq` Prelude.rnf vulnerabilityId
      `Prelude.seq` Prelude.rnf vulnerablePackages