packages feed

amazonka-ec2-2.0: gen/Amazonka/EC2/CreateVerifiedAccessTrustProvider.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.EC2.CreateVerifiedAccessTrustProvider
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- A trust provider is a third-party entity that creates, maintains, and
-- manages identity information for users and devices. When an application
-- request is made, the identity information sent by the trust provider
-- will be evaluated by Amazon Web Services Verified Access, before
-- allowing or denying the application request.
module Amazonka.EC2.CreateVerifiedAccessTrustProvider
  ( -- * Creating a Request
    CreateVerifiedAccessTrustProvider (..),
    newCreateVerifiedAccessTrustProvider,

    -- * Request Lenses
    createVerifiedAccessTrustProvider_clientToken,
    createVerifiedAccessTrustProvider_description,
    createVerifiedAccessTrustProvider_deviceOptions,
    createVerifiedAccessTrustProvider_deviceTrustProviderType,
    createVerifiedAccessTrustProvider_dryRun,
    createVerifiedAccessTrustProvider_oidcOptions,
    createVerifiedAccessTrustProvider_tagSpecifications,
    createVerifiedAccessTrustProvider_userTrustProviderType,
    createVerifiedAccessTrustProvider_trustProviderType,
    createVerifiedAccessTrustProvider_policyReferenceName,

    -- * Destructuring the Response
    CreateVerifiedAccessTrustProviderResponse (..),
    newCreateVerifiedAccessTrustProviderResponse,

    -- * Response Lenses
    createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider,
    createVerifiedAccessTrustProviderResponse_httpStatus,
  )
where

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

-- | /See:/ 'newCreateVerifiedAccessTrustProvider' smart constructor.
data CreateVerifiedAccessTrustProvider = CreateVerifiedAccessTrustProvider'
  { -- | A unique, case-sensitive token that you provide to ensure idempotency of
    -- your modification request. For more information, see
    -- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
    clientToken :: Prelude.Maybe Prelude.Text,
    -- | A description for the Amazon Web Services Verified Access trust
    -- provider.
    description :: Prelude.Maybe Prelude.Text,
    -- | The options for device identity based trust providers.
    deviceOptions :: Prelude.Maybe CreateVerifiedAccessTrustProviderDeviceOptions,
    -- | The type of device-based trust provider.
    deviceTrustProviderType :: Prelude.Maybe DeviceTrustProviderType,
    -- | Checks whether you have the required permissions for the action, without
    -- actually making the request, and provides an error response. If you have
    -- the required permissions, the error response is @DryRunOperation@.
    -- Otherwise, it is @UnauthorizedOperation@.
    dryRun :: Prelude.Maybe Prelude.Bool,
    -- | The OpenID Connect details for an @oidc@-type, user-identity based trust
    -- provider.
    oidcOptions :: Prelude.Maybe CreateVerifiedAccessTrustProviderOidcOptions,
    -- | The tags to assign to the Amazon Web Services Verified Access trust
    -- provider.
    tagSpecifications :: Prelude.Maybe [TagSpecification],
    -- | The type of user-based trust provider.
    userTrustProviderType :: Prelude.Maybe UserTrustProviderType,
    -- | The type of trust provider can be either user or device-based.
    trustProviderType :: TrustProviderType,
    -- | The identifier to be used when working with policy rules.
    policyReferenceName :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateVerifiedAccessTrustProvider' 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:
--
-- 'clientToken', 'createVerifiedAccessTrustProvider_clientToken' - A unique, case-sensitive token that you provide to ensure idempotency of
-- your modification request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
--
-- 'description', 'createVerifiedAccessTrustProvider_description' - A description for the Amazon Web Services Verified Access trust
-- provider.
--
-- 'deviceOptions', 'createVerifiedAccessTrustProvider_deviceOptions' - The options for device identity based trust providers.
--
-- 'deviceTrustProviderType', 'createVerifiedAccessTrustProvider_deviceTrustProviderType' - The type of device-based trust provider.
--
-- 'dryRun', 'createVerifiedAccessTrustProvider_dryRun' - Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
--
-- 'oidcOptions', 'createVerifiedAccessTrustProvider_oidcOptions' - The OpenID Connect details for an @oidc@-type, user-identity based trust
-- provider.
--
-- 'tagSpecifications', 'createVerifiedAccessTrustProvider_tagSpecifications' - The tags to assign to the Amazon Web Services Verified Access trust
-- provider.
--
-- 'userTrustProviderType', 'createVerifiedAccessTrustProvider_userTrustProviderType' - The type of user-based trust provider.
--
-- 'trustProviderType', 'createVerifiedAccessTrustProvider_trustProviderType' - The type of trust provider can be either user or device-based.
--
-- 'policyReferenceName', 'createVerifiedAccessTrustProvider_policyReferenceName' - The identifier to be used when working with policy rules.
newCreateVerifiedAccessTrustProvider ::
  -- | 'trustProviderType'
  TrustProviderType ->
  -- | 'policyReferenceName'
  Prelude.Text ->
  CreateVerifiedAccessTrustProvider
newCreateVerifiedAccessTrustProvider
  pTrustProviderType_
  pPolicyReferenceName_ =
    CreateVerifiedAccessTrustProvider'
      { clientToken =
          Prelude.Nothing,
        description = Prelude.Nothing,
        deviceOptions = Prelude.Nothing,
        deviceTrustProviderType =
          Prelude.Nothing,
        dryRun = Prelude.Nothing,
        oidcOptions = Prelude.Nothing,
        tagSpecifications = Prelude.Nothing,
        userTrustProviderType = Prelude.Nothing,
        trustProviderType = pTrustProviderType_,
        policyReferenceName =
          pPolicyReferenceName_
      }

-- | A unique, case-sensitive token that you provide to ensure idempotency of
-- your modification request. For more information, see
-- <https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Run_Instance_Idempotency.html Ensuring Idempotency>.
createVerifiedAccessTrustProvider_clientToken :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
createVerifiedAccessTrustProvider_clientToken = Lens.lens (\CreateVerifiedAccessTrustProvider' {clientToken} -> clientToken) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {clientToken = a} :: CreateVerifiedAccessTrustProvider)

-- | A description for the Amazon Web Services Verified Access trust
-- provider.
createVerifiedAccessTrustProvider_description :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Text)
createVerifiedAccessTrustProvider_description = Lens.lens (\CreateVerifiedAccessTrustProvider' {description} -> description) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {description = a} :: CreateVerifiedAccessTrustProvider)

-- | The options for device identity based trust providers.
createVerifiedAccessTrustProvider_deviceOptions :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe CreateVerifiedAccessTrustProviderDeviceOptions)
createVerifiedAccessTrustProvider_deviceOptions = Lens.lens (\CreateVerifiedAccessTrustProvider' {deviceOptions} -> deviceOptions) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {deviceOptions = a} :: CreateVerifiedAccessTrustProvider)

-- | The type of device-based trust provider.
createVerifiedAccessTrustProvider_deviceTrustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe DeviceTrustProviderType)
createVerifiedAccessTrustProvider_deviceTrustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {deviceTrustProviderType} -> deviceTrustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {deviceTrustProviderType = a} :: CreateVerifiedAccessTrustProvider)

