{-# 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.AmplifyBackend.CreateToken
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Generates a one-time challenge code to authenticate a user into your
-- Amplify Admin UI.
module Amazonka.AmplifyBackend.CreateToken
  ( -- * Creating a Request
    CreateToken (..),
    newCreateToken,

    -- * Request Lenses
    createToken_appId,

    -- * Destructuring the Response
    CreateTokenResponse (..),
    newCreateTokenResponse,

    -- * Response Lenses
    createTokenResponse_appId,
    createTokenResponse_challengeCode,
    createTokenResponse_sessionId,
    createTokenResponse_ttl,
    createTokenResponse_httpStatus,
  )
where

import Amazonka.AmplifyBackend.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:/ 'newCreateToken' smart constructor.
data CreateToken = CreateToken'
  { -- | The app ID.
    CreateToken -> Text
appId :: Prelude.Text
  }
  deriving (CreateToken -> CreateToken -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateToken -> CreateToken -> Bool
$c/= :: CreateToken -> CreateToken -> Bool
== :: CreateToken -> CreateToken -> Bool
$c== :: CreateToken -> CreateToken -> Bool
Prelude.Eq, ReadPrec [CreateToken]
ReadPrec CreateToken
Int -> ReadS CreateToken
ReadS [CreateToken]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateToken]
$creadListPrec :: ReadPrec [CreateToken]
readPrec :: ReadPrec CreateToken
$creadPrec :: ReadPrec CreateToken
readList :: ReadS [CreateToken]
$creadList :: ReadS [CreateToken]
readsPrec :: Int -> ReadS CreateToken
$creadsPrec :: Int -> ReadS CreateToken
Prelude.Read, Int -> CreateToken -> ShowS
[CreateToken] -> ShowS
CreateToken -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateToken] -> ShowS
$cshowList :: [CreateToken] -> ShowS
show :: CreateToken -> String
$cshow :: CreateToken -> String
showsPrec :: Int -> CreateToken -> ShowS
$cshowsPrec :: Int -> CreateToken -> ShowS
Prelude.Show, forall x. Rep CreateToken x -> CreateToken
forall x. CreateToken -> Rep CreateToken x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateToken x -> CreateToken
$cfrom :: forall x. CreateToken -> Rep CreateToken x
Prelude.Generic)

-- |
-- Create a value of 'CreateToken' 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:
--
-- 'appId', 'createToken_appId' - The app ID.
newCreateToken ::
  -- | 'appId'
  Prelude.Text ->
  CreateToken
newCreateToken :: Text -> CreateToken
newCreateToken Text
pAppId_ =
  CreateToken' {$sel:appId:CreateToken' :: Text
appId = Text
pAppId_}

-- | The app ID.
createToken_appId :: Lens.Lens' CreateToken Prelude.Text
createToken_appId :: Lens' CreateToken Text
createToken_appId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateToken' {Text
appId :: Text
$sel:appId:CreateToken' :: CreateToken -> Text
appId} -> Text
appId) (\s :: CreateToken
s@CreateToken' {} Text
a -> CreateToken
s {$sel:appId:CreateToken' :: Text
appId = Text
a} :: CreateToken)

instance Core.AWSRequest CreateToken where
  type AWSResponse CreateToken = CreateTokenResponse
  request :: (Service -> Service) -> CreateToken -> Request CreateToken
request Service -> Service
overrides =
    forall a. (ToRequest a, ToJSON a) => Service -> a -> Request a
Request.postJSON (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy CreateToken
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse CreateToken)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
(Int -> ResponseHeaders -> Object -> Either String (AWSResponse a))
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveJSON
      ( \Int
s ResponseHeaders
h Object
x ->
          Maybe Text
-> Maybe Text
-> Maybe Text
-> Maybe Text
-> Int
-> CreateTokenResponse
CreateTokenResponse'
            forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
Prelude.<$> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"appId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"challengeCode")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"sessionId")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (Object
x forall a. FromJSON a => Object -> Key -> Either String (Maybe a)
Data..?> Key
"ttl")
            forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
Prelude.<*> (forall (f :: * -> *) a. Applicative f => a -> f a
Prelude.pure (forall a. Enum a => a -> Int
Prelude.fromEnum Int
s))
      )

instance Prelude.Hashable CreateToken where
  hashWithSalt :: Int -> CreateToken -> Int
hashWithSalt Int
_salt CreateToken' {Text
appId :: Text
$sel:appId:CreateToken' :: CreateToken -> Text
..} =
    Int
_salt forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
appId

instance Prelude.NFData CreateToken where
  rnf :: CreateToken -> ()
rnf CreateToken' {Text
appId :: Text
$sel:appId:CreateToken' :: CreateToken -> Text
..} = forall a. NFData a => a -> ()
Prelude.rnf Text
appId

