packages feed

amazonka-grafana-2.0: gen/Amazonka/Grafana/UpdateWorkspaceAuthentication.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.Grafana.UpdateWorkspaceAuthentication
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Use this operation to define the identity provider (IdP) that this
-- workspace authenticates users from, using SAML. You can also map SAML
-- assertion attributes to workspace user information and define which
-- groups in the assertion attribute are to have the @Admin@ and @Editor@
-- roles in the workspace.
module Amazonka.Grafana.UpdateWorkspaceAuthentication
  ( -- * Creating a Request
    UpdateWorkspaceAuthentication (..),
    newUpdateWorkspaceAuthentication,

    -- * Request Lenses
    updateWorkspaceAuthentication_samlConfiguration,
    updateWorkspaceAuthentication_authenticationProviders,
    updateWorkspaceAuthentication_workspaceId,

    -- * Destructuring the Response
    UpdateWorkspaceAuthenticationResponse (..),
    newUpdateWorkspaceAuthenticationResponse,

    -- * Response Lenses
    updateWorkspaceAuthenticationResponse_httpStatus,
    updateWorkspaceAuthenticationResponse_authentication,
  )
where

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

-- | /See:/ 'newUpdateWorkspaceAuthentication' smart constructor.
data UpdateWorkspaceAuthentication = UpdateWorkspaceAuthentication'
  { -- | If the workspace uses SAML, use this structure to map SAML assertion
    -- attributes to workspace user information and define which groups in the
    -- assertion attribute are to have the @Admin@ and @Editor@ roles in the
    -- workspace.
    samlConfiguration :: Prelude.Maybe SamlConfiguration,
    -- | Specifies whether this workspace uses SAML 2.0, IAM Identity Center
    -- (successor to Single Sign-On), or both to authenticate users for using
    -- the Grafana console within a workspace. For more information, see
    -- <https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html User authentication in Amazon Managed Grafana>.
    authenticationProviders :: [AuthenticationProviderTypes],
    -- | The ID of the workspace to update the authentication for.
    workspaceId :: Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'UpdateWorkspaceAuthentication' 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:
--
-- 'samlConfiguration', 'updateWorkspaceAuthentication_samlConfiguration' - If the workspace uses SAML, use this structure to map SAML assertion
-- attributes to workspace user information and define which groups in the
-- assertion attribute are to have the @Admin@ and @Editor@ roles in the
-- workspace.
--
-- 'authenticationProviders', 'updateWorkspaceAuthentication_authenticationProviders' - Specifies whether this workspace uses SAML 2.0, IAM Identity Center
-- (successor to Single Sign-On), or both to authenticate users for using
-- the Grafana console within a workspace. For more information, see
-- <https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html User authentication in Amazon Managed Grafana>.
--
-- 'workspaceId', 'updateWorkspaceAuthentication_workspaceId' - The ID of the workspace to update the authentication for.
newUpdateWorkspaceAuthentication ::
  -- | 'workspaceId'
  Prelude.Text ->
  UpdateWorkspaceAuthentication
newUpdateWorkspaceAuthentication pWorkspaceId_ =
  UpdateWorkspaceAuthentication'
    { samlConfiguration =
        Prelude.Nothing,
      authenticationProviders = Prelude.mempty,
      workspaceId = pWorkspaceId_
    }

-- | If the workspace uses SAML, use this structure to map SAML assertion
-- attributes to workspace user information and define which groups in the
-- assertion attribute are to have the @Admin@ and @Editor@ roles in the
-- workspace.
updateWorkspaceAuthentication_samlConfiguration :: Lens.Lens' UpdateWorkspaceAuthentication (Prelude.Maybe SamlConfiguration)
updateWorkspaceAuthentication_samlConfiguration = Lens.lens (\UpdateWorkspaceAuthentication' {samlConfiguration} -> samlConfiguration) (\s@UpdateWorkspaceAuthentication' {} a -> s {samlConfiguration = a} :: UpdateWorkspaceAuthentication)

-- | Specifies whether this workspace uses SAML 2.0, IAM Identity Center
-- (successor to Single Sign-On), or both to authenticate users for using
-- the Grafana console within a workspace. For more information, see
-- <https://docs.aws.amazon.com/grafana/latest/userguide/authentication-in-AMG.html User authentication in Amazon Managed Grafana>.
updateWorkspaceAuthentication_authenticationProviders :: Lens.Lens' UpdateWorkspaceAuthentication [AuthenticationProviderTypes]
updateWorkspaceAuthentication_authenticationProviders = Lens.lens (\UpdateWorkspaceAuthentication' {authenticationProviders} -> authenticationProviders) (\s@UpdateWorkspaceAuthentication' {} a -> s {authenticationProviders = a} :: UpdateWorkspaceAuthentication) Prelude.. Lens.coerced

-- | The ID of the workspace to update the authentication for.
updateWorkspaceAuthentication_workspaceId :: Lens.Lens' UpdateWorkspaceAuthentication Prelude.Text
updateWorkspaceAuthentication_workspaceId = Lens.lens (\UpdateWorkspaceAuthentication' {workspaceId} -> workspaceId) (\s@UpdateWorkspaceAuthentication' {} a -> s {workspaceId = a} :: UpdateWorkspaceAuthentication)

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

instance
  Prelude.Hashable
    UpdateWorkspaceAuthentication
  where
  hashWithSalt _salt UpdateWorkspaceAuthentication' {..} =
    _salt
      `Prelude.hashWithSalt` samlConfiguration
      `Prelude.hashWithSalt` authenticationProviders
      `Prelude.hashWithSalt` workspaceId

instance Prelude.NFData UpdateWorkspaceAuthentication where
  rnf UpdateWorkspaceAuthentication' {..} =
    Prelude.rnf samlConfiguration
      `Prelude.seq` Prelude.rnf authenticationProviders
      `Prelude.seq` Prelude.rnf workspaceId

instance Data.ToHeaders UpdateWorkspaceAuthentication where
  toHeaders =
    Prelude.const
      ( Prelude.mconcat
          [ "Content-Type"
              Data.=# ( "application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON UpdateWorkspaceAuthentication where
  toJSON UpdateWorkspaceAuthentication' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("samlConfiguration" Data..=)
              Prelude.<$> samlConfiguration,
            Prelude.Just
              ( "authenticationProviders"
                  Data..= authenticationProviders
              )
          ]
      )

instance Data.ToPath UpdateWorkspaceAuthentication where
  toPath UpdateWorkspaceAuthentication' {..} =
    Prelude.mconcat
      [ "/workspaces/",
        Data.toBS workspaceId,
        "/authentication"
      ]

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

-- | /See:/ 'newUpdateWorkspaceAuthenticationResponse' smart constructor.
data UpdateWorkspaceAuthenticationResponse = UpdateWorkspaceAuthenticationResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int,
    -- | A structure that describes the user authentication for this workspace
    -- after the update is made.
    authentication :: AuthenticationDescription
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'UpdateWorkspaceAuthenticationResponse' 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', 'updateWorkspaceAuthenticationResponse_httpStatus' - The response's http status code.
--
-- 'authentication', 'updateWorkspaceAuthenticationResponse_authentication' - A structure that describes the user authentication for this workspace
-- after the update is made.
newUpdateWorkspaceAuthenticationResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  -- | 'authentication'
  AuthenticationDescription ->
  UpdateWorkspaceAuthenticationResponse
newUpdateWorkspaceAuthenticationResponse
  pHttpStatus_
  pAuthentication_ =
    UpdateWorkspaceAuthenticationResponse'
      { httpStatus =
          pHttpStatus_,
        authentication = pAuthentication_
      }

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

-- | A structure that describes the user authentication for this workspace
-- after the update is made.
updateWorkspaceAuthenticationResponse_authentication :: Lens.Lens' UpdateWorkspaceAuthenticationResponse AuthenticationDescription
updateWorkspaceAuthenticationResponse_authentication = Lens.lens (\UpdateWorkspaceAuthenticationResponse' {authentication} -> authentication) (\s@UpdateWorkspaceAuthenticationResponse' {} a -> s {authentication = a} :: UpdateWorkspaceAuthenticationResponse)

instance
  Prelude.NFData
    UpdateWorkspaceAuthenticationResponse
  where
  rnf UpdateWorkspaceAuthenticationResponse' {..} =
    Prelude.rnf httpStatus
      `Prelude.seq` Prelude.rnf authentication