#include // for RedirectHandler #include // for HttpRequest #include // for HttpResponse #include // for Log, LOCATION #include // for URI #include // for ErrorHandler #include // 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 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 = "" + std::to_string(redirect.first) + " " + Http::getStatusCodeReason(redirect.first) + "" "Found"; 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()); }