parent
5c5e49c03e
commit
dacda254ee
@ -0,0 +1,112 @@
|
|||||||
|
/*
|
||||||
|
Copyright 2018 Denes Matetelki <denes@matetelki.com>
|
||||||
|
|
||||||
|
This file is part of webfish.
|
||||||
|
|
||||||
|
webfish is free software: you can redistribute it and/or modify it
|
||||||
|
under the terms of the GNU General Public License v3 as published by the Free
|
||||||
|
Software Foundation.
|
||||||
|
|
||||||
|
webfish is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License v3 for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License v3 along
|
||||||
|
with webfish. If not, see
|
||||||
|
https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WEBHOOK_MESSAGE_HPP
|
||||||
|
#define WEBHOOK_MESSAGE_HPP
|
||||||
|
|
||||||
|
#include <cpp_utils/Message.hpp>
|
||||||
|
|
||||||
|
#include <iomanip> // put_time
|
||||||
|
#include <ctime>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
|
class WebhookMessage : public Message
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
WebhookMessage( void *msgParam = 0)
|
||||||
|
: Message(msgParam)
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool buildMessage( const void *msgPart,
|
||||||
|
const size_t msgLen )
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
m_buffer = std::string( (const char*) msgPart, msgLen );
|
||||||
|
|
||||||
|
/// @todo use it!
|
||||||
|
// not using getExpectedLength
|
||||||
|
onMessageReady();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void onMessageReady()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
|
||||||
|
// LOG_BEGIN(Logger::INFO)
|
||||||
|
// LOG_PROP("buffer", m_buffer)
|
||||||
|
// LOG_PROP("host", m_connection->getHost())
|
||||||
|
// LOG_PROP("port", m_connection->getPort())
|
||||||
|
// LOG_END("Got message.");
|
||||||
|
|
||||||
|
/// @todo check the source and pass is any and reply with 400 or 404
|
||||||
|
|
||||||
|
int status = system((const char*)m_param);
|
||||||
|
|
||||||
|
std::string r = generateReply(status == 0);
|
||||||
|
m_connection->send(r.c_str(), r.length());
|
||||||
|
m_buffer.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string generateReply(bool ok = true) const {
|
||||||
|
const auto t = std::time(nullptr);
|
||||||
|
const auto tm = *std::localtime(&t);
|
||||||
|
std::ostringstream oss;
|
||||||
|
oss << "HTTP/1.1 ";
|
||||||
|
oss << (ok ? "200 OK" : "500 Internal Server Error") << "\r\n";
|
||||||
|
|
||||||
|
// Fri, 08 Feb 2019 12:35:37 GMT
|
||||||
|
oss << "Date: " << std::put_time(&tm, "%a, %d %b %Y %T %Z") << "\r\n";
|
||||||
|
|
||||||
|
oss << "X-Content-Type-Options: nosniff\r\n" \
|
||||||
|
"Content-Type: text/plain;charset=utf-8\r\n" \
|
||||||
|
"Content-Length: 10\r\n" \
|
||||||
|
"Server: webfish(0.1)\r\n" \
|
||||||
|
"\r\n" \
|
||||||
|
"Processed\r\n";
|
||||||
|
|
||||||
|
return oss.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
Message* clone()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
return new WebhookMessage(m_param);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string getBuffer()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
return m_buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
size_t getExpectedLength()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // WEBHOOK_MESSAGE_HPP
|
Loading…
Reference in new issue