fix elopage webhook request error

This commit is contained in:
Dario 2020-02-28 11:56:55 +01:00
parent 15a08227e6
commit f77f50a24b
2 changed files with 34 additions and 25 deletions

View File

@ -38,14 +38,15 @@ void ElopageWebhook::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
int breakCount = 100; int breakCount = 100;
while (stream.good() && breakCount > 0) { while (stream.good() && breakCount > 0) {
// char dummy; // char dummy;
char keyBuffer[30]; memset(keyBuffer, 0, 30); //char keyBuffer[30]; memset(keyBuffer, 0, 30);
char valueBuffer[75]; memset(valueBuffer, 0, 75); //char valueBuffer[75]; memset(valueBuffer, 0, 75);
std::vector<char> keyBuffer(30);
std::vector<char> valueBuffer(75);
/*stream.get(keyBuffer, 30, '=').get(dummy) /*stream.get(keyBuffer, 30, '=').get(dummy)
.get(valueBuffer, 35, '&').get(dummy);*/ .get(valueBuffer, 35, '&').get(dummy);*/
std::string line; std::string line;
std::getline(stream, line); std::getline(stream, line);
int mode = 0; int mode = 0;
int cursor = 0;
for (int i = 0; i < line.size(); i++) { for (int i = 0; i < line.size(); i++) {
char c = line.at(i); char c = line.at(i);
completeRequest += c; completeRequest += c;
@ -55,43 +56,51 @@ void ElopageWebhook::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
} }
if (c == '&') { if (c == '&') {
mode = 0; mode = 0;
cursor = 0; valueBuffer.push_back('\0');
keyBuffer.push_back('\0');
std::string urlDecodedValue; std::string urlDecodedValue;
Poco::URI::decode(valueBuffer, urlDecodedValue); try {
elopageRequestData.set(keyBuffer, urlDecodedValue); Poco::URI::decode(valueBuffer.data(), urlDecodedValue);
memset(keyBuffer, 0, 30); }
memset(valueBuffer, 0, 75); catch (Poco::Exception& ex) {
Poco::Logger& logging(Poco::Logger::get("errorLog"));
logging.error("[ElopageWebhook::handleRequest] error decoding URI: %s, exception: %s", std::string(valueBuffer.data()), ex.displayText());
urlDecodedValue = valueBuffer.data();
}
elopageRequestData.set(keyBuffer.data(), urlDecodedValue);
valueBuffer.clear();
keyBuffer.clear();
continue; continue;
} }
switch (mode) { switch (mode) {
case 0: // read key case 0: // read key
if (c == '=') { if (c == '=') {
mode = 1; mode = 1;
cursor = 0;
continue; continue;
} }
if (cursor < 29) { keyBuffer.push_back(c);
keyBuffer[cursor++] = c;
}
else {
int zahl = 1;
}
break; break;
case 1: // read value case 1: // read value
if (cursor < 74) { valueBuffer.push_back(c);
valueBuffer[cursor++] = c;
}
else {
int zahl = 1;
}
break; break;
} }
} }
valueBuffer.push_back('\0');
keyBuffer.push_back('\0');
// last key-value pair // last key-value pair
std::string urlDecodedValue; std::string urlDecodedValue;
Poco::URI::decode(valueBuffer, urlDecodedValue); try {
if (strcmp(keyBuffer, "")) { Poco::URI::decode(valueBuffer.data(), urlDecodedValue);
elopageRequestData.set(keyBuffer, urlDecodedValue); }
catch (Poco::Exception& ex) {
Poco::Logger& logging(Poco::Logger::get("errorLog"));
logging.error("[ElopageWebhook::handleRequest] error decoding URI (last): %s, exception: %s", std::string(valueBuffer.data()), ex.displayText());
urlDecodedValue = valueBuffer.data();
}
if (strcmp(keyBuffer.data(), "")) {
elopageRequestData.set(keyBuffer.data(), urlDecodedValue);
} }
//printf("[ElopageWebhook::handleRequest] key: %s, value: %s\n", keyBuffer, valueBuffer); //printf("[ElopageWebhook::handleRequest] key: %s, value: %s\n", keyBuffer, valueBuffer);

View File

@ -561,7 +561,7 @@ bool User::validatePassphrase(const std::string& passphrase, Mnemonic** wordSour
if (i == 1) { if (i == 1) {
int zahl = 0; int zahl = 0;
} }
printf("wordlist: %d, word not found: %s\n", i, it->data()); //printf("wordlist: %d, word not found: %s\n", i, it->data());
existAll = false; existAll = false;
continue; continue;
} }