instance Data.ToHeaders CreateToken where
  toHeaders :: CreateToken -> ResponseHeaders
toHeaders =
    forall a b. a -> b -> a
Prelude.const
      ( forall a. Monoid a => [a] -> a
Prelude.mconcat
          [ HeaderName
"Content-Type"
              forall a. ToHeader a => HeaderName -> a -> ResponseHeaders
Data.=# ( ByteString
"application/x-amz-json-1.1" ::
                          Prelude.ByteString
                      )
          ]
      )

instance Data.ToJSON CreateToken where
  toJSON :: CreateToken -> Value
toJSON = forall a b. a -> b -> a
Prelude.const (Object -> Value
Data.Object forall a. Monoid a => a
Prelude.mempty)

instance Data.ToPath CreateToken where
  toPath :: CreateToken -> ByteString
toPath CreateToken' {Text
appId :: Text
$sel:appId:CreateToken' :: CreateToken -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ByteString
"/backend/", forall a. ToByteString a => a -> ByteString
Data.toBS Text
appId, ByteString
"/challenge"]

instance Data.ToQuery CreateToken where
  toQuery :: CreateToken -> QueryString
toQuery = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

-- | /See:/ 'newCreateTokenResponse' smart constructor.
data CreateTokenResponse = CreateTokenResponse'
  { -- | The app ID.
    CreateTokenResponse -> Maybe Text
appId :: Prelude.Maybe Prelude.Text,
    -- | One-time challenge code for authenticating into the Amplify Admin UI.
    CreateTokenResponse -> Maybe Text
challengeCode :: Prelude.Maybe Prelude.Text,
    -- | A unique ID provided when creating a new challenge token.
    CreateTokenResponse -> Maybe Text
sessionId :: Prelude.Maybe Prelude.Text,
    -- | The expiry time for the one-time generated token code.
    CreateTokenResponse -> Maybe Text
ttl :: Prelude.Maybe Prelude.Text,
    -- | The response's http status code.
    CreateTokenResponse -> Int
httpStatus :: Prelude.Int
  }
  deriving (CreateTokenResponse -> CreateTokenResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: CreateTokenResponse -> CreateTokenResponse -> Bool
$c/= :: CreateTokenResponse -> CreateTokenResponse -> Bool
== :: CreateTokenResponse -> CreateTokenResponse -> Bool
$c== :: CreateTokenResponse -> CreateTokenResponse -> Bool
Prelude.Eq, ReadPrec [CreateTokenResponse]
ReadPrec CreateTokenResponse
Int -> ReadS CreateTokenResponse
ReadS [CreateTokenResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [CreateTokenResponse]
$creadListPrec :: ReadPrec [CreateTokenResponse]
readPrec :: ReadPrec CreateTokenResponse
$creadPrec :: ReadPrec CreateTokenResponse
readList :: ReadS [CreateTokenResponse]
$creadList :: ReadS [CreateTokenResponse]
readsPrec :: Int -> ReadS CreateTokenResponse
$creadsPrec :: Int -> ReadS CreateTokenResponse
Prelude.Read, Int -> CreateTokenResponse -> ShowS
[CreateTokenResponse] -> ShowS
CreateTokenResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [CreateTokenResponse] -> ShowS
$cshowList :: [CreateTokenResponse] -> ShowS
show :: CreateTokenResponse -> String
$cshow :: CreateTokenResponse -> String
showsPrec :: Int -> CreateTokenResponse -> ShowS
$cshowsPrec :: Int -> CreateTokenResponse -> ShowS
Prelude.Show, forall x. Rep CreateTokenResponse x -> CreateTokenResponse
forall x. CreateTokenResponse -> Rep CreateTokenResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep CreateTokenResponse x -> CreateTokenResponse
$cfrom :: forall x. CreateTokenResponse -> Rep CreateTokenResponse x
Prelude.Generic)

-- |
-- Create a value of 'CreateTokenResponse' 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:
--
-- 'appId', 'createTokenResponse_appId' - The app ID.
--
-- 'challengeCode', 'createTokenResponse_challengeCode' - One-time challenge code for authenticating into the Amplify Admin UI.
--
-- 'sessionId', 'createTokenResponse_sessionId' - A unique ID provided when creating a new challenge token.
--
-- 'ttl', 'createTokenResponse_ttl' - The expiry time for the one-time generated token code.
--
-- 'httpStatus', 'createTokenResponse_httpStatus' - The response's http status code.
newCreateTokenResponse ::
  -- | 'httpStatus'
  Prelude.Int ->
  CreateTokenResponse
newCreateTokenResponse :: Int -> CreateTokenResponse
newCreateTokenResponse Int
pHttpStatus_ =
  CreateTokenResponse'
    { $sel:appId:CreateTokenResponse' :: Maybe Text
appId = forall a. Maybe a
Prelude.Nothing,
      $sel:challengeCode:CreateTokenResponse' :: Maybe Text
challengeCode = forall a. Maybe a
Prelude.Nothing,
      $sel:sessionId:CreateTokenResponse' :: Maybe Text
sessionId = forall a. Maybe a
Prelude.Nothing,
      $sel:ttl:CreateTokenResponse' :: Maybe Text
ttl = forall a. Maybe a
Prelude.Nothing,
      $sel:httpStatus:CreateTokenResponse' :: Int
httpStatus = Int
pHttpStatus_
    }

-- | The app ID.
createTokenResponse_appId :: Lens.Lens' CreateTokenResponse (Prelude.Maybe Prelude.Text)
createTokenResponse_appId :: Lens' CreateTokenResponse (Maybe Text)
createTokenResponse_appId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTokenResponse' {Maybe Text
appId :: Maybe Text
$sel:appId:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
appId} -> Maybe Text
appId) (\s :: CreateTokenResponse
s@CreateTokenResponse' {} Maybe Text
a -> CreateTokenResponse
s {$sel:appId:CreateTokenResponse' :: Maybe Text
appId = Maybe Text
a} :: CreateTokenResponse)

