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/SelectObjectContentRequest.h>
7 #include <aws/core/utils/xml/XmlSerializer.h>
8 #include <aws/core/utils/memory/stl/AWSStringStream.h>
9 #include <aws/core/http/URI.h>
10 #include <aws/core/utils/memory/stl/AWSStringStream.h>
11 
12 #include <utility>
13 
14 using namespace Aws::S3Crt::Model;
15 using namespace Aws::Utils::Xml;
16 using namespace Aws::Utils;
17 using namespace Aws::Http;
18 
SelectObjectContentRequest()19 SelectObjectContentRequest::SelectObjectContentRequest() :
20     m_bucketHasBeenSet(false),
21     m_keyHasBeenSet(false),
22     m_sSECustomerAlgorithmHasBeenSet(false),
23     m_sSECustomerKeyHasBeenSet(false),
24     m_sSECustomerKeyMD5HasBeenSet(false),
25     m_expressionHasBeenSet(false),
26     m_expressionType(ExpressionType::NOT_SET),
27     m_expressionTypeHasBeenSet(false),
28     m_requestProgressHasBeenSet(false),
29     m_inputSerializationHasBeenSet(false),
30     m_outputSerializationHasBeenSet(false),
31     m_scanRangeHasBeenSet(false),
32     m_expectedBucketOwnerHasBeenSet(false),
33     m_customizedAccessLogTagHasBeenSet(false),
34     m_decoder(Aws::Utils::Event::EventStreamDecoder(&m_handler))
35 {
36 }
37 
SerializePayload() const38 Aws::String SelectObjectContentRequest::SerializePayload() const
39 {
40   XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("SelectObjectContentRequest");
41 
42   XmlNode parentNode = payloadDoc.GetRootElement();
43   parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
44 
45   Aws::StringStream ss;
46   if(m_expressionHasBeenSet)
47   {
48    XmlNode expressionNode = parentNode.CreateChildElement("Expression");
49    expressionNode.SetText(m_expression);
50   }
51 
52   if(m_expressionTypeHasBeenSet)
53   {
54    XmlNode expressionTypeNode = parentNode.CreateChildElement("ExpressionType");
55    expressionTypeNode.SetText(ExpressionTypeMapper::GetNameForExpressionType(m_expressionType));
56   }
57 
58   if(m_requestProgressHasBeenSet)
59   {
60    XmlNode requestProgressNode = parentNode.CreateChildElement("RequestProgress");
61    m_requestProgress.AddToNode(requestProgressNode);
62   }
63 
64   if(m_inputSerializationHasBeenSet)
65   {
66    XmlNode inputSerializationNode = parentNode.CreateChildElement("InputSerialization");
67    m_inputSerialization.AddToNode(inputSerializationNode);
68   }
69 
70   if(m_outputSerializationHasBeenSet)
71   {
72    XmlNode outputSerializationNode = parentNode.CreateChildElement("OutputSerialization");
73    m_outputSerialization.AddToNode(outputSerializationNode);
74   }
75 
76   if(m_scanRangeHasBeenSet)
77   {
78    XmlNode scanRangeNode = parentNode.CreateChildElement("ScanRange");
79    m_scanRange.AddToNode(scanRangeNode);
80   }
81 
82   return payloadDoc.ConvertToString();
83 }
84 
AddQueryStringParameters(URI & uri) const85 void SelectObjectContentRequest::AddQueryStringParameters(URI& uri) const
86 {
87     Aws::StringStream ss;
88     if(!m_customizedAccessLogTag.empty())
89     {
90         // only accept customized LogTag which starts with "x-"
91         Aws::Map<Aws::String, Aws::String> collectedLogTags;
92         for(const auto& entry: m_customizedAccessLogTag)
93         {
94             if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
95             {
96                 collectedLogTags.emplace(entry.first, entry.second);
97             }
98         }
99 
100         if (!collectedLogTags.empty())
101         {
102             uri.AddQueryStringParameter(collectedLogTags);
103         }
104     }
105 }
106 
GetRequestSpecificHeaders() const107 Aws::Http::HeaderValueCollection SelectObjectContentRequest::GetRequestSpecificHeaders() const
108 {
109   Aws::Http::HeaderValueCollection headers;
110   Aws::StringStream ss;
111   if(m_sSECustomerAlgorithmHasBeenSet)
112   {
113     ss << m_sSECustomerAlgorithm;
114     headers.emplace("x-amz-server-side-encryption-customer-algorithm",  ss.str());
115     ss.str("");
116   }
117 
118   if(m_sSECustomerKeyHasBeenSet)
119   {
120     ss << m_sSECustomerKey;
121     headers.emplace("x-amz-server-side-encryption-customer-key",  ss.str());
122     ss.str("");
123   }
124 
125   if(m_sSECustomerKeyMD5HasBeenSet)
126   {
127     ss << m_sSECustomerKeyMD5;
128     headers.emplace("x-amz-server-side-encryption-customer-key-md5",  ss.str());
129     ss.str("");
130   }
131 
132   if(m_expectedBucketOwnerHasBeenSet)
133   {
134     ss << m_expectedBucketOwner;
135     headers.emplace("x-amz-expected-bucket-owner",  ss.str());
136     ss.str("");
137   }
138 
139   return headers;
140 }
141