statuscode rule
This commit is contained in:
parent
443e5c3c3b
commit
bb55ffa75d
@ -1,3 +1,5 @@
|
||||
#include "webserv/config/validation/directive_rules/StatusCodeRule.hpp"
|
||||
|
||||
#include <webserv/config/validation/ConfigValidator.hpp>
|
||||
#include <webserv/config/validation/ValidationEngine.hpp> // for ValidationEngine
|
||||
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
|
||||
@ -31,6 +33,7 @@ ConfigValidator::ConfigValidator(const GlobalConfig *config) : engine_(std::make
|
||||
engine_->addStructuralRule(std::make_unique<SingleDefaultServerPerPortRule>());
|
||||
|
||||
/*Global Directive Rules*/
|
||||
engine_->addServerRule("error_page", std::make_unique<StatusCodeRule>(false));
|
||||
|
||||
/*Server Directive Rules*/
|
||||
engine_->addServerRule("listen", std::make_unique<PortValidationRule>());
|
||||
@ -41,6 +44,7 @@ ConfigValidator::ConfigValidator(const GlobalConfig *config) : engine_(std::make
|
||||
/*Location Directive Rules*/
|
||||
engine_->addLocationRule("allowed_methods", std::make_unique<AllowedValuesRule>(
|
||||
std::vector<std::string>{"GET", "POST", "DELETE", "PUT"}, false));
|
||||
engine_->addLocationRule("error_page", std::make_unique<StatusCodeRule>(false));
|
||||
// Folder existence validation disabled - paths are relative to server runtime directory
|
||||
// engine_->addLocationRule("root", std::make_unique<FolderExistsRule>(true));
|
||||
engine_->addLocationRule("cgi_handler", std::make_unique<CgiExtValidationRule>(false));
|
||||
|
||||
35
webserv/config/validation/directive_rules/StatusCodeRule.cpp
Normal file
35
webserv/config/validation/directive_rules/StatusCodeRule.cpp
Normal file
@ -0,0 +1,35 @@
|
||||
#include <webserv/config/validation/directive_rules/StatusCodeRule.hpp>
|
||||
|
||||
#include <webserv/config/AConfig.hpp> // for AConfig
|
||||
#include <webserv/config/directive/ADirective.hpp> // for ADirective
|
||||
#include <webserv/config/directive/DirectiveValue.hpp> // for DirectiveValue
|
||||
#include <webserv/config/validation/ValidationResult.hpp> // for ValidationResult
|
||||
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
|
||||
#include <webserv/utils/FileUtils.hpp> // for isFile
|
||||
|
||||
#include <string>
|
||||
#include <utility>
|
||||
|
||||
StatusCodeRule::StatusCodeRule(bool requiresValue)
|
||||
: AValidationRule("CgiExt", "Ensure CGI extension is valid", requiresValue)
|
||||
{
|
||||
}
|
||||
|
||||
ValidationResult StatusCodeRule::validateValue(const AConfig *config, const std::string &directiveName) const
|
||||
{
|
||||
const ADirective *directive = config->getDirective(directiveName);
|
||||
if (!directive->getValue().holds<std::pair<int, std::string>>())
|
||||
{
|
||||
return ValidationResult::error("Directive '" + directive->getName() + "' does not hold a int-string pair value");
|
||||
}
|
||||
|
||||
auto value = directive->getValue().get<std::pair<int, std::string>>();
|
||||
int statusCode = value.first;
|
||||
if (statusCode < 100 || statusCode > 599)
|
||||
{
|
||||
return ValidationResult::error("Directive '" + directive->getName() + "' has invalid status code: " +
|
||||
std::to_string(statusCode));
|
||||
}
|
||||
|
||||
return ValidationResult::success();
|
||||
}
|
||||
14
webserv/config/validation/directive_rules/StatusCodeRule.hpp
Normal file
14
webserv/config/validation/directive_rules/StatusCodeRule.hpp
Normal file
@ -0,0 +1,14 @@
|
||||
#pragma once
|
||||
|
||||
#include <webserv/config/validation/ValidationResult.hpp> // for ValidationResult
|
||||
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
|
||||
|
||||
#include <string> // for string
|
||||
|
||||
class StatusCodeRule : public AValidationRule
|
||||
{
|
||||
public:
|
||||
StatusCodeRule(bool requiresValue);
|
||||
|
||||
ValidationResult validateValue(const AConfig *config, const std::string &directiveName) const override;
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user