-- | Checks whether you have the required permissions for the action, without
-- actually making the request, and provides an error response. If you have
-- the required permissions, the error response is @DryRunOperation@.
-- Otherwise, it is @UnauthorizedOperation@.
createVerifiedAccessTrustProvider_dryRun :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe Prelude.Bool)
createVerifiedAccessTrustProvider_dryRun = Lens.lens (\CreateVerifiedAccessTrustProvider' {dryRun} -> dryRun) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {dryRun = a} :: CreateVerifiedAccessTrustProvider)

-- | The OpenID Connect details for an @oidc@-type, user-identity based trust
-- provider.
createVerifiedAccessTrustProvider_oidcOptions :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe CreateVerifiedAccessTrustProviderOidcOptions)
createVerifiedAccessTrustProvider_oidcOptions = Lens.lens (\CreateVerifiedAccessTrustProvider' {oidcOptions} -> oidcOptions) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {oidcOptions = a} :: CreateVerifiedAccessTrustProvider)

-- | The tags to assign to the Amazon Web Services Verified Access trust
-- provider.
createVerifiedAccessTrustProvider_tagSpecifications :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe [TagSpecification])
createVerifiedAccessTrustProvider_tagSpecifications = Lens.lens (\CreateVerifiedAccessTrustProvider' {tagSpecifications} -> tagSpecifications) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {tagSpecifications = a} :: CreateVerifiedAccessTrustProvider) Prelude.. Lens.mapping Lens.coerced

-- | The type of user-based trust provider.
createVerifiedAccessTrustProvider_userTrustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider (Prelude.Maybe UserTrustProviderType)
createVerifiedAccessTrustProvider_userTrustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {userTrustProviderType} -> userTrustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {userTrustProviderType = a} :: CreateVerifiedAccessTrustProvider)

