{-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE DeriveGeneric #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE TypeFamilies #-} {-# OPTIONS_GHC -fno-warn-unused-imports #-} {-# OPTIONS_GHC -fno-warn-unused-binds #-} {-# OPTIONS_GHC -fno-warn-unused-matches #-} -- Derived from AWS service descriptions, licensed under Apache 2.0. -- | -- Module : Network.AWS.S3.GetObject -- Copyright : (c) 2013-2015 Brendan Hay -- License : Mozilla Public License, v. 2.0. -- Maintainer : Brendan Hay -- Stability : auto-generated -- Portability : non-portable (GHC extensions) -- -- Retrieves objects from Amazon S3. -- -- /See:/ for GetObject. module Network.AWS.S3.GetObject ( -- * Creating a Request getObject , GetObject -- * Request Lenses , goIfMatch , goVersionId , goResponseContentType , goResponseContentDisposition , goResponseContentLanguage , goSSECustomerAlgorithm , goSSECustomerKey , goRequestPayer , goResponseContentEncoding , goIfModifiedSince , goRange , goIfUnmodifiedSince , goSSECustomerKeyMD5 , goResponseCacheControl , goResponseExpires , goIfNoneMatch , goBucket , goKey -- * Destructuring the Response , getObjectResponse , GetObjectResponse -- * Response Lenses , gorsRequestCharged , gorsETag , gorsVersionId , gorsContentLength , gorsExpires , gorsRestore , gorsExpiration , gorsDeleteMarker , gorsSSECustomerAlgorithm , gorsMissingMeta , gorsWebsiteRedirectLocation , gorsAcceptRanges , gorsStorageClass , gorsSSECustomerKeyMD5 , gorsSSEKMSKeyId , gorsContentEncoding , gorsMetadata , gorsReplicationStatus , gorsCacheControl , gorsContentLanguage , gorsLastModified , gorsContentDisposition , gorsContentRange , gorsServerSideEncryption , gorsContentType , gorsResponseStatus , gorsBody ) where import Network.AWS.Prelude import Network.AWS.Request import Network.AWS.Response import Network.AWS.S3.Types import Network.AWS.S3.Types.Product -- | /See:/ 'getObject' smart constructor. data GetObject = GetObject' { _goIfMatch :: !(Maybe Text) , _goVersionId :: !(Maybe ObjectVersionId) , _goResponseContentType :: !(Maybe Text) , _goResponseContentDisposition :: !(Maybe Text) , _goResponseContentLanguage :: !(Maybe Text) , _goSSECustomerAlgorithm :: !(Maybe Text) , _goSSECustomerKey :: !(Maybe (Sensitive Text)) , _goRequestPayer :: !(Maybe RequestPayer) , _goResponseContentEncoding :: !(Maybe Text) , _goIfModifiedSince :: !(Maybe RFC822) , _goRange :: !(Maybe Text) , _goIfUnmodifiedSince :: !(Maybe RFC822) , _goSSECustomerKeyMD5 :: !(Maybe Text) , _goResponseCacheControl :: !(Maybe Text) , _goResponseExpires :: !(Maybe RFC822) , _goIfNoneMatch :: !(Maybe Text) , _goBucket :: !BucketName , _goKey :: !ObjectKey } deriving (Eq,Read,Show,Data,Typeable,Generic) -- | Creates a value of 'GetObject' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'goIfMatch' -- -- * 'goVersionId' -- -- * 'goResponseContentType' -- -- * 'goResponseContentDisposition' -- -- * 'goResponseContentLanguage' -- -- * 'goSSECustomerAlgorithm' -- -- * 'goSSECustomerKey' -- -- * 'goRequestPayer' -- -- * 'goResponseContentEncoding' -- -- * 'goIfModifiedSince' -- -- * 'goRange' -- -- * 'goIfUnmodifiedSince' -- -- * 'goSSECustomerKeyMD5' -- -- * 'goResponseCacheControl' -- -- * 'goResponseExpires' -- -- * 'goIfNoneMatch' -- -- * 'goBucket' -- -- * 'goKey' getObject :: BucketName -- ^ 'goBucket' -> ObjectKey -- ^ 'goKey' -> GetObject getObject pBucket_ pKey_ = GetObject' { _goIfMatch = Nothing , _goVersionId = Nothing , _goResponseContentType = Nothing , _goResponseContentDisposition = Nothing , _goResponseContentLanguage = Nothing , _goSSECustomerAlgorithm = Nothing , _goSSECustomerKey = Nothing , _goRequestPayer = Nothing , _goResponseContentEncoding = Nothing , _goIfModifiedSince = Nothing , _goRange = Nothing , _goIfUnmodifiedSince = Nothing , _goSSECustomerKeyMD5 = Nothing , _goResponseCacheControl = Nothing , _goResponseExpires = Nothing , _goIfNoneMatch = Nothing , _goBucket = pBucket_ , _goKey = pKey_ } -- | Return the object only if its entity tag (ETag) is the same as the one -- specified, otherwise return a 412 (precondition failed). goIfMatch :: Lens' GetObject (Maybe Text) goIfMatch = lens _goIfMatch (\ s a -> s{_goIfMatch = a}); -- | VersionId used to reference a specific version of the object. goVersionId :: Lens' GetObject (Maybe ObjectVersionId) goVersionId = lens _goVersionId (\ s a -> s{_goVersionId = a}); -- | Sets the Content-Type header of the response. goResponseContentType :: Lens' GetObject (Maybe Text) goResponseContentType = lens _goResponseContentType (\ s a -> s{_goResponseContentType = a}); -- | Sets the Content-Disposition header of the response goResponseContentDisposition :: Lens' GetObject (Maybe Text) goResponseContentDisposition = lens _goResponseContentDisposition (\ s a -> s{_goResponseContentDisposition = a}); -- | Sets the Content-Language header of the response. goResponseContentLanguage :: Lens' GetObject (Maybe Text) goResponseContentLanguage = lens _goResponseContentLanguage (\ s a -> s{_goResponseContentLanguage = a}); -- | Specifies the algorithm to use to when encrypting the object (e.g., -- AES256). goSSECustomerAlgorithm :: Lens' GetObject (Maybe Text) goSSECustomerAlgorithm = lens _goSSECustomerAlgorithm (\ s a -> s{_goSSECustomerAlgorithm = a}); -- | Specifies the customer-provided encryption key for Amazon S3 to use in -- encrypting data. This value is used to store the object and then it is -- discarded; Amazon does not store the encryption key. The key must be -- appropriate for use with the algorithm specified in the -- x-amz-server-side​-encryption​-customer-algorithm header. goSSECustomerKey :: Lens' GetObject (Maybe Text) goSSECustomerKey = lens _goSSECustomerKey (\ s a -> s{_goSSECustomerKey = a}) . mapping _Sensitive; -- | Undocumented member. goRequestPayer :: Lens' GetObject (Maybe RequestPayer) goRequestPayer = lens _goRequestPayer (\ s a -> s{_goRequestPayer = a}); -- | Sets the Content-Encoding header of the response. goResponseContentEncoding :: Lens' GetObject (Maybe Text) goResponseContentEncoding = lens _goResponseContentEncoding (\ s a -> s{_goResponseContentEncoding = a}); -- | Return the object only if it has been modified since the specified time, -- otherwise return a 304 (not modified). goIfModifiedSince :: Lens' GetObject (Maybe UTCTime) goIfModifiedSince = lens _goIfModifiedSince (\ s a -> s{_goIfModifiedSince = a}) . mapping _Time; -- | Downloads the specified range bytes of an object. For more information -- about the HTTP Range header, go to -- http:\/\/www.w3.org\/Protocols\/rfc2616\/rfc2616-sec14.html#sec14.35. goRange :: Lens' GetObject (Maybe Text) goRange = lens _goRange (\ s a -> s{_goRange = a}); -- | Return the object only if it has not been modified since the specified -- time, otherwise return a 412 (precondition failed). goIfUnmodifiedSince :: Lens' GetObject (Maybe UTCTime) goIfUnmodifiedSince = lens _goIfUnmodifiedSince (\ s a -> s{_goIfUnmodifiedSince = a}) . mapping _Time; -- | Specifies the 128-bit MD5 digest of the encryption key according to RFC -- 1321. Amazon S3 uses this header for a message integrity check to ensure -- the encryption key was transmitted without error. goSSECustomerKeyMD5 :: Lens' GetObject (Maybe Text) goSSECustomerKeyMD5 = lens _goSSECustomerKeyMD5 (\ s a -> s{_goSSECustomerKeyMD5 = a}); -- | Sets the Cache-Control header of the response. goResponseCacheControl :: Lens' GetObject (Maybe Text) goResponseCacheControl = lens _goResponseCacheControl (\ s a -> s{_goResponseCacheControl = a}); -- | Sets the Expires header of the response. goResponseExpires :: Lens' GetObject (Maybe UTCTime) goResponseExpires = lens _goResponseExpires (\ s a -> s{_goResponseExpires = a}) . mapping _Time; -- | Return the object only if its entity tag (ETag) is different from the -- one specified, otherwise return a 304 (not modified). goIfNoneMatch :: Lens' GetObject (Maybe Text) goIfNoneMatch = lens _goIfNoneMatch (\ s a -> s{_goIfNoneMatch = a}); -- | Undocumented member. goBucket :: Lens' GetObject BucketName goBucket = lens _goBucket (\ s a -> s{_goBucket = a}); -- | Undocumented member. goKey :: Lens' GetObject ObjectKey goKey = lens _goKey (\ s a -> s{_goKey = a}); instance AWSRequest GetObject where type Rs GetObject = GetObjectResponse request = get s3 response = receiveBody (\ s h x -> GetObjectResponse' <$> (h .#? "x-amz-request-charged") <*> (h .#? "ETag") <*> (h .#? "x-amz-version-id") <*> (h .#? "Content-Length") <*> (h .#? "Expires") <*> (h .#? "x-amz-restore") <*> (h .#? "x-amz-expiration") <*> (h .#? "x-amz-delete-marker") <*> (h .#? "x-amz-server-side-encryption-customer-algorithm") <*> (h .#? "x-amz-missing-meta") <*> (h .#? "x-amz-website-redirect-location") <*> (h .#? "accept-ranges") <*> (h .#? "x-amz-storage-class") <*> (h .#? "x-amz-server-side-encryption-customer-key-MD5") <*> (h .#? "x-amz-server-side-encryption-aws-kms-key-id") <*> (h .#? "Content-Encoding") <*> (parseHeadersMap "x-amz-meta-" h) <*> (h .#? "x-amz-replication-status") <*> (h .#? "Cache-Control") <*> (h .#? "Content-Language") <*> (h .#? "Last-Modified") <*> (h .#? "Content-Disposition") <*> (h .#? "Content-Range") <*> (h .#? "x-amz-server-side-encryption") <*> (h .#? "Content-Type") <*> (pure (fromEnum s)) <*> (pure x)) instance ToHeaders GetObject where toHeaders GetObject'{..} = mconcat ["If-Match" =# _goIfMatch, "x-amz-server-side-encryption-customer-algorithm" =# _goSSECustomerAlgorithm, "x-amz-server-side-encryption-customer-key" =# _goSSECustomerKey, "x-amz-request-payer" =# _goRequestPayer, "If-Modified-Since" =# _goIfModifiedSince, "Range" =# _goRange, "If-Unmodified-Since" =# _goIfUnmodifiedSince, "x-amz-server-side-encryption-customer-key-MD5" =# _goSSECustomerKeyMD5, "If-None-Match" =# _goIfNoneMatch] instance ToPath GetObject where toPath GetObject'{..} = mconcat ["/", toBS _goBucket, "/", toBS _goKey] instance ToQuery GetObject where toQuery GetObject'{..} = mconcat ["versionId" =: _goVersionId, "response-content-type" =: _goResponseContentType, "response-content-disposition" =: _goResponseContentDisposition, "response-content-language" =: _goResponseContentLanguage, "response-content-encoding" =: _goResponseContentEncoding, "response-cache-control" =: _goResponseCacheControl, "response-expires" =: _goResponseExpires] -- | /See:/ 'getObjectResponse' smart constructor. data GetObjectResponse = GetObjectResponse' { _gorsRequestCharged :: !(Maybe RequestCharged) , _gorsETag :: !(Maybe ETag) , _gorsVersionId :: !(Maybe ObjectVersionId) , _gorsContentLength :: !(Maybe Int) , _gorsExpires :: !(Maybe RFC822) , _gorsRestore :: !(Maybe Text) , _gorsExpiration :: !(Maybe Text) , _gorsDeleteMarker :: !(Maybe Bool) , _gorsSSECustomerAlgorithm :: !(Maybe Text) , _gorsMissingMeta :: !(Maybe Int) , _gorsWebsiteRedirectLocation :: !(Maybe Text) , _gorsAcceptRanges :: !(Maybe Text) , _gorsStorageClass :: !(Maybe StorageClass) , _gorsSSECustomerKeyMD5 :: !(Maybe Text) , _gorsSSEKMSKeyId :: !(Maybe (Sensitive Text)) , _gorsContentEncoding :: !(Maybe Text) , _gorsMetadata :: !(Map Text Text) , _gorsReplicationStatus :: !(Maybe ReplicationStatus) , _gorsCacheControl :: !(Maybe Text) , _gorsContentLanguage :: !(Maybe Text) , _gorsLastModified :: !(Maybe RFC822) , _gorsContentDisposition :: !(Maybe Text) , _gorsContentRange :: !(Maybe Text) , _gorsServerSideEncryption :: !(Maybe ServerSideEncryption) , _gorsContentType :: !(Maybe Text) , _gorsResponseStatus :: !Int , _gorsBody :: !RsBody } deriving (Show,Generic) -- | Creates a value of 'GetObjectResponse' with the minimum fields required to make a request. -- -- Use one of the following lenses to modify other fields as desired: -- -- * 'gorsRequestCharged' -- -- * 'gorsETag' -- -- * 'gorsVersionId' -- -- * 'gorsContentLength' -- -- * 'gorsExpires' -- -- * 'gorsRestore' -- -- * 'gorsExpiration' -- -- * 'gorsDeleteMarker' -- -- * 'gorsSSECustomerAlgorithm' -- -- * 'gorsMissingMeta' -- -- * 'gorsWebsiteRedirectLocation' -- -- * 'gorsAcceptRanges' -- -- * 'gorsStorageClass' -- -- * 'gorsSSECustomerKeyMD5' -- -- * 'gorsSSEKMSKeyId' -- -- * 'gorsContentEncoding' -- -- * 'gorsMetadata' -- -- * 'gorsReplicationStatus' -- -- * 'gorsCacheControl' -- -- * 'gorsContentLanguage' -- -- * 'gorsLastModified' -- -- * 'gorsContentDisposition' -- -- * 'gorsContentRange' -- -- * 'gorsServerSideEncryption' -- -- * 'gorsContentType' -- -- * 'gorsResponseStatus' -- -- * 'gorsBody' getObjectResponse :: Int -- ^ 'gorsResponseStatus' -> RsBody -- ^ 'gorsBody' -> GetObjectResponse getObjectResponse pResponseStatus_ pBody_ = GetObjectResponse' { _gorsRequestCharged = Nothing , _gorsETag = Nothing , _gorsVersionId = Nothing , _gorsContentLength = Nothing , _gorsExpires = Nothing , _gorsRestore = Nothing , _gorsExpiration = Nothing , _gorsDeleteMarker = Nothing , _gorsSSECustomerAlgorithm = Nothing , _gorsMissingMeta = Nothing , _gorsWebsiteRedirectLocation = Nothing , _gorsAcceptRanges = Nothing , _gorsStorageClass = Nothing , _gorsSSECustomerKeyMD5 = Nothing , _gorsSSEKMSKeyId = Nothing , _gorsContentEncoding = Nothing , _gorsMetadata = mempty , _gorsReplicationStatus = Nothing , _gorsCacheControl = Nothing , _gorsContentLanguage = Nothing , _gorsLastModified = Nothing , _gorsContentDisposition = Nothing , _gorsContentRange = Nothing , _gorsServerSideEncryption = Nothing , _gorsContentType = Nothing , _gorsResponseStatus = pResponseStatus_ , _gorsBody = pBody_ } -- | Undocumented member. gorsRequestCharged :: Lens' GetObjectResponse (Maybe RequestCharged) gorsRequestCharged = lens _gorsRequestCharged (\ s a -> s{_gorsRequestCharged = a}); -- | An ETag is an opaque identifier assigned by a web server to a specific -- version of a resource found at a URL gorsETag :: Lens' GetObjectResponse (Maybe ETag) gorsETag = lens _gorsETag (\ s a -> s{_gorsETag = a}); -- | Version of the object. gorsVersionId :: Lens' GetObjectResponse (Maybe ObjectVersionId) gorsVersionId = lens _gorsVersionId (\ s a -> s{_gorsVersionId = a}); -- | Size of the body in bytes. gorsContentLength :: Lens' GetObjectResponse (Maybe Int) gorsContentLength = lens _gorsContentLength (\ s a -> s{_gorsContentLength = a}); -- | The date and time at which the object is no longer cacheable. gorsExpires :: Lens' GetObjectResponse (Maybe UTCTime) gorsExpires = lens _gorsExpires (\ s a -> s{_gorsExpires = a}) . mapping _Time; -- | Provides information about object restoration operation and expiration -- time of the restored object copy. gorsRestore :: Lens' GetObjectResponse (Maybe Text) gorsRestore = lens _gorsRestore (\ s a -> s{_gorsRestore = a}); -- | If the object expiration is configured (see PUT Bucket lifecycle), the -- response includes this header. It includes the expiry-date and rule-id -- key value pairs providing object expiration information. The value of -- the rule-id is URL encoded. gorsExpiration :: Lens' GetObjectResponse (Maybe Text) gorsExpiration = lens _gorsExpiration (\ s a -> s{_gorsExpiration = a}); -- | Specifies whether the object retrieved was (true) or was not (false) a -- Delete Marker. If false, this response header does not appear in the -- response. gorsDeleteMarker :: Lens' GetObjectResponse (Maybe Bool) gorsDeleteMarker = lens _gorsDeleteMarker (\ s a -> s{_gorsDeleteMarker = a}); -- | If server-side encryption with a customer-provided encryption key was -- requested, the response will include this header confirming the -- encryption algorithm used. gorsSSECustomerAlgorithm :: Lens' GetObjectResponse (Maybe Text) gorsSSECustomerAlgorithm = lens _gorsSSECustomerAlgorithm (\ s a -> s{_gorsSSECustomerAlgorithm = a}); -- | This is set to the number of metadata entries not returned in x-amz-meta -- headers. This can happen if you create metadata using an API like SOAP -- that supports more flexible metadata than the REST API. For example, -- using SOAP, you can create metadata whose values are not legal HTTP -- headers. gorsMissingMeta :: Lens' GetObjectResponse (Maybe Int) gorsMissingMeta = lens _gorsMissingMeta (\ s a -> s{_gorsMissingMeta = a}); -- | If the bucket is configured as a website, redirects requests for this -- object to another object in the same bucket or to an external URL. -- Amazon S3 stores the value of this header in the object metadata. gorsWebsiteRedirectLocation :: Lens' GetObjectResponse (Maybe Text) gorsWebsiteRedirectLocation = lens _gorsWebsiteRedirectLocation (\ s a -> s{_gorsWebsiteRedirectLocation = a}); -- | Undocumented member. gorsAcceptRanges :: Lens' GetObjectResponse (Maybe Text) gorsAcceptRanges = lens _gorsAcceptRanges (\ s a -> s{_gorsAcceptRanges = a}); -- | Undocumented member. gorsStorageClass :: Lens' GetObjectResponse (Maybe StorageClass) gorsStorageClass = lens _gorsStorageClass (\ s a -> s{_gorsStorageClass = a}); -- | If server-side encryption with a customer-provided encryption key was -- requested, the response will include this header to provide round trip -- message integrity verification of the customer-provided encryption key. gorsSSECustomerKeyMD5 :: Lens' GetObjectResponse (Maybe Text) gorsSSECustomerKeyMD5 = lens _gorsSSECustomerKeyMD5 (\ s a -> s{_gorsSSECustomerKeyMD5 = a}); -- | If present, specifies the ID of the AWS Key Management Service (KMS) -- master encryption key that was used for the object. gorsSSEKMSKeyId :: Lens' GetObjectResponse (Maybe Text) gorsSSEKMSKeyId = lens _gorsSSEKMSKeyId (\ s a -> s{_gorsSSEKMSKeyId = a}) . mapping _Sensitive; -- | Specifies what content encodings have been applied to the object and -- thus what decoding mechanisms must be applied to obtain the media-type -- referenced by the Content-Type header field. gorsContentEncoding :: Lens' GetObjectResponse (Maybe Text) gorsContentEncoding = lens _gorsContentEncoding (\ s a -> s{_gorsContentEncoding = a}); -- | A map of metadata to store with the object in S3. gorsMetadata :: Lens' GetObjectResponse (HashMap Text Text) gorsMetadata = lens _gorsMetadata (\ s a -> s{_gorsMetadata = a}) . _Map; -- | Undocumented member. gorsReplicationStatus :: Lens' GetObjectResponse (Maybe ReplicationStatus) gorsReplicationStatus = lens _gorsReplicationStatus (\ s a -> s{_gorsReplicationStatus = a}); -- | Specifies caching behavior along the request\/reply chain. gorsCacheControl :: Lens' GetObjectResponse (Maybe Text) gorsCacheControl = lens _gorsCacheControl (\ s a -> s{_gorsCacheControl = a}); -- | The language the content is in. gorsContentLanguage :: Lens' GetObjectResponse (Maybe Text) gorsContentLanguage = lens _gorsContentLanguage (\ s a -> s{_gorsContentLanguage = a}); -- | Last modified date of the object gorsLastModified :: Lens' GetObjectResponse (Maybe UTCTime) gorsLastModified = lens _gorsLastModified (\ s a -> s{_gorsLastModified = a}) . mapping _Time; -- | Specifies presentational information for the object. gorsContentDisposition :: Lens' GetObjectResponse (Maybe Text) gorsContentDisposition = lens _gorsContentDisposition (\ s a -> s{_gorsContentDisposition = a}); -- | The portion of the object returned in the response. gorsContentRange :: Lens' GetObjectResponse (Maybe Text) gorsContentRange = lens _gorsContentRange (\ s a -> s{_gorsContentRange = a}); -- | The Server-side encryption algorithm used when storing this object in S3 -- (e.g., AES256, aws:kms). gorsServerSideEncryption :: Lens' GetObjectResponse (Maybe ServerSideEncryption) gorsServerSideEncryption = lens _gorsServerSideEncryption (\ s a -> s{_gorsServerSideEncryption = a}); -- | A standard MIME type describing the format of the object data. gorsContentType :: Lens' GetObjectResponse (Maybe Text) gorsContentType = lens _gorsContentType (\ s a -> s{_gorsContentType = a}); -- | The response status code. gorsResponseStatus :: Lens' GetObjectResponse Int gorsResponseStatus = lens _gorsResponseStatus (\ s a -> s{_gorsResponseStatus = a}); -- | Object data. gorsBody :: Lens' GetObjectResponse RsBody gorsBody = lens _gorsBody (\ s a -> s{_gorsBody = a});