packages feed

amazonka-inspector-2.0: gen/Amazonka/Inspector/CreateAssessmentTemplate.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.Inspector.CreateAssessmentTemplate
-- 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 an assessment template for the assessment target that is
-- specified by the ARN of the assessment target. If the
-- <https://docs.aws.amazon.com/inspector/latest/userguide/inspector_slr.html service-linked role>
-- isn’t already registered, this action also creates and registers a
-- service-linked role to grant Amazon Inspector access to AWS Services
-- needed to perform security assessments.
module Amazonka.Inspector.CreateAssessmentTemplate
  ( -- * Creating a Request
    CreateAssessmentTemplate (..),
    newCreateAssessmentTemplate,

    -- * Request Lenses
    createAssessmentTemplate_userAttributesForFindings,
    createAssessmentTemplate_assessmentTargetArn,
    createAssessmentTemplate_assessmentTemplateName,
    createAssessmentTemplate_durationInSeconds,
    createAssessmentTemplate_rulesPackageArns,

    -- * Destructuring the Response
    CreateAssessmentTemplateResponse (..),
    newCreateAssessmentTemplateResponse,

    -- * Response Lenses
    createAssessmentTemplateResponse_httpStatus,
    createAssessmentTemplateResponse_assessmentTemplateArn,
  )
where

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

-- | /See:/ 'newCreateAssessmentTemplate' smart constructor.
data CreateAssessmentTemplate = CreateAssessmentTemplate'
  { -- | The user-defined attributes that are assigned to every finding that is
    -- generated by the assessment run that uses this assessment template. An
    -- attribute is a key and value pair (an Attribute object). Within an
    -- assessment template, each key must be unique.
    userAttributesForFindings :: Prelude.Maybe [Attribute],
    -- | The ARN that specifies the assessment target for which you want to
    -- create the assessment template.
    assessmentTargetArn :: Prelude.Text,
    -- | The user-defined name that identifies the assessment template that you
    -- want to create. You can create several assessment templates for an
    -- assessment target. The names of the assessment templates that correspond
    -- to a particular assessment target must be unique.
    assessmentTemplateName :: Prelude.Text,
    -- | The duration of the assessment run in seconds.
    durationInSeconds :: Prelude.Natural,
    -- | The ARNs that specify the rules packages that you want to attach to the
    -- assessment template.
    rulesPackageArns :: [Prelude.Text]
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateAssessmentTemplate' 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:
--
-- 'userAttributesForFindings', 'createAssessmentTemplate_userAttributesForFindings' - The user-defined attributes that are assigned to every finding that is
-- generated by the assessment run that uses this assessment template. An
-- attribute is a key and value pair (an Attribute object). Within an
-- assessment template, each key must be unique.
--
-- 'assessmentTargetArn', 'createAssessmentTemplate_assessmentTargetArn' - The ARN that specifies the assessment target for which you want to
-- create the assessment template.
--
-- 'assessmentTemplateName', 'createAssessmentTemplate_assessmentTemplateName' - The user-defined name that identifies the assessment template that you
-- want to create. You can create several assessment templates for an
-- assessment target. The names of the assessment templates that correspond
-- to a particular assessment target must be unique.
--
-- 'durationInSeconds', 'createAssessmentTemplate_durationInSeconds' - The duration of the assessment run in seconds.
--
-- 'rulesPackageArns', 'createAssessmentTemplate_rulesPackageArns' - The ARNs that specify the rules packages that you want to attach to the
-- assessment template.
newCreateAssessmentTemplate ::
  -- | 'assessmentTargetArn'
  Prelude.Text ->
  -- | 'assessmentTemplateName'
  Prelude.Text ->
  -- | 'durationInSeconds'
  Prelude.Natural ->
  CreateAssessmentTemplate
newCreateAssessmentTemplate
  pAssessmentTargetArn_
  pAssessmentTemplateName_
  pDurationInSeconds_ =
    CreateAssessmentTemplate'
      { userAttributesForFindings =
          Prelude.Nothing,
        assessmentTargetArn = pAssessmentTargetArn_,
        assessmentTemplateName = pAssessmentTemplateName_,
        durationInSeconds = pDurationInSeconds_,
        rulesPackageArns = Prelude.mempty
      }

-- | The user-defined attributes that are assigned to every finding that is
-- generated by the assessment run that uses this assessment template. An
-- attribute is a key and value pair (an Attribute object). Within an
-- assessment template, each key must be unique.
createAssessmentTemplate_userAttributesForFindings :: Lens.Lens' CreateAssessmentTemplate (Prelude.Maybe [Attribute])
createAssessmentTemplate_userAttributesForFindings = Lens.lens (\CreateAssessmentTemplate' {userAttributesForFindings} -> userAttributesForFindings) (\s@CreateAssessmentTemplate' {} a -> s {userAttributesForFindings = a} :: CreateAssessmentTemplate) Prelude.. Lens.mapping Lens.coerced

-- | The ARN that specifies the assessment target for which you want to
-- create the assessment template.
createAssessmentTemplate_assessmentTargetArn :: Lens.Lens' CreateAssessmentTemplate Prelude.Text
createAssessmentTemplate_assessmentTargetArn = Lens.lens (\CreateAssessmentTemplate' {assessmentTargetArn} -> assessmentTargetArn) (\s@CreateAssessmentTemplate' {} a -> s {assessmentTargetArn = a} :: CreateAssessmentTemplate)

-- | The user-defined name that identifies the assessment template that you
-- want to create. You can create several assessment templates for an
-- assessment target. The names of the assessment templates that correspond
-- to a particular assessment target must be unique.
createAssessmentTemplate_assessmentTemplateName :: Lens.Lens' CreateAssessmentTemplate Prelude.Text
createAssessmentTemplate_assessmentTemplateName = Lens.lens (\CreateAssessmentTemplate' {assessmentTemplateName} -> assessmentTemplateName) (\s@CreateAssessmentTemplate' {} a -> s {assessmentTemplateName = a} :: CreateAssessmentTemplate)

-- | The duration of the assessment run in seconds.
createAssessmentTemplate_durationInSeconds :: Lens.Lens' CreateAssessmentTemplate Prelude.Natural
createAssessmentTemplate_durationInSeconds = Lens.lens (\CreateAssessmentTemplate' {durationInSeconds} -> durationInSeconds) (\s@CreateAssessmentTemplate' {} a -> s {durationInSeconds = a} :: CreateAssessmentTemplate)

-- | The ARNs that specify the rules packages that you want to attach to the
-- assessment template.
createAssessmentTemplate_rulesPackageArns :: Lens.Lens' CreateAssessmentTemplate [Prelude.Text]
createAssessmentTemplate_rulesPackageArns = Lens.lens (\CreateAssessmentTemplate' {rulesPackageArns} -> rulesPackageArns) (\s@CreateAssessmentTemplate' {} a -> s {rulesPackageArns = a} :: CreateAssessmentTemplate) Prelude.. Lens.coerced

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

instance Prelude.Hashable CreateAssessmentTemplate where
  hashWithSalt _salt CreateAssessmentTemplate' {..} =
    _salt
      `Prelude.hashWithSalt` userAttributesForFindings
      `Prelude.hashWithSalt` assessmentTargetArn
      `Prelude.hashWithSalt` assessmentTemplateName
      `Prelude.hashWithSalt` durationInSeconds
      `Prelude.hashWithSalt` rulesPackageArns

instance Prelude.NFData CreateAssessmentTemplate where
  rnf CreateAssessmentTemplate' {..} =
    Prelude.rnf userAttributesForFindings
      `Prelude.seq` Prelude.rnf assessmentTargetArn
      `Prelude.seq` Prelude.rnf assessmentTemplateName
      `Prelude.seq` Prelude.rnf durationInSeconds
      `Prelude.seq` Prelude.rnf rulesPackageArns

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

instance Data.ToJSON CreateAssessmentTemplate where
  toJSON CreateAssessmentTemplate' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("userAttributesForFindings" Data..=)
              Prelude.<$> userAttributesForFindings,
            Prelude.Just
              ("assessmentTargetArn" Data..= assessmentTargetArn),
            Prelude.Just
              ( "assessmentTemplateName"
                  Data..= assessmentTemplateName
              ),
            Prelude.Just
              ("durationInSeconds" Data..= durationInSeconds),
            Prelude.Just
              ("rulesPackageArns" Data..= rulesPackageArns)
          ]
      )

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

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

