correctly parse input from elopage request

This commit is contained in:
Dario 2019-10-10 15:18:31 +02:00
parent ec69c53fd9
commit 158904f5a1

View File

@ -2,6 +2,7 @@
#include "Poco/Net/HTTPServerRequest.h"
#include "Poco/Net/HTTPServerResponse.h"
#include "Poco/DeflatingStream.h"
#include "Poco/URI.h"
#include "../ServerConfig.h"
@ -14,13 +15,61 @@ void ElopageWebhook::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
std::istream& stream = request.stream();
Poco::Net::NameValueCollection elopageRequestData;
while (!stream.eof()) {
int breakCount = 100;
while (stream.good() && breakCount > 0) {
char dummy;
char keyBuffer[30]; memset(keyBuffer, 0, 30);
char valueBuffer[35]; memset(valueBuffer, 0, 35);
stream.get(keyBuffer, 30, '=')
.get(valueBuffer, 35, '&');
printf("[ElopageWebhook::handleRequest] key: %s, value: %s\n", keyBuffer, valueBuffer);
elopageRequestData.set(keyBuffer, valueBuffer);
char valueBuffer[75]; memset(valueBuffer, 0, 75);
/*stream.get(keyBuffer, 30, '=').get(dummy)
.get(valueBuffer, 35, '&').get(dummy);*/
std::string line;
std::getline(stream, line);
int mode = 0;
int cursor = 0;
for (int i = 0; i < line.size(); i++) {
char c = line.at(i);
if (c == '\n') break;
if (c == '+') {
c = ' ';
}
if (c == '&') {
mode = 0;
cursor = 0;
std::string urlDecodedValue;
Poco::URI::decode(valueBuffer, urlDecodedValue);
elopageRequestData.set(keyBuffer, urlDecodedValue);
memset(keyBuffer, 0, 30);
memset(valueBuffer, 0, 75);
continue;
}
switch (mode) {
case 0: // read key
if (c == '=') {
mode = 1;
cursor = 0;
continue;
}
if (cursor < 29) {
keyBuffer[cursor++] = c;
}
else {
int zahl = 1;
}
break;
case 1: // read value
if (cursor < 74) {
valueBuffer[cursor++] = c;
}
else {
int zahl = 1;
}
break;
}
}
//printf("[ElopageWebhook::handleRequest] key: %s, value: %s\n", keyBuffer, valueBuffer);
/// elopageRequestData.set(keyBuffer, valueBuffer);
stream.good();
breakCount--;
}
UniLib::controller::TaskPtr handleElopageTask(new HandleElopageRequestTask(elopageRequestData));
handleElopageTask->scheduleTask(handleElopageTask);