Skip to content

Commit b067b3d

Browse files
Adds url (%) encoding to all processed url query parameters, and json escaping for all json post bodies.
1 parent 9813222 commit b067b3d

File tree

3 files changed

+14
-35
lines changed

3 files changed

+14
-35
lines changed

src/api.cpp

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -106,19 +106,13 @@ std::string MarketplaceApi::getAuthUrl(
106106
std::string endpoint = segments.size() > 0 ? std::accumulate(std::next(segments.begin()), segments.end(), segments[0],
107107
[&](std::string a, std::string b) { return a + "/" + b; }) : "";
108108

109-
std::stringstream queryStrStream;
110-
for (const auto& pair : queryParams) {
111-
queryStrStream << pair.first << "=" << pair.second << "&";
112-
}
113-
114-
std::string queryString = queryStrStream.str();
109+
auto qString = queryString(queryParams);
115110

116-
if (!queryString.empty()) {
117-
queryString.pop_back();
118-
queryString = "?" + queryString;
111+
if (!qString.empty()) {
112+
qString = "?" + qString;
119113
}
120114

121-
std::string url = _authUrl + "/" + endpoint + queryString;
115+
std::string url = _authUrl + "/" + endpoint + qString;
122116
return url;
123117
}
124118

@@ -130,19 +124,13 @@ std::string MarketplaceApi::getGatewayUrl(
130124
std::string endpoint = segments.size() > 0 ? std::accumulate(std::next(segments.begin()), segments.end(), segments[0],
131125
[&](std::string a, std::string b) { return a + "/" + b; }) : "";
132126

133-
std::stringstream queryStrStream;
134-
for (const auto& pair : queryParams) {
135-
queryStrStream << pair.first << "=" << pair.second << "&";
136-
}
137-
138-
std::string queryString = queryStrStream.str();
127+
auto qString = queryString(queryParams);
139128

140-
if (!queryString.empty()) {
141-
queryString.pop_back();
142-
queryString = "?" + queryString;
129+
if (!qString.empty()) {
130+
qString = "?" + qString;
143131
}
144132

145-
std::string url = _gatewayUrl + "/" + endpoint + queryString;
133+
std::string url = _gatewayUrl + "/" + endpoint + qString;
146134
return url;
147135
}
148136

src/elgato-cloud-data.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ void ElgatoCloud::_Listen()
207207
std::map<std::string, std::string> queryParams = {
208208
{"grant_type", "authorization_code"},
209209
{"code", code},
210-
{REDIRECT_KEY, url_encode(REDIRECT)},
210+
{REDIRECT_KEY, REDIRECT},
211211
{CODE_VERIFIER_KEY, _last_code_verifier},
212212
{ID_KEY, ID}
213213
};
@@ -296,7 +296,7 @@ void ElgatoCloud::StartLogin()
296296
std::map<std::string, std::string> queryParams = {
297297
{RESPONSE_TYPE_KEY, RESPONSE_TYPE_CODE},
298298
{ID_KEY, ID},
299-
{REDIRECT_KEY, url_encode(REDIRECT)},
299+
{REDIRECT_KEY, REDIRECT},
300300
{CHALLENGE_KEY, stringhash},
301301
{CC_KEY, CC_METHOD}
302302
};

src/util.cpp

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ std::string queryString(std::map<std::string, std::string> params)
190190
{
191191
std::stringstream queryStrStream;
192192
for (const auto& pair : params) {
193-
queryStrStream << pair.first << "=" << pair.second << "&";
193+
queryStrStream << url_encode(pair.first) << "=" << url_encode(pair.second) << "&";
194194
}
195195

196196
std::string queryString = queryStrStream.str();
@@ -204,18 +204,9 @@ std::string queryString(std::map<std::string, std::string> params)
204204

205205
std::string postBody(std::map<std::string, std::string> params)
206206
{
207-
std::stringstream queryStrStream;
208-
for (const auto& pair : params) {
209-
queryStrStream << "\"" << pair.first << "\": \"" << pair.second << "\",";
210-
}
211-
212-
std::string queryString = queryStrStream.str();
213-
214-
if (!queryString.empty()) {
215-
queryString.pop_back();
216-
}
217-
218-
return "{" + queryString + "}";
207+
nlohmann::json jsonBody = nlohmann::json(params);
208+
std::string jsonString = jsonBody.dump();
209+
return jsonString;
219210
}
220211

221212
std::string fetch_string_from_post(std::string url, std::string postdata, std::string token)

0 commit comments

Comments
 (0)