{-# 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.IAM.UpdateServiceSpecificCredential
-- Copyright   : (c) 2013-2023 Brendan Hay
-- License     : Mozilla Public License, v. 2.0.
-- Maintainer  : Brendan Hay
-- Stability   : auto-generated
-- Portability : non-portable (GHC extensions)
--
-- Sets the status of a service-specific credential to @Active@ or
-- @Inactive@. Service-specific credentials that are inactive cannot be
-- used for authentication to the service. This operation can be used to
-- disable a user\'s service-specific credential as part of a credential
-- rotation work flow.
module Amazonka.IAM.UpdateServiceSpecificCredential
  ( -- * Creating a Request
    UpdateServiceSpecificCredential (..),
    newUpdateServiceSpecificCredential,

    -- * Request Lenses
    updateServiceSpecificCredential_userName,
    updateServiceSpecificCredential_serviceSpecificCredentialId,
    updateServiceSpecificCredential_status,

    -- * Destructuring the Response
    UpdateServiceSpecificCredentialResponse (..),
    newUpdateServiceSpecificCredentialResponse,
  )
where

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

-- | /See:/ 'newUpdateServiceSpecificCredential' smart constructor.
data UpdateServiceSpecificCredential = UpdateServiceSpecificCredential'
  { -- | The name of the IAM user associated with the service-specific
    -- credential. If you do not specify this value, then the operation assumes
    -- the user whose credentials are used to call the operation.
    --
    -- This parameter allows (through its
    -- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
    -- consisting of upper and lowercase alphanumeric characters with no
    -- spaces. You can also include any of the following characters: _+=,.\@-
    UpdateServiceSpecificCredential -> Maybe Text
userName :: Prelude.Maybe Prelude.Text,
    -- | The unique identifier of the service-specific credential.
    --
    -- This parameter allows (through its
    -- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
    -- that can consist of any upper or lowercased letter or digit.
    UpdateServiceSpecificCredential -> Text
serviceSpecificCredentialId :: Prelude.Text,
    -- | The status to be assigned to the service-specific credential.
    UpdateServiceSpecificCredential -> StatusType
status :: StatusType
  }
  deriving (UpdateServiceSpecificCredential
-> UpdateServiceSpecificCredential -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateServiceSpecificCredential
-> UpdateServiceSpecificCredential -> Bool
$c/= :: UpdateServiceSpecificCredential
-> UpdateServiceSpecificCredential -> Bool
== :: UpdateServiceSpecificCredential
-> UpdateServiceSpecificCredential -> Bool
$c== :: UpdateServiceSpecificCredential
-> UpdateServiceSpecificCredential -> Bool
Prelude.Eq, ReadPrec [UpdateServiceSpecificCredential]
ReadPrec UpdateServiceSpecificCredential
Int -> ReadS UpdateServiceSpecificCredential
ReadS [UpdateServiceSpecificCredential]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateServiceSpecificCredential]
$creadListPrec :: ReadPrec [UpdateServiceSpecificCredential]
readPrec :: ReadPrec UpdateServiceSpecificCredential
$creadPrec :: ReadPrec UpdateServiceSpecificCredential
readList :: ReadS [UpdateServiceSpecificCredential]
$creadList :: ReadS [UpdateServiceSpecificCredential]
readsPrec :: Int -> ReadS UpdateServiceSpecificCredential
$creadsPrec :: Int -> ReadS UpdateServiceSpecificCredential
Prelude.Read, Int -> UpdateServiceSpecificCredential -> ShowS
[UpdateServiceSpecificCredential] -> ShowS
UpdateServiceSpecificCredential -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateServiceSpecificCredential] -> ShowS
$cshowList :: [UpdateServiceSpecificCredential] -> ShowS
show :: UpdateServiceSpecificCredential -> String
$cshow :: UpdateServiceSpecificCredential -> String
showsPrec :: Int -> UpdateServiceSpecificCredential -> ShowS
$cshowsPrec :: Int -> UpdateServiceSpecificCredential -> ShowS
Prelude.Show, forall x.
Rep UpdateServiceSpecificCredential x
-> UpdateServiceSpecificCredential
forall x.
UpdateServiceSpecificCredential
-> Rep UpdateServiceSpecificCredential x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateServiceSpecificCredential x
-> UpdateServiceSpecificCredential
$cfrom :: forall x.
UpdateServiceSpecificCredential
-> Rep UpdateServiceSpecificCredential x
Prelude.Generic)

-- |
-- Create a value of 'UpdateServiceSpecificCredential' 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:
--
-- 'userName', 'updateServiceSpecificCredential_userName' - The name of the IAM user associated with the service-specific
-- credential. If you do not specify this value, then the operation assumes
-- the user whose credentials are used to call the operation.
--
-- This parameter allows (through its
-- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
-- consisting of upper and lowercase alphanumeric characters with no
-- spaces. You can also include any of the following characters: _+=,.\@-
--
-- 'serviceSpecificCredentialId', 'updateServiceSpecificCredential_serviceSpecificCredentialId' - The unique identifier of the service-specific credential.
--
-- This parameter allows (through its
-- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
-- that can consist of any upper or lowercased letter or digit.
--
-- 'status', 'updateServiceSpecificCredential_status' - The status to be assigned to the service-specific credential.
newUpdateServiceSpecificCredential ::
  -- | 'serviceSpecificCredentialId'
  Prelude.Text ->
  -- | 'status'
  StatusType ->
  UpdateServiceSpecificCredential
newUpdateServiceSpecificCredential :: Text -> StatusType -> UpdateServiceSpecificCredential
newUpdateServiceSpecificCredential
  Text
pServiceSpecificCredentialId_
  StatusType
pStatus_ =
    UpdateServiceSpecificCredential'
      { $sel:userName:UpdateServiceSpecificCredential' :: Maybe Text
userName =
          forall a. Maybe a
Prelude.Nothing,
        $sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: Text
serviceSpecificCredentialId =
          Text
pServiceSpecificCredentialId_,
        $sel:status:UpdateServiceSpecificCredential' :: StatusType
status = StatusType
pStatus_
      }

-- | The name of the IAM user associated with the service-specific
-- credential. If you do not specify this value, then the operation assumes
-- the user whose credentials are used to call the operation.
--
-- This parameter allows (through its
-- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
-- consisting of upper and lowercase alphanumeric characters with no
-- spaces. You can also include any of the following characters: _+=,.\@-
updateServiceSpecificCredential_userName :: Lens.Lens' UpdateServiceSpecificCredential (Prelude.Maybe Prelude.Text)
updateServiceSpecificCredential_userName :: Lens' UpdateServiceSpecificCredential (Maybe Text)
updateServiceSpecificCredential_userName = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateServiceSpecificCredential' {Maybe Text
userName :: Maybe Text
$sel:userName:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Maybe Text
userName} -> Maybe Text
userName) (\s :: UpdateServiceSpecificCredential
s@UpdateServiceSpecificCredential' {} Maybe Text
a -> UpdateServiceSpecificCredential
s {$sel:userName:UpdateServiceSpecificCredential' :: Maybe Text
userName = Maybe Text
a} :: UpdateServiceSpecificCredential)

-- | The unique identifier of the service-specific credential.
--
-- This parameter allows (through its
-- <http://wikipedia.org/wiki/regex regex pattern>) a string of characters
-- that can consist of any upper or lowercased letter or digit.
updateServiceSpecificCredential_serviceSpecificCredentialId :: Lens.Lens' UpdateServiceSpecificCredential Prelude.Text
updateServiceSpecificCredential_serviceSpecificCredentialId :: Lens' UpdateServiceSpecificCredential Text
updateServiceSpecificCredential_serviceSpecificCredentialId = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateServiceSpecificCredential' {Text
serviceSpecificCredentialId :: Text
$sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Text
serviceSpecificCredentialId} -> Text
serviceSpecificCredentialId) (\s :: UpdateServiceSpecificCredential
s@UpdateServiceSpecificCredential' {} Text
a -> UpdateServiceSpecificCredential
s {$sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: Text
serviceSpecificCredentialId = Text
a} :: UpdateServiceSpecificCredential)

-- | The status to be assigned to the service-specific credential.
updateServiceSpecificCredential_status :: Lens.Lens' UpdateServiceSpecificCredential StatusType
updateServiceSpecificCredential_status :: Lens' UpdateServiceSpecificCredential StatusType
updateServiceSpecificCredential_status = forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
Lens.lens (\UpdateServiceSpecificCredential' {StatusType
status :: StatusType
$sel:status:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> StatusType
status} -> StatusType
status) (\s :: UpdateServiceSpecificCredential
s@UpdateServiceSpecificCredential' {} StatusType
a -> UpdateServiceSpecificCredential
s {$sel:status:UpdateServiceSpecificCredential' :: StatusType
status = StatusType
a} :: UpdateServiceSpecificCredential)

