summaryrefslogtreecommitdiff
path: root/src/checker/errors/settings
diff options
context:
space:
mode:
Diffstat (limited to 'src/checker/errors/settings')
-rw-r--r--src/checker/errors/settings/port_number.cpp9
-rw-r--r--src/checker/errors/settings/port_number.hpp2
-rw-r--r--src/checker/errors/settings/server.cpp39
-rw-r--r--src/checker/errors/settings/server.hpp18
4 files changed, 62 insertions, 6 deletions
diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp
index 73469cb..485b4c7 100644
--- a/src/checker/errors/settings/port_number.cpp
+++ b/src/checker/errors/settings/port_number.cpp
@@ -10,13 +10,12 @@ namespace smtp::checker::errors::settings
static const std::string PORT_FIELD = "port";
static constexpr int MIN_PORT_NUMBER = 0;
static constexpr int MAX_PORT_NUMBER = 65535;
- static const std::string METHOD_NAME = "Check settings";
//TODO общее использование полей
auto find = line.find( PORT_FIELD );
if( find == line.end() )
{
- logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't found" );
+ logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Port doesn't found" );
return false;
}
auto host_as_string = find->second;
@@ -31,17 +30,17 @@ namespace smtp::checker::errors::settings
}
catch( std::invalid_argument const& ex )
{
- logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't entered by numbers" );
+ logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Port doesn't entered by numbers" );
return false;
}
catch( std::out_of_range const& ex )
{
- logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port out of range" );
+ logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Port out of range" );
return false;
}
catch( ... )
{
- logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Port doesn't entered by numbers" );
+ logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Port doesn't entered by numbers" );
return false;
}
return host_as_int >= MIN_PORT_NUMBER && host_as_int <= MAX_PORT_NUMBER;
diff --git a/src/checker/errors/settings/port_number.hpp b/src/checker/errors/settings/port_number.hpp
index 42ab808..789a486 100644
--- a/src/checker/errors/settings/port_number.hpp
+++ b/src/checker/errors/settings/port_number.hpp
@@ -10,7 +10,7 @@ namespace smtp::checker::errors::settings
PortNumber() = default;
~PortNumber() override = default;
- bool Check( const manage::SettingsFileDataType& line ) const override;
+ bool Check( manage::SettingsFileDataType const& line ) const override;
};
}
diff --git a/src/checker/errors/settings/server.cpp b/src/checker/errors/settings/server.cpp
new file mode 100644
index 0000000..c3f29af
--- /dev/null
+++ b/src/checker/errors/settings/server.cpp
@@ -0,0 +1,39 @@
+#include <regex>
+
+#include "server.hpp"
+#include "logger/logger_set.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ //
+ //Public methods
+ //
+ bool Server::Check( manage::SettingsFileDataType const& line ) const
+ {
+ static const std::string SERVER_FIELD = "host";
+
+ auto find = line.find( SERVER_FIELD );
+ if( find == line.end() )
+ {
+ logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Host doesn't found" );
+ return false;
+ }
+ return IsNormalName( find->second ) || IsIpName( find->second );
+ }
+
+ //
+ //Private methods
+ //
+ bool Server::IsNormalName( std::string const& line ) const
+ {
+ std::string mask = "^[a-zA-Z](?:\.?[a-zA-Z0-9 ]+)+$";
+ return std::regex_search( line, std::regex{mask} );
+ }
+
+ bool Server::IsIpName( std::string const& line) const
+ {
+ std::string mask = "(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])";
+ return std::regex_search( line, std::regex{mask} );
+ }
+
+}
diff --git a/src/checker/errors/settings/server.hpp b/src/checker/errors/settings/server.hpp
new file mode 100644
index 0000000..53e6170
--- /dev/null
+++ b/src/checker/errors/settings/server.hpp
@@ -0,0 +1,18 @@
+#pragma once
+
+#include "checker/errors/types/isettings_error.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ class Server : public types::IErrorSettings
+ {
+ public:
+ Server() = default;
+ ~Server() override = default;
+
+ bool Check( manage::SettingsFileDataType const& line ) const override;
+ private:
+ bool IsNormalName( std::string const& line ) const;
+ bool IsIpName( std::string const& line ) const;
+ };
+}