Remove API Key and Update Callback

This commit is contained in:
2020-06-10 22:15:14 +02:00
parent e5ef4d886a
commit 4d8f132df9
8 changed files with 114 additions and 15 deletions
+45
View File
@@ -241,4 +241,49 @@ HttpReply HttpReply::StockReply(HttpReply::Status::type status)
return reply; return reply;
} }
namespace Conversions {
HttpReply::Status::type HttpReply(HttpServer::HttpReply::Status::type status)
{
switch (status)
{
case HttpServer::HttpReply::Status::Ok:
return HttpReply::Status::Ok;
case HttpServer::HttpReply::Status::Created:
return HttpReply::Status::Created;
case HttpServer::HttpReply::Status::Accepted:
return HttpReply::Status::Accepted;
case HttpServer::HttpReply::Status::NoContent:
return HttpReply::Status::NoContent;
case HttpServer::HttpReply::Status::MultipleChoices:
return HttpReply::Status::MultipleChoices;
case HttpServer::HttpReply::Status::MovedPermanently:
return HttpReply::Status::MovedPermanently;
case HttpServer::HttpReply::Status::MovedTemporarily:
return HttpReply::Status::MovedTemporarily;
case HttpReply::Status::NotModified:
return HttpReply::Status::NotModified;
case HttpServer::HttpReply::Status::BadRequest:
return HttpReply::Status::BadRequest;
case HttpServer::HttpReply::Status::Unauthorized:
return HttpReply::Status::Unauthorized;
case HttpServer::HttpReply::Status::Forbidden:
return HttpReply::Status::Forbidden;
case HttpServer::HttpReply::Status::NotFound:
return HttpReply::Status::NotFound;
case HttpServer::HttpServer::HttpReply::Status::InternalServerError:
return HttpReply::Status::InternalServerError;
case HttpServer::HttpReply::Status::NotImplemented:
return HttpReply::Status::NotImplemented;
case HttpServer::HttpReply::Status::BadGateway:
return HttpReply::Status::BadGateway;
case HttpServer::HttpReply::Status::ServiceUnavailable:
return HttpReply::Status::ServiceUnavailable;
default:
return HttpReply::Status::InternalServerError;
}
}
} // namespace Conversions
} // namespace Http } // namespace Http
+7
View File
@@ -2,6 +2,7 @@
#define HTTP_HTTPREPLY_H #define HTTP_HTTPREPLY_H
#include "HttpHeaders.h" #include "HttpHeaders.h"
#include "HttpServer.h"
#include <asio.hpp> #include <asio.hpp>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -41,6 +42,12 @@ struct HttpReply
static HttpReply StockReply(Status::type status); static HttpReply StockReply(Status::type status);
}; };
namespace Conversions {
HttpReply::Status::type HttpReply(HttpServer::HttpReply::Status::type status);
} // namespace Conversions
} // namespace Http } // namespace Http
#endif // HTTP_HTTPREPLY_H #endif // HTTP_HTTPREPLY_H
+21 -8
View File
@@ -7,7 +7,7 @@
namespace Http { namespace Http {
HttpRequestHandler::HttpRequestHandler(std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback) : HttpRequestHandler::HttpRequestHandler(HttpServer::CallbackMethod callback) :
m_callback(callback) m_callback(callback)
{ {
} }
@@ -21,15 +21,28 @@ HttpReply HttpRequestHandler::HandleRequest(const HttpRequest& request, const st
if (requestPath.empty() || requestPath[0] != '/' || requestPath.find("..") != std::string::npos) if (requestPath.empty() || requestPath[0] != '/' || requestPath.find("..") != std::string::npos)
return HttpReply::StockReply(HttpReply::Status::BadRequest); return HttpReply::StockReply(HttpReply::Status::BadRequest);
if (!StringAlgorithm::iequals(request.uri, "/api") && !StringAlgorithm::istarts_with(request.uri, "/api/")) std::vector<HttpPostData> postData;
return HttpReply::StockReply(HttpReply::Status::NotFound); std::string boundary = request.headers.GetBoundary();
if (!boundary.empty())
{
postData = GetPostData(request.headers.GetBoundary(), data);
}
else
{
if (!data.empty())
{
HttpPostData httpPostData;
httpPostData.name = "data";
httpPostData.value = data;
postData.push_back(httpPostData);
}
}
std::vector<HttpPostData> postData = GetPostData(request.headers.GetBoundary(), data); HttpServer::HttpReply forwardReply = ForwardRequest(request.uri, postData);
std::string answer = HandlePostData(request.uri.substr(4), postData);
HttpReply reply; HttpReply reply;
reply.status = HttpReply::Status::Ok; reply.status = Conversions::HttpReply(forwardReply.status);
reply.content = answer; reply.content = forwardReply.content;
reply.headers.resize(3); reply.headers.resize(3);
reply.headers[0].name = "Content-Length"; reply.headers[0].name = "Content-Length";
@@ -91,7 +104,7 @@ std::vector<HttpPostData> HttpRequestHandler::GetPostData(const std::string& bou
return postDataCollection; return postDataCollection;
} }
std::string HttpRequestHandler::HandlePostData(const std::string& uri, const std::vector<Http::HttpPostData>& postData) HttpServer::HttpReply HttpRequestHandler::ForwardRequest(const std::string& uri, const std::vector<Http::HttpPostData>& postData)
{ {
return m_callback(uri, postData); return m_callback(uri, postData);
} }
+4 -3
View File
@@ -4,6 +4,7 @@
#include "HttpReply.h" #include "HttpReply.h"
#include "HttpRequest.h" #include "HttpRequest.h"
#include "HttpPostData.h" #include "HttpPostData.h"
#include "HttpServer.h"
#include <functional> #include <functional>
#include <string> #include <string>
#include <vector> #include <vector>
@@ -14,7 +15,7 @@ namespace Http {
class HttpRequestHandler class HttpRequestHandler
{ {
public: public:
explicit HttpRequestHandler(std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback); explicit HttpRequestHandler(HttpServer::CallbackMethod callback);
HttpRequestHandler(const HttpRequestHandler&) = delete; HttpRequestHandler(const HttpRequestHandler&) = delete;
@@ -22,12 +23,12 @@ public:
private: private:
std::vector<HttpPostData> GetPostData(const std::string& boundary, const std::string& data) const; std::vector<HttpPostData> GetPostData(const std::string& boundary, const std::string& data) const;
std::string HandlePostData(const std::string& uri, const std::vector<HttpPostData>& postData); HttpServer::HttpReply ForwardRequest(const std::string& uri, const std::vector<HttpPostData>& postData);
static bool URLDecode(const std::string& in, std::string& out); static bool URLDecode(const std::string& in, std::string& out);
private: private:
std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> m_callback; HttpServer::CallbackMethod m_callback;
}; };
} // namespace Http } // namespace Http
+1 -1
View File
@@ -4,7 +4,7 @@
namespace Http { namespace Http {
HttpServer::HttpServer(unsigned short port, std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback) : HttpServer::HttpServer(unsigned short port, CallbackMethod callback) :
m_pHttpServerImpl(new HttpServerImpl(port, callback)) m_pHttpServerImpl(new HttpServerImpl(port, callback))
{ {
} }
+1 -1
View File
@@ -7,7 +7,7 @@
namespace Http { namespace Http {
HttpServerImpl::HttpServerImpl(unsigned short port, std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback) : HttpServerImpl::HttpServerImpl(unsigned short port, HttpServer::CallbackMethod callback) :
m_threadPoolSize(3), m_threadPoolSize(3),
m_signals(m_ioService), m_signals(m_ioService),
m_acceptor(m_ioService), m_acceptor(m_ioService),
+1 -1
View File
@@ -15,7 +15,7 @@ namespace Http {
class HttpServerImpl class HttpServerImpl
{ {
public: public:
HttpServerImpl(unsigned short port, std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback); HttpServerImpl(unsigned short port, HttpServer::CallbackMethod callback);
~HttpServerImpl(); ~HttpServerImpl();
void Wait(); void Wait();
+34 -1
View File
@@ -14,7 +14,40 @@ class HttpServerImpl;
class HttpServer class HttpServer
{ {
public: public:
HttpServer(unsigned short port, std::function<std::string(const std::string&, const std::vector<HttpPostData>&)> callback); struct HttpReply
{
struct Status
{
enum type
{
Ok = 200,
Created = 201,
Accepted = 202,
NoContent = 204,
MultipleChoices = 300,
MovedPermanently = 301,
MovedTemporarily = 302,
NotModified = 304,
BadRequest = 400,
Unauthorized = 401,
Forbidden = 403,
NotFound = 404,
InternalServerError = 500,
NotImplemented = 501,
BadGateway = 502,
ServiceUnavailable = 503
};
};
Status::type status;
std::string content;
};
public:
typedef std::function<HttpReply(const std::string&, const std::vector<HttpPostData>&)> CallbackMethod;
public:
HttpServer(unsigned short port, CallbackMethod callback);
~HttpServer(); ~HttpServer();
void Wait(); void Wait();