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/ConfigValidator.hpp>
|
||||||
#include <webserv/config/validation/ValidationEngine.hpp> // for ValidationEngine
|
#include <webserv/config/validation/ValidationEngine.hpp> // for ValidationEngine
|
||||||
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
|
#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>());
|
engine_->addStructuralRule(std::make_unique<SingleDefaultServerPerPortRule>());
|
||||||
|
|
||||||
/*Global Directive Rules*/
|
/*Global Directive Rules*/
|
||||||
|
engine_->addServerRule("error_page", std::make_unique<StatusCodeRule>(false));
|
||||||
|
|
||||||
/*Server Directive Rules*/
|
/*Server Directive Rules*/
|
||||||
engine_->addServerRule("listen", std::make_unique<PortValidationRule>());
|
engine_->addServerRule("listen", std::make_unique<PortValidationRule>());
|
||||||
@ -41,6 +44,7 @@ ConfigValidator::ConfigValidator(const GlobalConfig *config) : engine_(std::make
|
|||||||
/*Location Directive Rules*/
|
/*Location Directive Rules*/
|
||||||
engine_->addLocationRule("allowed_methods", std::make_unique<AllowedValuesRule>(
|
engine_->addLocationRule("allowed_methods", std::make_unique<AllowedValuesRule>(
|
||||||
std::vector<std::string>{"GET", "POST", "DELETE", "PUT"}, false));
|
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
|
// Folder existence validation disabled - paths are relative to server runtime directory
|
||||||
// engine_->addLocationRule("root", std::make_unique<FolderExistsRule>(true));
|
// engine_->addLocationRule("root", std::make_unique<FolderExistsRule>(true));
|
||||||
engine_->addLocationRule("cgi_handler", std::make_unique<CgiExtValidationRule>(false));
|
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