diff --git a/src/CGIHandler.cpp b/src/CGIHandler.cpp index 8d6b3778..623ef4df 100644 --- a/src/CGIHandler.cpp +++ b/src/CGIHandler.cpp @@ -38,14 +38,18 @@ void CGIHandler::handleRequest(HTTPRequest &request, HTTPResponse &response) MetaVariables env; env.HTTPRequestToMetaVars(request, env); + std::cout << BLUE << "CGIHandler: handleRequest" << RESET << std::endl; + std::cout << std::endl; std::cout << std::endl; std::cout << std::endl; std::cout << request << std::endl; - std::cout << request.getBody() << std::endl; + std::cout << YELLOW << request.getBody() << RESET << std::endl; std::cout << std::endl; std::cout << std::endl; + std::cout << YELLOW << "Request body: " << request.getBody() << RESET << std::endl; + if (!executeCGI(env, request.getBody(), response)) { response.setStatusCode(500, ""); diff --git a/src/MetaVariables.cpp b/src/MetaVariables.cpp index a927f169..2d65f13c 100644 --- a/src/MetaVariables.cpp +++ b/src/MetaVariables.cpp @@ -188,14 +188,15 @@ void MetaVariables::HTTPRequestToMetaVars(const HTTPRequest &request, MetaVariab { env.setVar("CONTENT_TYPE", ""); } - std::pair contentLengthHeader = request.getSingleHeader("Content-Length"); + std::pair contentLengthHeader = request.getSingleHeader("content-length"); if (!contentLengthHeader.first.empty()) { env.setVar("CONTENT_LENGTH", contentLengthHeader.second); + Debug::log("Content-Length header found.", Debug::NORMAL); } else { - env.setVar("CONTENT_LENGTH", "0"); + Debug::log("Content-Length header not found.", Debug::NORMAL); } } diff --git a/src/Server.cpp b/src/Server.cpp index 66135ce4..05c6e02e 100644 --- a/src/Server.cpp +++ b/src/Server.cpp @@ -213,9 +213,9 @@ bool requestIsCGI(const HTTPRequest &request) void handlePostCGIRequest(Connection &conn, Parser &parser, HTTPRequest &request, HTTPResponse &response) { std::cout << BLUE << "handlePostCGIRequest" << RESET << std::endl; - if (parser.getIsChunked() && !conn.getHasReadSocket()) + if (!parser.getIsChunked() && !conn.getHasReadSocket()) { - Debug::log("Chunked body in handlePostCGIRequest", Debug::NORMAL); + Debug::log("Not a chunked body in handlePostCGIRequest", Debug::NORMAL); if (!conn.readBody(parser, request, response)) { Debug::log("Error reading body", Debug::OCF); @@ -227,21 +227,21 @@ void handlePostCGIRequest(Connection &conn, Parser &parser, HTTPRequest &request } else if (!conn.getHasReadSocket()) { - if (!parser.getBodyComplete() && parser.getBuffer().size() == request.getContentLength()) - { - parser.setBodyComplete(true); - conn.setHasFinishedReading(true); - conn.setHasDataToSend(true); - } - - else if (!conn.readBody(parser, request, response)) - { - Debug::log("Error reading body", Debug::OCF); - conn.setCanBeClosed(false); - conn.setHasFinishedReading(true); - conn.setHasDataToSend(false); - return; - } + // if (!parser.getBodyComplete() && parser.getBuffer().size() == request.getContentLength()) + // { + // parser.setBodyComplete(true); + // conn.setHasFinishedReading(true); + // conn.setHasDataToSend(true); + // } + + // else if (!conn.readBody(parser, request, response)) + // { + // Debug::log("Error reading body", Debug::OCF); + // conn.setCanBeClosed(false); + // conn.setHasFinishedReading(true); + // conn.setHasDataToSend(false); + // return; + // } } // TODO: double check this condition, logic if (!parser.getBodyComplete() && request.getContentLength() != 0 && @@ -252,6 +252,7 @@ void handlePostCGIRequest(Connection &conn, Parser &parser, HTTPRequest &request conn.setHasFinishedReading(true); conn.setCanBeClosed(false); conn.setHasDataToSend(false); + std::cout << "Body complete in handlePostCGIRequest" << std::endl; return; } //-----------------------------// @@ -267,8 +268,11 @@ void handlePostCGIRequest(Connection &conn, Parser &parser, HTTPRequest &request if (!request.getUploadBoundary().empty()) parser.parseFileUpload(parser.getBuffer(), request, response); - request.setBody(parser.getBuffer()); conn.setHasFinishedReading(true); + // TODO: check if this is correct + request.setBody(parser.getBuffer()); + std::cout << YELLOW << "Request body: " << request.getBody() << RESET << std::endl; + Debug::log("Finished reading in handlePostCGIRequest", Debug::NORMAL); } void Server::readFromClient(Connection &conn, size_t &i, Parser &parser, HTTPRequest &request, HTTPResponse &response) @@ -409,7 +413,7 @@ void Server::buildResponse(Connection &conn, size_t &i, HTTPRequest &request, HT (void)i; Debug::log("Entering buildResponse", Debug::NORMAL); Debug::log("Request method: " + request.getMethod(), Debug::NORMAL); - + std::cout << YELLOW << "Request body in buildResponse: " << request.getBody() << RESET << std::endl; if (!response.getIsCGI()) { ServerBlock serverBlock; @@ -569,6 +573,9 @@ void Server::handleConnection(Connection &conn, size_t &i, Parser &parser, HTTPR return; } std::cout << request << std::endl; + + std::cout << YELLOW << "Request body in handleConnection: " << request.getBody() << RESET << std::endl; + if (!conn.getCanBeClosed() && !conn.getHasDataToSend()) buildResponse(conn, i, request, response); // MInd that after the last read from the pipe of the CGI getHasReadSocket will be false but we will have a read diff --git a/tests/CGI.cpp b/tests/CGI.cpp index 3209b057..a91d245a 100644 --- a/tests/CGI.cpp +++ b/tests/CGI.cpp @@ -182,12 +182,12 @@ void sendData(const std::vector &tests, sockaddr_in serverAddress) void cgi(sockaddr_in serverAdress) { - std::string postData = "name=Jasasane&salad=Caesar"; + std::string postData = "name=Jane&salad=Caesar"; std::stringstream request; request << "POST /database/salad_db.py HTTP/1.1\r\n" << "Host: www.saladbook.xyz\r\n" << "Content-Type: application/x-www-form-urlencoded\r\n" - << "Content-Length: " << postData.size() << "\r\n" + << "content-Length: " << postData.size() << "\r\n" << "\r\n" << postData << "\r\n\r\n"; diff --git a/var/www.saladbook.xyz/database/database.json b/var/www.saladbook.xyz/database/database.json index 911701eb..5d041c1c 100644 --- a/var/www.saladbook.xyz/database/database.json +++ b/var/www.saladbook.xyz/database/database.json @@ -1,5 +1,6 @@ { "Stefano": "Carrot", "Leo": "nicoise", - "Daniil": "with_beets" -} + "Daniil": "with_beets", + "Jane": "Caesar" +} \ No newline at end of file