instance
  Core.AWSRequest
    UpdateServiceSpecificCredential
  where
  type
    AWSResponse UpdateServiceSpecificCredential =
      UpdateServiceSpecificCredentialResponse
  request :: (Service -> Service)
-> UpdateServiceSpecificCredential
-> Request UpdateServiceSpecificCredential
request Service -> Service
overrides =
    forall a. ToRequest a => Service -> a -> Request a
Request.postQuery (Service -> Service
overrides Service
defaultService)
  response :: forall (m :: * -> *).
MonadResource m =>
(ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy UpdateServiceSpecificCredential
-> ClientResponse ClientBody
-> m (Either
        Error
        (ClientResponse (AWSResponse UpdateServiceSpecificCredential)))
response =
    forall (m :: * -> *) a.
MonadResource m =>
AWSResponse a
-> (ByteStringLazy -> IO ByteStringLazy)
-> Service
-> Proxy a
-> ClientResponse ClientBody
-> m (Either Error (ClientResponse (AWSResponse a)))
Response.receiveNull
      UpdateServiceSpecificCredentialResponse
UpdateServiceSpecificCredentialResponse'

instance
  Prelude.Hashable
    UpdateServiceSpecificCredential
  where
  hashWithSalt :: Int -> UpdateServiceSpecificCredential -> Int
hashWithSalt
    Int
_salt
    UpdateServiceSpecificCredential' {Maybe Text
Text
StatusType
status :: StatusType
serviceSpecificCredentialId :: Text
userName :: Maybe Text
$sel:status:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> StatusType
$sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Text
$sel:userName:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Maybe Text
..} =
      Int
