packages feed

amazonka-cognito-idp-2.0: gen/Amazonka/CognitoIdentityProvider/RevokeToken.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.CognitoIdentityProvider.RevokeToken
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Revokes all of the access tokens generated by, and at the same time as,
-- the specified refresh token. After a token is revoked, you can\'t use
-- the revoked token to access Amazon Cognito user APIs, or to authorize
-- access to your resource server.
module Amazonka.CognitoIdentityProvider.RevokeToken
  ( -- * Creating a Request
    RevokeToken (..),
    newRevokeToken,

    -- * Request Lenses
    revokeToken_clientSecret,
    revokeToken_token,
    revokeToken_clientId,

    -- * Destructuring the Response
    RevokeTokenResponse (..),
    newRevokeTokenResponse,

    -- * Response Lenses
    revokeTokenResponse_httpStatus,
  )
where

import Amazonka.CognitoIdentityProvider.Types
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 qualified Amazonka.Request as Request
import qualified Amazonka.Response as Response

-- | /See:/ 'newRevokeToken' smart constructor.
data RevokeToken = RevokeToken'
  { -- | The secret for the client ID. This is required only if the client ID has
    -- a secret.
    clientSecret :: Prelude.Maybe (Data.Sensitive Prelude.Text),
    -- | The refresh token that you want to revoke.
    token :: Data.Sensitive Prelude.Text,
    -- | The client ID for the token that you want to revoke.
    clientId :: Data.Sensitive Prelude.Text
  }
  deriving (Prelude.Eq, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RevokeToken' 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:
--
-- 'clientSecret', 'revokeToken_clientSecret' - The secret for the client ID. This is required only if the client ID has
-- a secret.
--
-- 'token', 'revokeToken_token' - The refresh token that you want to revoke.
--
-- 'clientId', 'revokeToken_clientId' - The client ID for the token that you want to revoke.
newRevokeToken ::
  -- | 'token'
  Prelude.Text ->
  -- | 'clientId'
  Prelude.Text ->
  RevokeToken
newRevokeToken pToken_ pClientId_ =
  RevokeToken'
    { clientSecret = Prelude.Nothing,
      token = Data._Sensitive Lens.# pToken_,
      clientId = Data._Sensitive Lens.# pClientId_
    }

-- | The secret for the client ID. This is required only if the client ID has
-- a secret.
revokeToken_clientSecret :: Lens.Lens' RevokeToken (Prelude.Maybe Prelude.Text)
revokeToken_clientSecret = Lens.lens (\RevokeToken' {clientSecret} -> clientSecret) (\s@RevokeToken' {} a -> s {clientSecret = a} :: RevokeToken) Prelude.. Lens.mapping Data._Sensitive

-- | The refresh token that you want to revoke.
revokeToken_token :: Lens.Lens' RevokeToken Prelude.Text
revokeToken_token = Lens.lens (\RevokeToken' {token} -> token) (\s@RevokeToken' {} a -> s {token = a} :: RevokeToken) Prelude.. Data._Sensitive

-- | The client ID for the token that you want to revoke.
revokeToken_clientId :: Lens.Lens' RevokeToken Prelude.Text
revokeToken_clientId = Lens.lens (\RevokeToken' {clientId} -> clientId) (\s@RevokeToken' {} a -> s {clientId = a} :: RevokeToken) Prelude.. Data._Sensitive

instance Core.AWSRequest RevokeToken where
  type AWSResponse RevokeToken = RevokeTokenResponse
  request overrides =
    Request.postJSON (overrides defaultService)
  response =
    Response.receiveEmpty
      ( \s h x ->
          RevokeTokenResponse'
            Prelude.<$> (Prelude.pure (Prelude.fromEnum s))
      )

instance Prelude.Hashable RevokeToken where
  hashWithSalt _salt RevokeToken' {..} =
    _salt
      `Prelude.hashWithSalt` clientSecret
      `Prelude.hashWithSalt` token
      `Prelude.hashWithSalt` clientId

instance Prelude.NFData RevokeToken where
  rnf RevokeToken' {..} =
    Prelude.rnf clientSecret
      `Prelude.seq` Prelude.rnf token
      `Prelude.seq` Prelude.rnf clientId

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

instance Data.ToJSON RevokeToken where
  toJSON RevokeToken' {..} =
    Data.object
      ( Prelude.catMaybes
          [ ("ClientSecret" Data..=) Prelude.<$> clientSecret,
            Prelude.Just ("Token" Data..= token),
            Prelude.Just ("ClientId" Data..= clientId)
          ]
      )

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

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

-- | /See:/ 'newRevokeTokenResponse' smart constructor.
data RevokeTokenResponse = RevokeTokenResponse'
  { -- | The response's http status code.
    httpStatus :: Prelude.Int
  }
  deriving (Prelude.Eq, Prelude.Read, Prelude.Show, Prelude.Generic)

-- |
-- Create a value of 'RevokeTokenResponse' 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', 'revokeTokenResponse_httpStatus' - The response's http status code.
newRevokeTokenResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  RevokeTokenResponse
newRevokeTokenResponse pHttpStatus_ =
  RevokeTokenResponse' {httpStatus = pHttpStatus_}

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

instance Prelude.NFData RevokeTokenResponse where
  rnf RevokeTokenResponse' {..} = Prelude.rnf httpStatus