amazonka-1.6.0: src/Network/AWS/Presign.hs
{-# LANGUAGE FlexibleContexts #-}
-- |
-- Module : Network.AWS.Presign
-- Copyright : (c) 2013-2018 Brendan Hay
-- License : Mozilla Public License, v. 2.0.
-- Maintainer : Brendan Hay <brendan.g.hay+amazonka@gmail.com>
-- Stability : provisional
-- Portability : non-portable (GHC extensions)
--
-- This module contains functions for presigning requests using 'MonadIO' and
-- not one of the AWS specific transformers.
--
-- It is intended for use directly with "Network.AWS.Auth" when only presigning
-- and no other AWS actions are required.
module Network.AWS.Presign where
import Control.Monad
import Control.Monad.IO.Class
import Network.AWS.Data.Time
import Network.AWS.Lens ((%~), (&))
import Network.AWS.Prelude
import Network.AWS.Request (requestURL)
import Network.AWS.Types
import Network.AWS.Data.Headers (hExpect)
import Network.HTTP.Types (Header)
-- | Presign an URL that is valid from the specified time until the
-- number of seconds expiry has elapsed.
--
-- /See:/ 'presign', 'presignWith'
presignURL :: (MonadIO m, AWSRequest a)
=> Auth
-> Region
-> UTCTime -- ^ Signing time.
-> Seconds -- ^ Expiry time.
-> a -- ^ Request to presign.
-> m ByteString
presignURL a r e ts = liftM requestURL . presign a r e ts
-- | Presign an HTTP request that is valid from the specified time until the
-- number of seconds expiry has elapsed.
--
-- /See:/ 'presignWith', 'presignWithHeaders'
presign :: (MonadIO m, AWSRequest a)
=> Auth
-> Region
-> UTCTime -- ^ Signing time.
-> Seconds -- ^ Expiry time.
-> a -- ^ Request to presign.
-> m ClientRequest
presign = presignWith id
-- | A variant of 'presign' that allows modifying the default 'Service'
-- definition used to configure the request.
--
-- /See:/ 'presignWithHeaders'
presignWith :: (MonadIO m, AWSRequest a)
=> (Service -> Service) -- ^ Modify the default service configuration.
-> Auth
-> Region
-> UTCTime -- ^ Signing time.
-> Seconds -- ^ Expiry time.
-> a -- ^ Request to presign.
-> m ClientRequest
presignWith = presignWithHeaders defaultHeaders
-- | Modification to the headers that is applied by default (in 'presignWith');
-- removes the "Expect" header which is added to every 'PutObject'.
defaultHeaders :: [Header] -> [Header]
defaultHeaders = filter ((/= hExpect) . fst)
-- | A variant of 'presign' that allows modifying the default 'Headers'
-- and the default 'Service' definition used to configure the request.
presignWithHeaders :: (MonadIO m, AWSRequest a)
=> ([Header] -> [Header]) -- ^ Modify the default headers.
-> (Service -> Service) -- ^ Modify the default service configuration.
-> Auth
-> Region
-> UTCTime -- ^ Signing time.
-> Seconds -- ^ Expiry time.
-> a -- ^ Request to presign.
-> m ClientRequest
presignWithHeaders f g a r ts ex x =
withAuth a $ \ae ->
return $! sgRequest $
rqPresign ex (request x & rqHeaders %~ f & rqService %~ g) ae r ts