_salt
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Maybe Text
userName
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` Text
serviceSpecificCredentialId
        forall a. Hashable a => Int -> a -> Int
`Prelude.hashWithSalt` StatusType
status

instance
  Prelude.NFData
    UpdateServiceSpecificCredential
  where
  rnf :: UpdateServiceSpecificCredential -> ()
rnf UpdateServiceSpecificCredential' {Maybe Text
Text
StatusType
status :: StatusType
serviceSpecificCredentialId :: Text
userName :: Maybe Text
$sel:status:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> StatusType
$sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Text
$sel:userName:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Maybe Text
..} =
    forall a. NFData a => a -> ()
Prelude.rnf Maybe Text
userName
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf Text
serviceSpecificCredentialId
      seq :: forall a b. a -> b -> b
`Prelude.seq` forall a. NFData a => a -> ()
Prelude.rnf StatusType
status

instance
  Data.ToHeaders
    UpdateServiceSpecificCredential
  where
  toHeaders :: UpdateServiceSpecificCredential -> [Header]
toHeaders = forall a b. a -> b -> a
Prelude.const forall a. Monoid a => a
Prelude.mempty

instance Data.ToPath UpdateServiceSpecificCredential where
  toPath :: UpdateServiceSpecificCredential -> ByteString
toPath = forall a b. a -> b -> a
Prelude.const ByteString
"/"

instance Data.ToQuery UpdateServiceSpecificCredential where
  toQuery :: UpdateServiceSpecificCredential -> QueryString
toQuery UpdateServiceSpecificCredential' {Maybe Text
Text
StatusType
status :: StatusType
serviceSpecificCredentialId :: Text
userName :: Maybe Text
$sel:status:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> StatusType
$sel:serviceSpecificCredentialId:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Text
$sel:userName:UpdateServiceSpecificCredential' :: UpdateServiceSpecificCredential -> Maybe Text
..} =
    forall a. Monoid a => [a] -> a
Prelude.mconcat
      [ ByteString
"Action"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: ( ByteString
"UpdateServiceSpecificCredential" ::
                      Prelude.ByteString
                  ),
        ByteString
"Version"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: (ByteString
"2010-05-08" :: Prelude.ByteString),
        ByteString
"UserName" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Maybe Text
userName,
        ByteString
"ServiceSpecificCredentialId"
          forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: Text
serviceSpecificCredentialId,
        ByteString
"Status" forall a. ToQuery a => ByteString -> a -> QueryString
Data.=: StatusType
status
      ]

-- | /See:/ 'newUpdateServiceSpecificCredentialResponse' smart constructor.
data UpdateServiceSpecificCredentialResponse = UpdateServiceSpecificCredentialResponse'
  {
  }
  deriving (UpdateServiceSpecificCredentialResponse
-> UpdateServiceSpecificCredentialResponse -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: UpdateServiceSpecificCredentialResponse
-> UpdateServiceSpecificCredentialResponse -> Bool
$c/= :: UpdateServiceSpecificCredentialResponse
-> UpdateServiceSpecificCredentialResponse -> Bool
== :: UpdateServiceSpecificCredentialResponse
-> UpdateServiceSpecificCredentialResponse -> Bool
$c== :: UpdateServiceSpecificCredentialResponse
-> UpdateServiceSpecificCredentialResponse -> Bool
Prelude.Eq, ReadPrec [UpdateServiceSpecificCredentialResponse]
ReadPrec UpdateServiceSpecificCredentialResponse
Int -> ReadS UpdateServiceSpecificCredentialResponse
ReadS [UpdateServiceSpecificCredentialResponse]
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [UpdateServiceSpecificCredentialResponse]
$creadListPrec :: ReadPrec [UpdateServiceSpecificCredentialResponse]
readPrec :: ReadPrec UpdateServiceSpecificCredentialResponse
$creadPrec :: ReadPrec UpdateServiceSpecificCredentialResponse
readList :: ReadS [UpdateServiceSpecificCredentialResponse]
$creadList :: ReadS [UpdateServiceSpecificCredentialResponse]
readsPrec :: Int -> ReadS UpdateServiceSpecificCredentialResponse
$creadsPrec :: Int -> ReadS UpdateServiceSpecificCredentialResponse
Prelude.Read, Int -> UpdateServiceSpecificCredentialResponse -> ShowS
[UpdateServiceSpecificCredentialResponse] -> ShowS
UpdateServiceSpecificCredentialResponse -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [UpdateServiceSpecificCredentialResponse] -> ShowS
$cshowList :: [UpdateServiceSpecificCredentialResponse] -> ShowS
show :: UpdateServiceSpecificCredentialResponse -> String
$cshow :: UpdateServiceSpecificCredentialResponse -> String
showsPrec :: Int -> UpdateServiceSpecificCredentialResponse -> ShowS
$cshowsPrec :: Int -> UpdateServiceSpecificCredentialResponse -> ShowS
Prelude.Show, forall x.
Rep UpdateServiceSpecificCredentialResponse x
-> UpdateServiceSpecificCredentialResponse
forall x.
UpdateServiceSpecificCredentialResponse
-> Rep UpdateServiceSpecificCredentialResponse x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cto :: forall x.
Rep UpdateServiceSpecificCredentialResponse x
-> UpdateServiceSpecificCredentialResponse
$cfrom :: forall x.
UpdateServiceSpecificCredentialResponse
-> Rep UpdateServiceSpecificCredentialResponse x
Prelude.Generic)

-- |
-- Create a value of 'UpdateServiceSpecificCredentialResponse' 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.
newUpdateServiceSpecificCredentialResponse ::
  UpdateServiceSpecificCredentialResponse
newUpdateServiceSpecificCredentialResponse :: UpdateServiceSpecificCredentialResponse
newUpdateServiceSpecificCredentialResponse =
  UpdateServiceSpecificCredentialResponse
UpdateServiceSpecificCredentialResponse'

instance
  Prelude.NFData
    UpdateServiceSpecificCredentialResponse
  where
  rnf :: UpdateServiceSpecificCredentialResponse -> ()
rnf UpdateServiceSpecificCredentialResponse
_ = ()