1 /**
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0.
4 */
5
6 #include <aws/s3-crt/model/WriteGetObjectResponseRequest.h>
7 #include <aws/core/AmazonWebServiceResult.h>
8 #include <aws/core/http/URI.h>
9 #include <aws/core/utils/memory/stl/AWSStringStream.h>
10 #include <aws/core/utils/HashingUtils.h>
11
12 #include <utility>
13
14 using namespace Aws::S3Crt::Model;
15 using namespace Aws::Utils::Stream;
16 using namespace Aws::Utils;
17 using namespace Aws::Http;
18 using namespace Aws;
19
WriteGetObjectResponseRequest()20 WriteGetObjectResponseRequest::WriteGetObjectResponseRequest() :
21 m_requestRouteHasBeenSet(false),
22 m_requestTokenHasBeenSet(false),
23 m_statusCode(0),
24 m_statusCodeHasBeenSet(false),
25 m_errorCodeHasBeenSet(false),
26 m_errorMessageHasBeenSet(false),
27 m_acceptRangesHasBeenSet(false),
28 m_cacheControlHasBeenSet(false),
29 m_contentDispositionHasBeenSet(false),
30 m_contentEncodingHasBeenSet(false),
31 m_contentLanguageHasBeenSet(false),
32 m_contentLength(0),
33 m_contentLengthHasBeenSet(false),
34 m_contentRangeHasBeenSet(false),
35 m_deleteMarker(false),
36 m_deleteMarkerHasBeenSet(false),
37 m_eTagHasBeenSet(false),
38 m_expiresHasBeenSet(false),
39 m_expirationHasBeenSet(false),
40 m_lastModifiedHasBeenSet(false),
41 m_missingMeta(0),
42 m_missingMetaHasBeenSet(false),
43 m_metadataHasBeenSet(false),
44 m_objectLockMode(ObjectLockMode::NOT_SET),
45 m_objectLockModeHasBeenSet(false),
46 m_objectLockLegalHoldStatus(ObjectLockLegalHoldStatus::NOT_SET),
47 m_objectLockLegalHoldStatusHasBeenSet(false),
48 m_objectLockRetainUntilDateHasBeenSet(false),
49 m_partsCount(0),
50 m_partsCountHasBeenSet(false),
51 m_replicationStatus(ReplicationStatus::NOT_SET),
52 m_replicationStatusHasBeenSet(false),
53 m_requestCharged(RequestCharged::NOT_SET),
54 m_requestChargedHasBeenSet(false),
55 m_restoreHasBeenSet(false),
56 m_serverSideEncryption(ServerSideEncryption::NOT_SET),
57 m_serverSideEncryptionHasBeenSet(false),
58 m_sSECustomerAlgorithmHasBeenSet(false),
59 m_sSEKMSKeyIdHasBeenSet(false),
60 m_sSECustomerKeyMD5HasBeenSet(false),
61 m_storageClass(StorageClass::NOT_SET),
62 m_storageClassHasBeenSet(false),
63 m_tagCount(0),
64 m_tagCountHasBeenSet(false),
65 m_versionIdHasBeenSet(false),
66 m_bucketKeyEnabled(false),
67 m_bucketKeyEnabledHasBeenSet(false),
68 m_customizedAccessLogTagHasBeenSet(false)
69 {
70 }
71
72
AddQueryStringParameters(URI & uri) const73 void WriteGetObjectResponseRequest::AddQueryStringParameters(URI& uri) const
74 {
75 Aws::StringStream ss;
76 if(!m_customizedAccessLogTag.empty())
77 {
78 // only accept customized LogTag which starts with "x-"
79 Aws::Map<Aws::String, Aws::String> collectedLogTags;
80 for(const auto& entry: m_customizedAccessLogTag)
81 {
82 if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
83 {
84 collectedLogTags.emplace(entry.first, entry.second);
85 }
86 }
87
88 if (!collectedLogTags.empty())
89 {
90 uri.AddQueryStringParameter(collectedLogTags);
91 }
92 }
93 }
94
GetRequestSpecificHeaders() const95 Aws::Http::HeaderValueCollection WriteGetObjectResponseRequest::GetRequestSpecificHeaders() const
96 {
97 Aws::Http::HeaderValueCollection headers;
98 Aws::StringStream ss;
99 if(m_requestRouteHasBeenSet)
100 {
101 ss << m_requestRoute;
102 headers.emplace("x-amz-request-route", ss.str());
103 ss.str("");
104 }
105
106 if(m_requestTokenHasBeenSet)
107 {
108 ss << m_requestToken;
109 headers.emplace("x-amz-request-token", ss.str());
110 ss.str("");
111 }
112
113 if(m_statusCodeHasBeenSet)
114 {
115 ss << m_statusCode;
116 headers.emplace("x-amz-fwd-status", ss.str());
117 ss.str("");
118 }
119
120 if(m_errorCodeHasBeenSet)
121 {
122 ss << m_errorCode;
123 headers.emplace("x-amz-fwd-error-code", ss.str());
124 ss.str("");
125 }
126
127 if(m_errorMessageHasBeenSet)
128 {
129 ss << m_errorMessage;
130 headers.emplace("x-amz-fwd-error-message", ss.str());
131 ss.str("");
132 }
133
134 if(m_acceptRangesHasBeenSet)
135 {
136 ss << m_acceptRanges;
137 headers.emplace("x-amz-fwd-header-accept-ranges", ss.str());
138 ss.str("");
139 }
140
141 if(m_cacheControlHasBeenSet)
142 {
143 ss << m_cacheControl;
144 headers.emplace("x-amz-fwd-header-cache-control", ss.str());
145 ss.str("");
146 }
147
148 if(m_contentDispositionHasBeenSet)
149 {
150 ss << m_contentDisposition;
151 headers.emplace("x-amz-fwd-header-content-disposition", ss.str());
152 ss.str("");
153 }
154
155 if(m_contentEncodingHasBeenSet)
156 {
157 ss << m_contentEncoding;
158 headers.emplace("x-amz-fwd-header-content-encoding", ss.str());
159 ss.str("");
160 }
161
162 if(m_contentLanguageHasBeenSet)
163 {
164 ss << m_contentLanguage;
165 headers.emplace("x-amz-fwd-header-content-language", ss.str());
166 ss.str("");
167 }
168
169 if(m_contentLengthHasBeenSet)
170 {
171 ss << m_contentLength;
172 headers.emplace("content-length", ss.str());
173 ss.str("");
174 }
175
176 if(m_contentRangeHasBeenSet)
177 {
178 ss << m_contentRange;
179 headers.emplace("x-amz-fwd-header-content-range", ss.str());
180 ss.str("");
181 }
182
183 if(m_deleteMarkerHasBeenSet)
184 {
185 ss << std::boolalpha << m_deleteMarker;
186 headers.emplace("x-amz-fwd-header-x-amz-delete-marker", ss.str());
187 ss.str("");
188 }
189
190 if(m_eTagHasBeenSet)
191 {
192 ss << m_eTag;
193 headers.emplace("x-amz-fwd-header-etag", ss.str());
194 ss.str("");
195 }
196
197 if(m_expiresHasBeenSet)
198 {
199 headers.emplace("x-amz-fwd-header-expires", m_expires.ToGmtString(DateFormat::RFC822));
200 }
201
202 if(m_expirationHasBeenSet)
203 {
204 ss << m_expiration;
205 headers.emplace("x-amz-fwd-header-x-amz-expiration", ss.str());
206 ss.str("");
207 }
208
209 if(m_lastModifiedHasBeenSet)
210 {
211 headers.emplace("x-amz-fwd-header-last-modified", m_lastModified.ToGmtString(DateFormat::RFC822));
212 }
213
214 if(m_missingMetaHasBeenSet)
215 {
216 ss << m_missingMeta;
217 headers.emplace("x-amz-fwd-header-x-amz-missing-meta", ss.str());
218 ss.str("");
219 }
220
221 if(m_metadataHasBeenSet)
222 {
223 for(const auto& item : m_metadata)
224 {
225 ss << "x-amz-meta-" << item.first;
226 headers.emplace(ss.str(), item.second);
227 ss.str("");
228 }
229 }
230
231 if(m_objectLockModeHasBeenSet)
232 {
233 headers.emplace("x-amz-fwd-header-x-amz-object-lock-mode", ObjectLockModeMapper::GetNameForObjectLockMode(m_objectLockMode));
234 }
235
236 if(m_objectLockLegalHoldStatusHasBeenSet)
237 {
238 headers.emplace("x-amz-fwd-header-x-amz-object-lock-legal-hold", ObjectLockLegalHoldStatusMapper::GetNameForObjectLockLegalHoldStatus(m_objectLockLegalHoldStatus));
239 }
240
241 if(m_objectLockRetainUntilDateHasBeenSet)
242 {
243 headers.emplace("x-amz-fwd-header-x-amz-object-lock-retain-until-date", m_objectLockRetainUntilDate.ToGmtString(DateFormat::ISO_8601));
244 }
245
246 if(m_partsCountHasBeenSet)
247 {
248 ss << m_partsCount;
249 headers.emplace("x-amz-fwd-header-x-amz-mp-parts-count", ss.str());
250 ss.str("");
251 }
252
253 if(m_replicationStatusHasBeenSet)
254 {
255 headers.emplace("x-amz-fwd-header-x-amz-replication-status", ReplicationStatusMapper::GetNameForReplicationStatus(m_replicationStatus));
256 }
257
258 if(m_requestChargedHasBeenSet)
259 {
260 headers.emplace("x-amz-fwd-header-x-amz-request-charged", RequestChargedMapper::GetNameForRequestCharged(m_requestCharged));
261 }
262
263 if(m_restoreHasBeenSet)
264 {
265 ss << m_restore;
266 headers.emplace("x-amz-fwd-header-x-amz-restore", ss.str());
267 ss.str("");
268 }
269
270 if(m_serverSideEncryptionHasBeenSet)
271 {
272 headers.emplace("x-amz-fwd-header-x-amz-server-side-encryption", ServerSideEncryptionMapper::GetNameForServerSideEncryption(m_serverSideEncryption));
273 }
274
275 if(m_sSECustomerAlgorithmHasBeenSet)
276 {
277 ss << m_sSECustomerAlgorithm;
278 headers.emplace("x-amz-fwd-header-x-amz-server-side-encryption-customer-algorithm", ss.str());
279 ss.str("");
280 }
281
282 if(m_sSEKMSKeyIdHasBeenSet)
283 {
284 ss << m_sSEKMSKeyId;
285 headers.emplace("x-amz-fwd-header-x-amz-server-side-encryption-aws-kms-key-id", ss.str());
286 ss.str("");
287 }
288
289 if(m_sSECustomerKeyMD5HasBeenSet)
290 {
291 ss << m_sSECustomerKeyMD5;
292 headers.emplace("x-amz-fwd-header-x-amz-server-side-encryption-customer-key-md5", ss.str());
293 ss.str("");
294 }
295
296 if(m_storageClassHasBeenSet)
297 {
298 headers.emplace("x-amz-fwd-header-x-amz-storage-class", StorageClassMapper::GetNameForStorageClass(m_storageClass));
299 }
300
301 if(m_tagCountHasBeenSet)
302 {
303 ss << m_tagCount;
304 headers.emplace("x-amz-fwd-header-x-amz-tagging-count", ss.str());
305 ss.str("");
306 }
307
308 if(m_versionIdHasBeenSet)
309 {
310 ss << m_versionId;
311 headers.emplace("x-amz-fwd-header-x-amz-version-id", ss.str());
312 ss.str("");
313 }
314
315 if(m_bucketKeyEnabledHasBeenSet)
316 {
317 ss << std::boolalpha << m_bucketKeyEnabled;
318 headers.emplace("x-amz-fwd-header-x-amz-server-side-encryption-bucket-key-enabled", ss.str());
319 ss.str("");
320 }
321
322 return headers;
323
324 }
325