mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
correctly parse input from elopage request
This commit is contained in:
parent
ec69c53fd9
commit
158904f5a1
@ -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);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user