-- | One-time challenge code for authenticating into the Amplify Admin UI.
createTokenResponse_challengeCode :: Lens.Lens' CreateTokenResponse (Prelude.Maybe Prelude.Text)
createTokenResponse_challengeCode :: Lens' CreateTokenResponse (Maybe Text)
createTokenResponse_challengeCode = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTokenResponse' {Maybe Text
challengeCode :: Maybe Text
$sel:challengeCode:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
challengeCode} -> Maybe Text
challengeCode) (\s :: CreateTokenResponse
s@CreateTokenResponse' {} Maybe Text
a -> CreateTokenResponse
s {$sel:challengeCode:CreateTokenResponse' :: Maybe Text
challengeCode = Maybe Text
a} :: CreateTokenResponse)

-- | A unique ID provided when creating a new challenge token.
createTokenResponse_sessionId :: Lens.Lens' CreateTokenResponse (Prelude.Maybe Prelude.Text)
createTokenResponse_sessionId :: Lens' CreateTokenResponse (Maybe Text)
createTokenResponse_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTokenResponse' {Maybe Text
sessionId :: Maybe Text
$sel:sessionId:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
sessionId} -> Maybe Text
sessionId) (\s :: CreateTokenResponse
s@CreateTokenResponse' {} Maybe Text
a -> CreateTokenResponse
s {$sel:sessionId:CreateTokenResponse' :: Maybe Text
sessionId = Maybe Text
a} :: CreateTokenResponse)

-- | The expiry time for the one-time generated token code.
createTokenResponse_ttl :: Lens.Lens' CreateTokenResponse (Prelude.Maybe Prelude.Text)
createTokenResponse_ttl :: Lens' CreateTokenResponse (Maybe Text)
createTokenResponse_ttl = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTokenResponse' {Maybe Text
ttl :: Maybe Text
$sel:ttl:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
ttl} -> Maybe Text
ttl) (\s :: CreateTokenResponse
s@CreateTokenResponse' {} Maybe Text
a -> CreateTokenResponse
s {$sel:ttl:CreateTokenResponse' :: Maybe Text
ttl = Maybe Text
a} :: CreateTokenResponse)

-- | The response's http status code.
createTokenResponse_httpStatus :: Lens.Lens' CreateTokenResponse Prelude.Int
createTokenResponse_httpStatus :: Lens' CreateTokenResponse Int
createTokenResponse_httpStatus = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\CreateTokenResponse' {Int
httpStatus :: Int
$sel:httpStatus:CreateTokenResponse' :: CreateTokenResponse -> Int
httpStatus} -> Int
httpStatus) (\s :: CreateTokenResponse
s@CreateTokenResponse' {} Int
a -> CreateTokenResponse
s {$sel:httpStatus:CreateTokenResponse' :: Int
httpStatus = Int
a} :: CreateTokenResponse)

instance Prelude.NFData CreateTokenResponse where
  rnf :: CreateTokenResponse -> ()
rnf CreateTokenResponse' {Int
Maybe Text
httpStatus :: Int
ttl :: Maybe Text
sessionId :: Maybe Text
challengeCode :: Maybe Text
appId :: Maybe Text
$sel:httpStatus:CreateTokenResponse' :: CreateTokenResponse -> Int
$sel:ttl:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
$sel:sessionId:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
$sel:challengeCode:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
$sel:appId:CreateTokenResponse' :: CreateTokenResponse -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
appId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
challengeCode
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
sessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
ttl
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Int
httpStatus