style: format code for consistency and readability in validation rules
This commit is contained in:
parent
dbc318cdfa
commit
2891deb47d
@ -6,8 +6,9 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
RequiredLocationBlocksRule::RequiredLocationBlocksRule(size_t minimumLocations)
|
RequiredLocationBlocksRule::RequiredLocationBlocksRule(size_t minimumLocations)
|
||||||
: AStructuralValidationRule("RequiredLocationBlocksRule",
|
: AStructuralValidationRule("RequiredLocationBlocksRule", "Ensures server has at least " +
|
||||||
"Ensures server has at least " + std::to_string(minimumLocations) + " location block(s)"),
|
std::to_string(minimumLocations) +
|
||||||
|
" location block(s)"),
|
||||||
minimumLocations_(minimumLocations)
|
minimumLocations_(minimumLocations)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -16,16 +17,17 @@ ValidationResult RequiredLocationBlocksRule::validateServer(const ServerConfig *
|
|||||||
{
|
{
|
||||||
Log::trace(LOCATION);
|
Log::trace(LOCATION);
|
||||||
|
|
||||||
if (config == nullptr) {
|
if (config == nullptr)
|
||||||
|
{
|
||||||
return ValidationResult::error("Server config is null");
|
return ValidationResult::error("Server config is null");
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t locationCount = config->getLocationPaths().size();
|
size_t locationCount = config->getLocationPaths().size();
|
||||||
|
|
||||||
if (locationCount < minimumLocations_) {
|
if (locationCount < minimumLocations_)
|
||||||
return ValidationResult::error(
|
{
|
||||||
"Server block must have at least " + std::to_string(minimumLocations_) +
|
return ValidationResult::error("Server block must have at least " + std::to_string(minimumLocations_) +
|
||||||
" location block(s), but found " + std::to_string(locationCount));
|
" location block(s), but found " + std::to_string(locationCount));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ValidationResult::success();
|
return ValidationResult::success();
|
||||||
|
|||||||
@ -8,10 +8,10 @@ class ServerConfig;
|
|||||||
|
|
||||||
class RequiredLocationBlocksRule : public AStructuralValidationRule
|
class RequiredLocationBlocksRule : public AStructuralValidationRule
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
size_t minimumLocations_;
|
size_t minimumLocations_;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit RequiredLocationBlocksRule(size_t minimumLocations = 1);
|
explicit RequiredLocationBlocksRule(size_t minimumLocations = 1);
|
||||||
|
|
||||||
~RequiredLocationBlocksRule() override = default;
|
~RequiredLocationBlocksRule() override = default;
|
||||||
|
|||||||
@ -10,27 +10,27 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Structural Validation Rules for WebServ Configuration
|
* Structural Validation Rules for WebServ Configuration
|
||||||
*
|
*
|
||||||
* These rules validate the overall structure and relationships
|
* These rules validate the overall structure and relationships
|
||||||
* between configuration blocks, rather than individual directive values.
|
* between configuration blocks, rather than individual directive values.
|
||||||
*
|
*
|
||||||
* Available Rules:
|
* Available Rules:
|
||||||
*
|
*
|
||||||
* 1. MinimumServerBlocksRule - Ensures global config has minimum number of server blocks
|
* 1. MinimumServerBlocksRule - Ensures global config has minimum number of server blocks
|
||||||
* 2. RequiredLocationBlocksRule - Ensures each server has minimum number of location blocks
|
* 2. RequiredLocationBlocksRule - Ensures each server has minimum number of location blocks
|
||||||
* 3. UniqueServerNamesRule - Ensures all server names are unique across configuration
|
* 3. UniqueServerNamesRule - Ensures all server names are unique across configuration
|
||||||
*
|
*
|
||||||
* Usage:
|
* Usage:
|
||||||
*
|
*
|
||||||
* // In ValidationEngine setup
|
* // In ValidationEngine setup
|
||||||
* engine.addStructuralRule(std::make_unique<MinimumServerBlocksRule>(1));
|
* engine.addStructuralRule(std::make_unique<MinimumServerBlocksRule>(1));
|
||||||
* engine.addStructuralRule(std::make_unique<RequiredLocationBlocksRule>(1));
|
* engine.addStructuralRule(std::make_unique<RequiredLocationBlocksRule>(1));
|
||||||
* engine.addStructuralRule(std::make_unique<UniqueServerNamesRule>());
|
* engine.addStructuralRule(std::make_unique<UniqueServerNamesRule>());
|
||||||
*
|
*
|
||||||
* Each rule inherits from AStructuralValidationRule and can validate at:
|
* Each rule inherits from AStructuralValidationRule and can validate at:
|
||||||
* - Global level (validateGlobal)
|
* - Global level (validateGlobal)
|
||||||
* - Server level (validateServer)
|
* - Server level (validateServer)
|
||||||
* - Location level (validateLocation)
|
* - Location level (validateLocation)
|
||||||
*
|
*
|
||||||
* Rules have descriptive names and descriptions set in their constructors.
|
* Rules have descriptive names and descriptions set in their constructors.
|
||||||
*/
|
*/
|
||||||
@ -9,8 +9,7 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
UniqueServerNamesRule::UniqueServerNamesRule()
|
UniqueServerNamesRule::UniqueServerNamesRule()
|
||||||
: AStructuralValidationRule("UniqueServerNamesRule",
|
: AStructuralValidationRule("UniqueServerNamesRule", "Ensures all server blocks have unique server names")
|
||||||
"Ensures all server blocks have unique server names")
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -18,27 +17,31 @@ ValidationResult UniqueServerNamesRule::validateGlobal(const GlobalConfig *confi
|
|||||||
{
|
{
|
||||||
Log::trace(LOCATION);
|
Log::trace(LOCATION);
|
||||||
|
|
||||||
if (config == nullptr) {
|
if (config == nullptr)
|
||||||
|
{
|
||||||
return ValidationResult::error("Global config is null");
|
return ValidationResult::error("Global config is null");
|
||||||
}
|
}
|
||||||
|
|
||||||
std::set<std::string> serverNames;
|
std::set<std::string> serverNames;
|
||||||
auto servers = config->getServerConfigs();
|
auto servers = config->getServerConfigs();
|
||||||
|
|
||||||
for (const auto *server : servers) {
|
for (const auto *server : servers)
|
||||||
if (server == nullptr) {
|
{
|
||||||
|
if (server == nullptr)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto serverNameOpt = server->get<std::string>("server_name");
|
auto serverNameOpt = server->get<std::string>("server_name");
|
||||||
auto listenOpt = server->get<int>("listen");
|
auto listenOpt = server->get<int>("listen");
|
||||||
if (serverNameOpt.has_value() && listenOpt.has_value()) {
|
if (serverNameOpt.has_value() && listenOpt.has_value())
|
||||||
|
{
|
||||||
const std::string &serverName = serverNameOpt.value();
|
const std::string &serverName = serverNameOpt.value();
|
||||||
int listenPort = listenOpt.value();
|
int listenPort = listenOpt.value();
|
||||||
|
|
||||||
if (serverNames.contains(serverName + ":" + std::to_string(listenPort))) {
|
if (serverNames.contains(serverName + ":" + std::to_string(listenPort)))
|
||||||
return ValidationResult::error(
|
{
|
||||||
"Duplicate server name '" + serverName + "' found in configuration");
|
return ValidationResult::error("Duplicate server name '" + serverName + "' found in configuration");
|
||||||
}
|
}
|
||||||
|
|
||||||
serverNames.insert(serverName + ":" + std::to_string(listenPort));
|
serverNames.insert(serverName + ":" + std::to_string(listenPort));
|
||||||
|
|||||||
@ -6,7 +6,7 @@ class GlobalConfig;
|
|||||||
|
|
||||||
class UniqueServerNamesRule : public AStructuralValidationRule
|
class UniqueServerNamesRule : public AStructuralValidationRule
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UniqueServerNamesRule();
|
UniqueServerNamesRule();
|
||||||
|
|
||||||
~UniqueServerNamesRule() override = default;
|
~UniqueServerNamesRule() override = default;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user