Skip to content

Commit

Permalink
api: use POST to encrypt payloads
Browse files Browse the repository at this point in the history
  • Loading branch information
tcsullivan committed Jul 6, 2024
1 parent ec97d67 commit 8876954
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
31 changes: 19 additions & 12 deletions noisemeter-device/api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,18 @@

API::Request::Request(const char endpoint[])
{
url.reserve(256);
url.reserve(128);
url.concat(Base);
url.concat(endpoint);
url.concat('?');
params.reserve(128);
}

API::Request& API::Request::addParam(const char param[], String value)
{
url.concat(param);
url.concat('=');
url.concat(urlEncode(value));
url.concat('&');
params.concat('&');
params.concat(param);
params.concat('=');
params.concat(urlEncode(value));
return *this;
}

Expand All @@ -53,8 +53,9 @@ std::optional<JsonDocument> API::sendAuthorizedRequest(const API::Request& req)

HTTPClient https;
if (https.begin(client, req.url)) {
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
https.addHeader("Authorization", String("Token ") + token);
return sendHttpRequest(https);
return sendHttpRequest(https, req.params.substring(1));
#ifdef API_VERBOSE
} else {
SERIAL.println("[api] Failed to https.begin()");
Expand All @@ -75,19 +76,25 @@ std::optional<JsonDocument> API::sendNonauthorizedRequest(const API::Request& re
#endif

HTTPClient https;
if (https.begin(client, req.url))
return sendHttpRequest(https);
if (https.begin(client, req.url)) {
https.addHeader("Content-Type", "application/x-www-form-urlencoded");
return sendHttpRequest(https, req.params.substring(1));
#ifdef API_VERBOSE
else
} else {
SERIAL.println("[api] Failed to https.begin()");
#endif
}

return {};
}

std::optional<JsonDocument> API::sendHttpRequest(HTTPClient& https)
std::optional<JsonDocument> API::sendHttpRequest(HTTPClient& https, const String& payload)
{
if (const auto code = https.GET(); code > 0) {
#ifdef API_VERBOSE
SERIAL.print("[api] payload: ");
SERIAL.println(payload);
#endif
if (const auto code = https.POST(payload); code > 0) {
const auto response = https.getString();
const auto json = responseToJson(response);
https.end();
Expand Down
3 changes: 2 additions & 1 deletion noisemeter-device/api.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class API

/** Stores the resulting request URL. */
String url;
String params;
};

public:
Expand Down Expand Up @@ -123,7 +124,7 @@ class API
/** Attempts the given request and returns the JSON response on success. */
std::optional<JsonDocument> sendNonauthorizedRequest(const Request& req);

std::optional<JsonDocument> sendHttpRequest(HTTPClient& https);
std::optional<JsonDocument> sendHttpRequest(HTTPClient& https, const String& payload);
};

#endif // API_H
Expand Down

0 comments on commit 8876954

Please sign in to comment.