-- | /See:/ 'newCreateAssessmentTemplateResponse' smart constructor.
data CreateAssessmentTemplateResponse = CreateAssessmentTemplateResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | The ARN that specifies the assessment template that is created.
    assessmentTemplateArn :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateAssessmentTemplateResponse' 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:
--
-- 'httpStatus', 'createAssessmentTemplateResponse_httpStatus' - The response's http status code.
--
-- 'assessmentTemplateArn', 'createAssessmentTemplateResponse_assessmentTemplateArn' - The ARN that specifies the assessment template that is created.
newCreateAssessmentTemplateResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'assessmentTemplateArn'
  Prelude.Text ->
  CreateAssessmentTemplateResponse
newCreateAssessmentTemplateResponse
  pHttpStatus_
  pAssessmentTemplateArn_ =
    CreateAssessmentTemplateResponse'
      { httpStatus =
          pHttpStatus_,
        assessmentTemplateArn =
          pAssessmentTemplateArn_
      }

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

-- | The ARN that specifies the assessment template that is created.
createAssessmentTemplateResponse_assessmentTemplateArn :: Lens.Lens' CreateAssessmentTemplateResponse Prelude.Text
createAssessmentTemplateResponse_assessmentTemplateArn = Lens.lens (\CreateAssessmentTemplateResponse' {assessmentTemplateArn} -> assessmentTemplateArn) (\s@CreateAssessmentTemplateResponse' {} a -> s {assessmentTemplateArn = a} :: CreateAssessmentTemplateResponse)

instance
  Prelude.NFData
    CreateAssessmentTemplateResponse
  where
  rnf CreateAssessmentTemplateResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf assessmentTemplateArn