{-# 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.GetToken
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Gets the challenge token based on the given appId and sessionId.
module Amazonka.AmplifyBackend.GetToken
  ( -- * Creating a Request
    GetToken (..),
    newGetToken,

    -- * Request Lenses
    getToken_sessionId,
    getToken_appId,

    -- * Destructuring the Response
    GetTokenResponse (..),
    newGetTokenResponse,

    -- * Response Lenses
    getTokenResponse_appId,
    getTokenResponse_challengeCode,
    getTokenResponse_sessionId,
    getTokenResponse_ttl,
    getTokenResponse_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:/ 'newGetToken' smart constructor.
data GetToken = GetToken'
  { -- | The session ID.
    GetToken -> Text
sessionId :: Prelude.Text,
    -- | The app ID.
    GetToken -> Text
appId :: Prelude.Text
  }
  deriving (GetToken -> GetToken -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GetToken -> GetToken -> Bool
$c/= :: GetToken -> GetToken -> Bool
== :: GetToken -> GetToken -> Bool
$c== :: GetToken -> GetToken -> Bool
Prelude.Eq, ReadPrec [GetToken]
ReadPrec GetToken
Int -> ReadS GetToken
ReadS [GetToken]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [GetToken]
$creadListPrec :: ReadPrec [GetToken]
readPrec :: ReadPrec GetToken
$creadPrec :: ReadPrec GetToken
readList :: ReadS [GetToken]
$creadList :: ReadS [GetToken]
readsPrec :: Int -> ReadS GetToken
$creadsPrec :: Int -> ReadS GetToken
Prelude.Read, Int -> GetToken -> ShowS
[GetToken] -> ShowS
GetToken -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GetToken] -> ShowS
$cshowList :: [GetToken] -> ShowS
show :: GetToken -> String
$cshow :: GetToken -> String
showsPrec :: Int -> GetToken -> ShowS
$cshowsPrec :: Int -> GetToken -> ShowS
Prelude.Show, forall x. Rep GetToken x -> GetToken
forall x. GetToken -> Rep GetToken x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x. Rep GetToken x -> GetToken
$cfrom :: forall x. GetToken -> Rep GetToken x
Prelude.Generic)

-- |
-- Create a value of 'GetToken' 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:
--
-- 'sessionId', 'getToken_sessionId' - The session ID.
--
-- 'appId', 'getToken_appId' - The app ID.
newGetToken ::
  -- | 'sessionId'
  Prelude.Text ->
  -- | 'appId'
  Prelude.Text ->
  GetToken
newGetToken :: Text -> Text -> GetToken
newGetToken Text
pSessionId_ Text
pAppId_ =
  GetToken' {$sel:sessionId:GetToken' :: Text
sessionId = Text
pSessionId_, $sel:appId:GetToken' :: Text
appId = Text
pAppId_}

-- | The session ID.
getToken_sessionId :: Lens.Lens' GetToken Prelude.Text
getToken_sessionId :: Lens' GetToken Text
getToken_sessionId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\GetToken' {Text
sessionId :: Text
$sel:sessionId:GetToken' :: GetToken -> Text
sessionId} -> Text
sessionId) (\s :: GetToken
s@GetToken' {} Text
a -> GetToken
s {$sel:sessionId:GetToken' :: Text
sessionId = Text
a} :: GetToken)

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

instance Core.AWSRequest GetToken where
  type AWSResponse GetToken = GetTokenResponse
  request :: (Service -> Service) -> GetToken -> Request GetToken
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.get (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy GetToken
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse GetToken)))
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
-> GetTokenResponse
GetTokenResponse'
            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 GetToken where
  hashWithSalt :: Int -> GetToken -> Int
hashWithSalt Int
_salt GetToken' {Text
appId :: Text
sessionId :: Text
$sel:appId:GetToken' :: GetToken -> Text
$sel:sessionId:GetToken' :: GetToken -> Text
..} =
    Int
_salt
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
sessionId
      forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
appId

instance Prelude.NFData GetToken where
  rnf :: GetToken -> ()
rnf GetToken' {Text
appId :: Text
sessionId :: Text
$sel:appId:GetToken' :: GetToken -> Text
$sel:sessionId:GetToken' :: GetToken -> Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Text
sessionId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
appId

instance Data.ToHeaders GetToken where
  toHeaders :: GetToken -> 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.ToPath GetToken where
  toPath :: GetToken -> ByteString
toPath GetToken' {Text
appId :: Text
sessionId :: Text
$sel:appId:GetToken' :: GetToken -> Text
$sel:sessionId:GetToken' :: GetToken -> Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"/backend/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
appId,
        ByteString
"/challenge/",
        forall a. ToByteString a => a -> ByteString
Data.toBS Text
sessionId
      ]

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

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

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

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

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

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

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

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

instance Prelude.NFData GetTokenResponse where
  rnf :: GetTokenResponse -> ()
rnf GetTokenResponse' {Int
Maybe Text
httpStatus :: Int
ttl :: Maybe Text
sessionId :: Maybe Text
challengeCode :: Maybe Text
appId :: Maybe Text
$sel:httpStatus:GetTokenResponse' :: GetTokenResponse -> Int
$sel:ttl:GetTokenResponse' :: GetTokenResponse -> Maybe Text
$sel:sessionId:GetTokenResponse' :: GetTokenResponse -> Maybe Text
$sel:challengeCode:GetTokenResponse' :: GetTokenResponse -> Maybe Text
$sel:appId:GetTokenResponse' :: GetTokenResponse -> 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