| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include <Framework/RequestBuilder.h>
- namespace AWSCore
- {
- RequestBuilder::RequestBuilder()
- : m_httpMethod(Aws::Http::HttpMethod::HTTP_GET)
- {
- }
- bool RequestBuilder::SetPathParameterUnescaped(const char* key, const char* value)
- {
- size_t start_pos = m_requestUrl.find(key);
- if (start_pos == Aws::String::npos)
- {
- AZ_Error("TODO", false, "Key \"%s\" not found in url \"%s\".", key, m_requestUrl.c_str());
- return false;
- }
- else
- {
- m_requestUrl.replace(start_pos, strlen(key), value);
- return true;
- }
- }
- bool RequestBuilder::SetPathParameter(const char* key, const AZStd::string& value)
- {
- return SetPathParameterUnescaped(key, escape(value.c_str()).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, const char* value)
- {
- return SetPathParameterUnescaped(key, escape(value).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, double value)
- {
- return SetPathParameterUnescaped(key, AZStd::string::format("%f", value).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, bool value)
- {
- return SetPathParameterUnescaped(key, value ? "true" : "false");
- }
- bool RequestBuilder::SetPathParameter(const char* key, int value)
- {
- return SetPathParameterUnescaped(key, AZStd::string::format("%i", value).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, unsigned value)
- {
- return SetPathParameterUnescaped(key, AZStd::string::format("%u", value).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, int64_t value)
- {
- return SetPathParameterUnescaped(key, AZStd::string::format("%" PRId64, static_cast<int64_t>(value)).c_str());
- }
- bool RequestBuilder::SetPathParameter(const char* key, uint64_t value)
- {
- return SetPathParameterUnescaped(key, AZStd::string::format("%" PRIu64, static_cast<uint64_t>(value)).c_str());
- }
- bool RequestBuilder::AddQueryParameterUnescaped(const char* name, const char* value)
- {
- m_requestUrl.append(m_requestUrl.find('?') == Aws::String::npos ? "?" : "&");
- m_requestUrl.append(name);
- m_requestUrl.append("=");
- m_requestUrl.append(value);
- return true;
- }
- bool RequestBuilder::AddQueryParameter(const char* name, const AZStd::string& value)
- {
- return AddQueryParameterUnescaped(name, escape(value.c_str()).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, const char* value)
- {
- return AddQueryParameterUnescaped(name, escape(value).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, double value)
- {
- return AddQueryParameterUnescaped(name, AZStd::string::format("%f", value).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, bool value)
- {
- return AddQueryParameterUnescaped(name, value ? "true" : "false");
- }
- bool RequestBuilder::AddQueryParameter(const char* name, int value)
- {
- return AddQueryParameterUnescaped(name, AZStd::string::format("%d", value).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, unsigned value)
- {
- return AddQueryParameterUnescaped(name, AZStd::string::format("%u", value).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, int64_t value)
- {
- return AddQueryParameterUnescaped(name, AZStd::string::format("%" PRId64, static_cast<int64_t>(value)).c_str());
- }
- bool RequestBuilder::AddQueryParameter(const char* name, uint64_t value)
- {
- return AddQueryParameterUnescaped(name, AZStd::string::format("%" PRIu64, static_cast<uint64_t>(value)).c_str());
- }
- Aws::String RequestBuilder::escape(const char* value)
- {
- Aws::String target;
- while (*value != '\0')
- {
- switch (*value)
- {
- case ' ':
- target.append("%20", 3);
- break;
- case '!':
- target.append("%21", 3);
- break;
- case '#':
- target.append("%23", 3);
- break;
- case '$':
- target.append("%24", 3);
- break;
- case '%':
- target.append("%25", 3);
- break;
- case '&':
- target.append("%26", 3);
- break;
- case '\'':
- target.append("%27", 3);
- break;
- case '(':
- target.append("%28", 3);
- break;
- case ')':
- target.append("%29", 3);
- break;
- case '*':
- target.append("%2A", 3);
- break;
- case '+':
- target.append("%2B", 3);
- break;
- case ',':
- target.append("%2C", 3);
- break;
- case '/':
- target.append("%2F", 3);
- break;
- case ':':
- target.append("%3A", 3);
- break;
- case ';':
- target.append("%3B", 3);
- break;
- case '=':
- target.append("%3D", 3);
- break;
- case '?':
- target.append("%3F", 3);
- break;
- case '@':
- target.append("%40", 3);
- break;
- case '[':
- target.append("%5B", 3);
- break;
- case ']':
- target.append("%5D", 3);
- break;
- default:
- target.push_back(*value);
- break;
- }
- ++value;
- }
- return target;
- }
- } // namespace AWSCore
|