feat: add custom 400 error page and update configuration for error handling
This commit is contained in:
parent
949c788259
commit
b7f8947440
73
400.html
Normal file
73
400.html
Normal file
@ -0,0 +1,73 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>400 Bad Request</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<style>
|
||||
body {
|
||||
background: linear-gradient(135deg, #ff6a6a 0%, #ffd86a 100%);
|
||||
color: #222;
|
||||
font-family: 'Segoe UI', 'Arial', sans-serif;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
.container {
|
||||
background: rgba(255,255,255,0.85);
|
||||
border-radius: 16px;
|
||||
box-shadow: 0 8px 32px rgba(0,0,0,0.18);
|
||||
padding: 40px 32px;
|
||||
text-align: center;
|
||||
max-width: 400px;
|
||||
}
|
||||
.error-code {
|
||||
font-size: 5rem;
|
||||
font-weight: bold;
|
||||
color: #ff6a6a;
|
||||
letter-spacing: 2px;
|
||||
margin-bottom: 10px;
|
||||
text-shadow: 2px 2px 8px #ffd86a88;
|
||||
}
|
||||
.message {
|
||||
font-size: 1.3rem;
|
||||
margin-bottom: 18px;
|
||||
}
|
||||
.home-link {
|
||||
display: inline-block;
|
||||
margin-top: 12px;
|
||||
padding: 10px 22px;
|
||||
background: #ffd86a;
|
||||
color: #222;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
box-shadow: 0 2px 8px #ff6a6a44;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.home-link:hover {
|
||||
background: #ff6a6a;
|
||||
color: #fff;
|
||||
}
|
||||
@media (max-width: 500px) {
|
||||
.container {
|
||||
padding: 24px 8px;
|
||||
max-width: 95vw;
|
||||
}
|
||||
.error-code {
|
||||
font-size: 3rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="error-code">400</div>
|
||||
<div class="message">Oops! Bad Request.<br>Your browser sent a request that this server could not understand.</div>
|
||||
<a class="home-link" href="/">Go Home</a>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@ -1,4 +1,7 @@
|
||||
autoindex on
|
||||
error_page 400 ./400.html
|
||||
|
||||
|
||||
|
||||
server {
|
||||
listen 8080;
|
||||
|
||||
@ -96,3 +96,12 @@ ServerConfig *ConfigManager::getMatchingServerConfig(const std::string &host, in
|
||||
Log::warning("No matching server config found for host: " + host + " and port: " + std::to_string(port));
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
GlobalConfig *ConfigManager::getGlobalConfig() const
|
||||
{
|
||||
if (!initialized_)
|
||||
{
|
||||
throw std::runtime_error("ConfigManager is not initialized.");
|
||||
}
|
||||
return globalConfig_.get();
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
#include "webserv/config/ConfigManager.hpp"
|
||||
#include <webserv/config/AConfig.hpp>
|
||||
#include <webserv/handler/ErrorHandler.hpp>
|
||||
#include <webserv/http/HttpConstants.hpp> // for StatusCode
|
||||
@ -30,11 +31,14 @@ std::string ErrorHandler::generateErrorPage(int statusCode, AConfig *config)
|
||||
|
||||
if (config != nullptr)
|
||||
{
|
||||
config = ConfigManager::getInstance().getGlobalConfig();
|
||||
Log::info("Checking for custom error page for status code: " + std::to_string(statusCode));
|
||||
std::string customPage = config->getErrorPage(statusCode);
|
||||
if (!customPage.empty())
|
||||
{
|
||||
return getErrorPageFile(customPage);
|
||||
}
|
||||
Log::warning("No custom error page foundin config for status code: " + std::to_string(statusCode));
|
||||
}
|
||||
return generateDefaultErrorPage(statusCode);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user