webserv/webserv/handler/RedirectHandler.cpp
2025-11-12 11:51:09 +01:00

40 lines
1.8 KiB
C++

#include <webserv/handler/RedirectHandler.hpp> // for RedirectHandler
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/http/HttpConstants.hpp> // for HttpConstants
RedirectHandler::RedirectHandler(const HttpRequest &request, HttpResponse &response)
: AHandler(request, response)
{
}
void RedirectHandler::handle()
{
if (request_.getUri().isRedirect())
{
Log::info("Redirecting request to: " + request_.getUri().getRedirect().second + " with reason: "
+ Http::getStatusCodeReason(request_.getUri().getRedirect().first));
std::pair<int, std::string> redirect = request_.getUri().getRedirect();
response_.setStatus(redirect.first);
response_.addHeader(std::string(Http::Header::REDIRECT_LOCATION), redirect.second);
response_.addHeader(std::string(Http::Header::CONTENT_TYPE), std::string(Http::MimeType::TEXT_HTML));
response_.addHeader(std::string(Http::Header::CACHE_CONTROL), "no-cache");
std::string body = "<html><head><title>" + std::to_string(redirect.first) + " " + Http::getStatusCodeReason(redirect.first) + "</title></head>"
"<body><a href=\"" +
redirect.second + "\">Found</a></body></html>";
response_.setBody(body);
}
}
void RedirectHandler::handleTimeout()
{
Log::warning("Redirect handler timeout occurred for path: " + request_.getUri().getFullPath());
ErrorHandler::createErrorResponse(Http::StatusCode::GATEWAY_TIMEOUT, response_, request_.getUri().getConfig());
}