-- | The type of trust provider can be either user or device-based.
createVerifiedAccessTrustProvider_trustProviderType :: Lens.Lens' CreateVerifiedAccessTrustProvider TrustProviderType
createVerifiedAccessTrustProvider_trustProviderType = Lens.lens (\CreateVerifiedAccessTrustProvider' {trustProviderType} -> trustProviderType) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {trustProviderType = a} :: CreateVerifiedAccessTrustProvider)

-- | The identifier to be used when working with policy rules.
createVerifiedAccessTrustProvider_policyReferenceName :: Lens.Lens' CreateVerifiedAccessTrustProvider Prelude.Text
createVerifiedAccessTrustProvider_policyReferenceName = Lens.lens (\CreateVerifiedAccessTrustProvider' {policyReferenceName} -> policyReferenceName) (\s@CreateVerifiedAccessTrustProvider' {} a -> s {policyReferenceName = a} :: CreateVerifiedAccessTrustProvider)

instance
  Core.AWSRequest
    CreateVerifiedAccessTrustProvider
  where
  type
    AWSResponse CreateVerifiedAccessTrustProvider =
      CreateVerifiedAccessTrustProviderResponse
  request overrides =
    Request.postQuery (overrides defaultService)
  response =
    Response.receiveXML
      ( \s h x ->
          CreateVerifiedAccessTrustProviderResponse'
            Prelude.<$> (x Data..@? "verifiedAccessTrustProvider")
            Prelude.<*> (Prelude.pure (Prelude.fromEnum s))
      )

instance
  Prelude.Hashable
    CreateVerifiedAccessTrustProvider
  where
  hashWithSalt
    _salt
    CreateVerifiedAccessTrustProvider' {..} =
      _salt
        `Prelude.hashWithSalt` clientToken
        `Prelude.hashWithSalt` description
        `Prelude.hashWithSalt` deviceOptions
        `Prelude.hashWithSalt` deviceTrustProviderType
        `Prelude.hashWithSalt` dryRun
        `Prelude.hashWithSalt` oidcOptions
        `Prelude.hashWithSalt` tagSpecifications
        `Prelude.hashWithSalt` userTrustProviderType
        `Prelude.hashWithSalt` trustProviderType
        `Prelude.hashWithSalt` policyReferenceName

instance
  Prelude.NFData
    CreateVerifiedAccessTrustProvider
  where
  rnf CreateVerifiedAccessTrustProvider' {..} =
    Prelude.rnf clientToken
      `Prelude.seq` Prelude.rnf description
      `Prelude.seq` Prelude.rnf deviceOptions
      `Prelude.seq` Prelude.rnf deviceTrustProviderType
      `Prelude.seq` Prelude.rnf dryRun
      `Prelude.seq` Prelude.rnf oidcOptions
      `Prelude.seq` Prelude.rnf tagSpecifications
      `Prelude.seq` Prelude.rnf userTrustProviderType
      `Prelude.seq` Prelude.rnf trustProviderType
      `Prelude.seq` Prelude.rnf policyReferenceName

instance
  Data.ToHeaders
    CreateVerifiedAccessTrustProvider
  where
  toHeaders = Prelude.const Prelude.mempty

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

instance
  Data.ToQuery
    CreateVerifiedAccessTrustProvider
  where
  toQuery CreateVerifiedAccessTrustProvider' {..} =
    Prelude.mconcat
      [ "Action"
          Data.=: ( "CreateVerifiedAccessTrustProvider" ::
                      Prelude.ByteString
                  ),
        "Version"
          Data.=: ("2016-11-15" :: Prelude.ByteString),
        "ClientToken" Data.=: clientToken,
        "Description" Data.=: description,
        "DeviceOptions" Data.=: deviceOptions,
        "DeviceTrustProviderType"
          Data.=: deviceTrustProviderType,
        "DryRun" Data.=: dryRun,
        "OidcOptions" Data.=: oidcOptions,
        Data.toQuery
          ( Data.toQueryList "TagSpecification"
              Prelude.<$> tagSpecifications
          ),
        "UserTrustProviderType"
          Data.=: userTrustProviderType,
        "TrustProviderType" Data.=: trustProviderType,
        "PolicyReferenceName" Data.=: policyReferenceName
      ]

-- | /See:/ 'newCreateVerifiedAccessTrustProviderResponse' smart constructor.
data CreateVerifiedAccessTrustProviderResponse = CreateVerifiedAccessTrustProviderResponse'
  { -- | The ID of the Amazon Web Services Verified Access trust provider.
    verifiedAccessTrustProvider :: Prelude.Maybe VerifiedAccessTrustProvider,
    -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'CreateVerifiedAccessTrustProviderResponse' 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:
--
-- 'verifiedAccessTrustProvider', 'createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider' - The ID of the Amazon Web Services Verified Access trust provider.
--
-- 'httpStatus', 'createVerifiedAccessTrustProviderResponse_httpStatus' - The response's http status code.
newCreateVerifiedAccessTrustProviderResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateVerifiedAccessTrustProviderResponse
newCreateVerifiedAccessTrustProviderResponse
  pHttpStatus_ =
    CreateVerifiedAccessTrustProviderResponse'
      { verifiedAccessTrustProvider =
          Prelude.Nothing,
        httpStatus = pHttpStatus_
      }

-- | The ID of the Amazon Web Services Verified Access trust provider.
createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider :: Lens.Lens' CreateVerifiedAccessTrustProviderResponse (Prelude.Maybe VerifiedAccessTrustProvider)
createVerifiedAccessTrustProviderResponse_verifiedAccessTrustProvider = Lens.lens (\CreateVerifiedAccessTrustProviderResponse' {verifiedAccessTrustProvider} -> verifiedAccessTrustProvider) (\s@CreateVerifiedAccessTrustProviderResponse' {} a -> s {verifiedAccessTrustProvider = a} :: CreateVerifiedAccessTrustProviderResponse)

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

instance
  Prelude.NFData
    CreateVerifiedAccessTrustProviderResponse
  where
  rnf CreateVerifiedAccessTrustProviderResponse' {..} =
    Prelude.rnf verifiedAccessTrustProvider
      `Prelude.seq` Prelude.rnf httpStatus