From 0103dc97dd9f4bfc1aa719bc7fbfe3a9818d1187 Mon Sep 17 00:00:00 2001 From: Talyx Date: Wed, 9 Feb 2022 18:48:12 +0300 Subject: [PATCH] add: PUT method --- config/real.toml | 4 ++-- src/Client/Response.cpp | 29 ++++++++++++++++++++++++----- src/Client/Response.hpp | 1 + 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/config/real.toml b/config/real.toml index f7efac2..de27c4f 100644 --- a/config/real.toml +++ b/config/real.toml @@ -28,7 +28,7 @@ [[server.location]] location = "*.jpeg" root = "www/images/jpegImg" - methods = ["GET"] + methods = ["GET", "PUT"] [[server.location]] location = "*.png" root = "www/images/pngImg" @@ -45,7 +45,7 @@ [[server.location]] location = "*.php" root = "www/script" - methods = ["GET", "POST"] + methods = ["GET"] autoindex = false cgi_pass = "/usr/bin/php-cgi" [[server]] diff --git a/src/Client/Response.cpp b/src/Client/Response.cpp index 6f03a90..40426fe 100644 --- a/src/Client/Response.cpp +++ b/src/Client/Response.cpp @@ -203,9 +203,6 @@ std::string Response::getFullURI(void) tmp = _request.getURI().substr(len); tmp = _location->root + tmp; } - DBOUT << RED << _location->location << ENDL; - DBOUT << len << ENDL; - DBOUT << RED << tmp << ENDL; if (_request.isDir(tmp) == 0) { if (_location->directoryFile.empty() || _Autoindex) @@ -323,9 +320,10 @@ void Response::generate2(serverListen &l) methodGet(); else if (_method == "POST") methodPost(); - else + else if (_method == "DELETE") methodDelete(); - + else if (_method == "PUT") + methodPut(); } bool Response::isRedirect() @@ -365,11 +363,31 @@ void Response::methodPost(void) std::ofstream outfile(_fullURI.c_str(), std::ios::out | std::ios::binary); outfile.write(_request.getBody().data(), _request.getBody().size()); + outfile.close(); _code = 204; setHeaderBlocks(); generateHeader(); DBOUT << GREEN << "POST method called" << ENDL; } + +void Response::methodPut(void) +{ + _code = 201; + if (_request.isFile(_fullURI) == 0) + _code = 204; + std::ofstream file(_fullURI.c_str(), std::ios::out | std::ios::binary); + if (!file.is_open()) + _code = 403; + else + { + file.write(_request.getBody().data(), _request.getBody().size()); + } + file.close(); + setHeaderBlocks(); + generateHeader(); + DBOUT << GREEN << "PUT method called" << ENDL; +} + void Response::methodDelete(void) { if (_request.isFile(_fullURI) == 0) @@ -388,6 +406,7 @@ void Response::methodDelete(void) DBOUT << GREEN << "Delete method called" << ENDL; } + //-------------------------------------------------GET/SET--------------------------------------- std::map Response::_errorCode; diff --git a/src/Client/Response.hpp b/src/Client/Response.hpp index e17e776..b3aee05 100644 --- a/src/Client/Response.hpp +++ b/src/Client/Response.hpp @@ -49,6 +49,7 @@ private: private: void methodGet(void); void methodPost(void); + void methodPut(void); void methodDelete(void); void invalidClient(void); void generateHeader(void);