From ccd5e8722981ee97234e224793ceae2e6a5669af Mon Sep 17 00:00:00 2001 From: Talyx Date: Sun, 27 Feb 2022 21:01:01 +0300 Subject: [PATCH] directory file: correct open --- src/Client/Response.cpp | 17 ++++++++++++++--- src/Client/Response.hpp | 3 +++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/Client/Response.cpp b/src/Client/Response.cpp index e760137..584f686 100644 --- a/src/Client/Response.cpp +++ b/src/Client/Response.cpp @@ -137,7 +137,7 @@ void Response::setCacheControl(void) void Response::setLocation(void) { - if (_code == 301) + if (_code == 301 && _locationSTR.empty()) { _redirect_location = _location->redirect[_code]; unsigned long pos = _redirect_location.rfind("$request_file"); @@ -256,6 +256,16 @@ std::string Response::getTime(void) return (buff); } +void Response::directoryFile() +{ + std::string req = _request.getURI(); + if (req.rfind("/") != req.size() - 1) + { + _locationSTR = req + "/"; + _code = 301; + } +} + std::string Response::getFullURI(void) { std::string tmp; @@ -279,12 +289,13 @@ std::string Response::getFullURI(void) _upload_dir = _location->uploadDir + tmp; tmp = _location->root + tmp; } - if (_request.isDir(tmp) == 0 && _request.getURI() == _location->location) + if (_request.isDir(tmp) == 0) { if (_location->directoryFile.empty() || _Autoindex) ret = tmp; else { + directoryFile(); ret = tmp + "/" + _location->directoryFile; } } @@ -411,7 +422,7 @@ bool Response::isRedirect() { if (_location == NULL) return (false); - if (!_location->redirect.empty()) + if (!_location->redirect.empty() || _code == 301) { _code = 301; return (true); diff --git a/src/Client/Response.hpp b/src/Client/Response.hpp index 032b3a1..b8ac52b 100644 --- a/src/Client/Response.hpp +++ b/src/Client/Response.hpp @@ -49,6 +49,9 @@ private: void setLocation(void); void setLanguage(void); void setTransferEncoding(void); + + void directoryFile(); + private: static std::map _errorCode;