summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorclaiff <claiff@mail.ru>2022-09-21 16:05:06 +0300
committerclaiff <claiff@mail.ru>2022-09-21 16:05:06 +0300
commitee8c175e9eae4faccdf913578fb30d09c200204f (patch)
treec2244021130919d5360d130fd3b38954a096687b
parenta282ae6418c85db1aae5a2823dd37d56e56e5249 (diff)
parent641c95dcf8c6585caaa6e79d4bec9b53fd666369 (diff)
downloadobmc-sila-smtp-ee8c175e9eae4faccdf913578fb30d09c200204f.tar.xz
Merge branch 'master' into feature/logger
# Conflicts: # CMakeLists.txt # src/file/mail.cpp # src/file/settings.cpp # src/management/logger.cpp # src/management/logger.hpp # src/message/sender.cpp # src/message/sender.hpp
-rw-r--r--CMakeLists.txt107
-rw-r--r--src/checker/errors/mail/empty.cpp9
-rw-r--r--src/checker/errors/mail/empty.hpp17
-rw-r--r--src/checker/errors/settings/port_number.cpp48
-rw-r--r--src/checker/errors/settings/port_number.hpp17
-rw-r--r--src/checker/errors/types/imails_error.hpp19
-rw-r--r--src/checker/errors/types/isettings_error.hpp22
-rw-r--r--src/checker/registrator_mails.cpp22
-rw-r--r--src/checker/registrator_mails.hpp19
-rw-r--r--src/checker/registrator_settings.hpp35
-rw-r--r--src/converter/file.hpp2
-rw-r--r--src/converter/full.hpp4
-rw-r--r--src/converter/settings.hpp2
-rw-r--r--src/converter/string.hpp2
-rw-r--r--src/file/mail.cpp91
-rw-r--r--src/file/mail.hpp8
-rw-r--r--src/file/settings.cpp97
-rw-r--r--src/file/settings.hpp39
-rw-r--r--src/main.cpp4
-rw-r--r--src/management/builder/mail.cpp23
-rw-r--r--src/management/builder/mail.hpp (renamed from src/managment/builder/mail.hpp)4
-rw-r--r--src/management/builder/settings.cpp29
-rw-r--r--src/management/builder/settings.hpp (renamed from src/managment/builder/settings.hpp)4
-rw-r--r--src/management/general.hpp (renamed from src/managment/general.hpp)0
-rw-r--r--src/management/mail.cpp71
-rw-r--r--src/management/mail.hpp30
-rw-r--r--src/management/settings.cpp (renamed from src/managment/settings.cpp)0
-rw-r--r--src/management/settings.hpp (renamed from src/managment/settings.hpp)3
-rw-r--r--src/managment/builder/mail.cpp14
-rw-r--r--src/managment/builder/settings.cpp18
-rw-r--r--src/managment/mail.cpp72
-rw-r--r--src/managment/mail.hpp28
-rw-r--r--src/message/builder/cc.hpp2
-rw-r--r--src/message/builder/mail_to.hpp2
-rw-r--r--src/message/sender.hpp51
-rw-r--r--src/service/smtp.hpp4
36 files changed, 587 insertions, 332 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 56bc523..9fe6741 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -27,53 +27,51 @@ option (
)
if(NOT ${YOCTO_DEPENDENCIES})
- include(ExternalProject)
-
- ExternalProject_Add(
- Boost
- URL "https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2"
- URL_MD5 "33334dd7f862e8ac9fe1cc7c6584fb6d"
- SOURCE_DIR ${CMAKE_BINARY_DIR}/src/boost
- BINARY_DIR ${CMAKE_BINARY_DIR}/libs/boost
- CONFIGURE_COMMAND cd <SOURCE_DIR> && ./bootstrap.sh
- BUILD_COMMAND cd <SOURCE_DIR> && ./b2 --exec-prefix=<BINARY_DIR>
- --prefix=<BINARY_DIR> --with-system --with-coroutine install
- INSTALL_COMMAND ""
- UPDATE_COMMAND "")
-
- set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/libs/boost/ ${CMAKE_PREFIX_PATH})
- include_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/include)
- link_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/lib)
-
- ExternalProject_Add(
- sdbusplus-project
- PREFIX ${CMAKE_BINARY_DIR}/sdbusplus-project
- GIT_REPOSITORY https://github.com/openbmc/sdbusplus.git
- GIT_TAG afe80cf2e5dc4aefe3b041adeb0230e61929bf12
- SOURCE_DIR ${CMAKE_BINARY_DIR}/sdbusplus-src
- BINARY_DIR ${CMAKE_BINARY_DIR}/sdbusplus-build
- CONFIGURE_COMMAND ""
- BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src && ./bootstrap.sh &&
- ./configure --enable-transaction && make -j libsdbusplus.la
- INSTALL_COMMAND ""
- LOG_DOWNLOAD ON
- UPDATE_COMMAND "")
-
- include_directories(${CMAKE_BINARY_DIR}/sdbusplus-src)
- link_directories(${CMAKE_BINARY_DIR}/sdbusplus-src/.libs)
-
- # Boost related definitions
- add_definitions(-DBOOST_COROUTINES_NO_DEPRECATION_WARNING)
- add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
- add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
- add_definitions(-DBOOST_ALL_NO_LIB)
- add_definitions(-DBOOST_NO_RTTI)
- add_definitions(-DBOOST_NO_TYPEID)
- add_definitions(-DBOOST_ASIO_DISABLE_THREADS)
+ include(ExternalProject)
+
+ ExternalProject_Add(
+ Boost
+ URL "https://boostorg.jfrog.io/artifactory/main/release/1.76.0/source/boost_1_76_0.tar.bz2"
+ URL_MD5 "33334dd7f862e8ac9fe1cc7c6584fb6d"
+ SOURCE_DIR ${CMAKE_BINARY_DIR}/src/boost
+ BINARY_DIR ${CMAKE_BINARY_DIR}/libs/boost
+ CONFIGURE_COMMAND cd <SOURCE_DIR> && ./bootstrap.sh
+ BUILD_COMMAND cd <SOURCE_DIR> && ./b2 --exec-prefix=<BINARY_DIR>
+ --prefix=<BINARY_DIR> --with-system --with-coroutine install
+ INSTALL_COMMAND ""
+ UPDATE_COMMAND ""
+ )
+
+ set(CMAKE_PREFIX_PATH ${CMAKE_BINARY_DIR}/libs/boost/ ${CMAKE_PREFIX_PATH})
+ include_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/include)
+ link_directories(SYSTEM ${CMAKE_BINARY_DIR}/libs/boost/lib)
+
+ ExternalProject_Add(
+ sdbusplus-project
+ PREFIX ${CMAKE_BINARY_DIR}/sdbusplus-project
+ GIT_REPOSITORY https://github.com/openbmc/sdbusplus.git
+ GIT_TAG afe80cf2e5dc4aefe3b041adeb0230e61929bf12
+ SOURCE_DIR ${CMAKE_BINARY_DIR}/sdbusplus-src
+ BINARY_DIR ${CMAKE_BINARY_DIR}/sdbusplus-build
+ CONFIGURE_COMMAND ""
+ BUILD_COMMAND cd ${CMAKE_BINARY_DIR}/sdbusplus-src && ./bootstrap.sh &&
+ ./configure --enable-transaction && make -j libsdbusplus.la
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD ON
+ UPDATE_COMMAND ""
+ )
+
+ include_directories(${CMAKE_BINARY_DIR}/sdbusplus-src)
+ link_directories(${CMAKE_BINARY_DIR}/sdbusplus-src/.libs)
+
+ add_definitions(-DBOOST_COROUTINES_NO_DEPRECATION_WARNING)
+ add_definitions(-DBOOST_ERROR_CODE_HEADER_ONLY)
+ add_definitions(-DBOOST_SYSTEM_NO_DEPRECATED)
+ add_definitions(-DBOOST_ALL_NO_LIB)
+ add_definitions(-DBOOST_NO_RTTI)
+ add_definitions(-DBOOST_NO_TYPEID)
+ add_definitions(-DBOOST_ASIO_DISABLE_THREADS)
else()
- # Include Boost library. This allows specify exact version of BOOST to be
- # used, especially important while using valgrind, to point BOOST that is
- # compiled with valgrind support
if(${BOOST_VERSION})
find_package(Boost ${BOOST_VERSION} EXACT)
else()
@@ -93,12 +91,13 @@ include_directories(src)
set(SRC_DIR src)
set(MESSAGE_DIR src/message)
set(SERVICE_DIR src/service)
-set(MANAGEMENT_DIR src/managment)
+set(MANAGEMENT_DIR src/management)
set(FILE_DIR src/file)
set(PARSER_DIR src/file/parser)
-set(MANAGER_BUILDER_DIR src/managment/builder)
+set(MANAGER_BUILDER_DIR src/management/builder)
set(CONVERTER_DIR src/converter)
set(LOGGER_DIR src/logger)
+set(CHECKER_DIR src/checker)
set(SRC_FILES
${SRC_DIR}/main.cpp
@@ -157,6 +156,18 @@ set(SRC_FILES
${LOGGER_DIR}/journal.hpp
${LOGGER_DIR}/logger_set.cpp
${LOGGER_DIR}/logger_set.hpp
+
+ ${CHECKER_DIR}/registrator_mails.hpp
+ ${CHECKER_DIR}/registrator_mails.cpp
+ ${CHECKER_DIR}/registrator_settings.hpp
+
+ ${CHECKER_DIR}/errors/settings/port_number.cpp
+ ${CHECKER_DIR}/errors/settings/port_number.hpp
+ ${CHECKER_DIR}/errors/mail/empty.hpp
+ ${CHECKER_DIR}/errors/mail/empty.cpp
+
+ ${CHECKER_DIR}/errors/types/imails_error.hpp
+ ${CHECKER_DIR}/errors/types/isettings_error.hpp
)
if( ${ADD_PHOSPHOR_LOGGING} )
diff --git a/src/checker/errors/mail/empty.cpp b/src/checker/errors/mail/empty.cpp
new file mode 100644
index 0000000..06f6f4c
--- /dev/null
+++ b/src/checker/errors/mail/empty.cpp
@@ -0,0 +1,9 @@
+#include "empty.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ bool Empty::Check( std::string const& line ) const
+ {
+ return !line.empty();
+ }
+}
diff --git a/src/checker/errors/mail/empty.hpp b/src/checker/errors/mail/empty.hpp
new file mode 100644
index 0000000..9e8c0da
--- /dev/null
+++ b/src/checker/errors/mail/empty.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "checker/errors/types/imails_error.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ class Empty : public types::IError
+ {
+ public:
+ Empty() = default;
+ ~Empty() override = default;
+
+ bool Check( std::string const& line ) const override;
+ };
+}
+
+
diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp
new file mode 100644
index 0000000..b02eec4
--- /dev/null
+++ b/src/checker/errors/settings/port_number.cpp
@@ -0,0 +1,48 @@
+#include <stdexcept>
+
+#include "port_number.hpp"
+#include "management/logger.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ bool PortNumber::Check( const manage::SettingsFileDataType& line ) const
+ {
+ static const std::string PORT_FIELD = "port";
+ static constexpr int MIN_PORT_NUMBER = 0;
+ static constexpr int MAX_PORT_NUMBER = 65535;
+
+ //TODO общее использование полей
+ auto find = line.find( PORT_FIELD );
+ if( find == line.end() )
+ {
+ manage::Logger::LogError( "Port doesn't found" );
+ return false;
+ }
+ auto host_as_string = find->second;
+ if( host_as_string.empty())
+ {
+ return true;
+ }
+ int host_as_int{};
+ try
+ {
+ host_as_int = std::stoi( host_as_string );
+ }
+ catch( std::invalid_argument const& ex )
+ {
+ manage::Logger::LogError( "Port doesn't entered by numbers" );
+ return false;
+ }
+ catch( std::out_of_range const& ex )
+ {
+ manage::Logger::LogError( "Port out of range" );
+ return false;
+ }
+ catch( ... )
+ {
+ manage::Logger::LogError( "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
new file mode 100644
index 0000000..42ab808
--- /dev/null
+++ b/src/checker/errors/settings/port_number.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#include "checker/errors/types/isettings_error.hpp"
+
+namespace smtp::checker::errors::settings
+{
+ class PortNumber : public types::IErrorSettings
+ {
+ public:
+ PortNumber() = default;
+ ~PortNumber() override = default;
+
+ bool Check( const manage::SettingsFileDataType& line ) const override;
+ };
+}
+
+
diff --git a/src/checker/errors/types/imails_error.hpp b/src/checker/errors/types/imails_error.hpp
new file mode 100644
index 0000000..d696bbd
--- /dev/null
+++ b/src/checker/errors/types/imails_error.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <memory>
+#include <string>
+
+namespace smtp::checker::errors::types
+{
+ class IError
+ {
+ public:
+ IError() = default;
+ virtual ~IError() = default;
+
+ virtual bool Check( std::string const& line ) const = 0;
+ };
+ using IErrorPtr = std::shared_ptr<IError>;
+}
+
+
diff --git a/src/checker/errors/types/isettings_error.hpp b/src/checker/errors/types/isettings_error.hpp
new file mode 100644
index 0000000..05f68e3
--- /dev/null
+++ b/src/checker/errors/types/isettings_error.hpp
@@ -0,0 +1,22 @@
+//
+// Created by claiff on 18.09.22.
+//
+
+#pragma once
+
+#include <memory>
+
+#include "management/general.hpp"
+
+namespace smtp::checker::errors::types
+{
+ class IErrorSettings
+ {
+ public:
+ IErrorSettings() = default;
+ virtual ~IErrorSettings() = default;
+
+ virtual bool Check( manage::SettingsFileDataType const& line ) const = 0;
+ };
+ using IErrorSettingsPtr = std::shared_ptr<IErrorSettings>;
+} \ No newline at end of file
diff --git a/src/checker/registrator_mails.cpp b/src/checker/registrator_mails.cpp
new file mode 100644
index 0000000..7e844c0
--- /dev/null
+++ b/src/checker/registrator_mails.cpp
@@ -0,0 +1,22 @@
+#include "registrator_mails.hpp"
+
+namespace smtp::checker
+{
+ void RegistratorMails::Add(errors::types::IErrorPtr const& error )
+ {
+ mErrors.push_back( error );
+ }
+
+ bool RegistratorMails::Check( std::string const& line ) const
+ {
+ for( const auto& error : mErrors )
+ {
+ if( !error->Check( line ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+} // namespace smtp::checker
diff --git a/src/checker/registrator_mails.hpp b/src/checker/registrator_mails.hpp
new file mode 100644
index 0000000..86eb41a
--- /dev/null
+++ b/src/checker/registrator_mails.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "errors/types/imails_error.hpp"
+#include <list>
+
+namespace smtp::checker
+{
+ class RegistratorMails
+ {
+ public:
+ RegistratorMails() = default;
+ ~RegistratorMails() = default;
+
+ void Add( errors::types::IErrorPtr const &error );
+ bool Check( std::string const& line ) const;
+ private:
+ std::list<errors::types::IErrorPtr> mErrors;
+ };
+} // namespace smtp::checker
diff --git a/src/checker/registrator_settings.hpp b/src/checker/registrator_settings.hpp
new file mode 100644
index 0000000..fbd12f5
--- /dev/null
+++ b/src/checker/registrator_settings.hpp
@@ -0,0 +1,35 @@
+#pragma once
+
+#include "errors/types/isettings_error.hpp"
+#include <list>
+
+namespace smtp::checker
+{
+ class RegistratorSettings
+ {
+ public:
+ RegistratorSettings() = default;
+ ~RegistratorSettings() = default;
+
+ void Add( errors::types::IErrorSettingsPtr const& error )
+ {
+ mErrors.push_back( error );
+ }
+
+ template<typename T>
+ bool Check( T const& line ) const
+ {
+ for( const auto& error: mErrors )
+ {
+ if( !error->Check( line ))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private:
+ std::list < errors::types::IErrorSettingsPtr > mErrors;
+ };
+}
diff --git a/src/converter/file.hpp b/src/converter/file.hpp
index 64ef152..daa35fd 100644
--- a/src/converter/file.hpp
+++ b/src/converter/file.hpp
@@ -3,7 +3,7 @@
#include <unordered_map>
#include <string>
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::converter
{
diff --git a/src/converter/full.hpp b/src/converter/full.hpp
index 7025324..dac7499 100644
--- a/src/converter/full.hpp
+++ b/src/converter/full.hpp
@@ -3,7 +3,7 @@
#include <unordered_map>
#include <string>
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::converter
{
@@ -13,7 +13,7 @@ namespace smtp::converter
Full() = default;
~Full() = default;
- manage::SettingsFields Convert( std::unordered_map<std::string, std::string> const& from ) const;
+ manage::SettingsFields Convert( manage::SettingsFileDataType const& from ) const;
std::unordered_map<std::string, std::string> Convert( manage::SettingsFields const& from ) const;
private:
diff --git a/src/converter/settings.hpp b/src/converter/settings.hpp
index d25a550..5278b16 100644
--- a/src/converter/settings.hpp
+++ b/src/converter/settings.hpp
@@ -3,7 +3,7 @@
#include <unordered_map>
#include <string>
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::converter
{
diff --git a/src/converter/string.hpp b/src/converter/string.hpp
index f1752ad..555e04b 100644
--- a/src/converter/string.hpp
+++ b/src/converter/string.hpp
@@ -3,7 +3,7 @@
#include <unordered_map>
#include <string>
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::converter
{
diff --git a/src/file/mail.cpp b/src/file/mail.cpp
index 1453535..cf5fe26 100644
--- a/src/file/mail.cpp
+++ b/src/file/mail.cpp
@@ -5,59 +5,50 @@
namespace smtp::file
{
- Mail::Mail( std::string const& path_file )
- : mPathFile( path_file )
- {
- }
+ Mail::Mail( std::string const& path_file, checker::RegistratorMails const& registrator_errors )
+ : mPathFile( path_file )
+ , mRegistratorErrors( registrator_errors )
+ {
+ }
- manage::MailsSet Mail::Read() const
- {
- std::ifstream mail_file{mPathFile, std::fstream::in};
- if( !mail_file.is_open())
- {
- logger::LoggerSet::GetInstance()->LogError( "Unable to open file to read " + mPathFile );
- return {};
- }
- std::string line{};
- manage::MailsSet result;
+ manage::MailsSet Mail::Read() const
+ {
+ std::ifstream mail_file{ mPathFile, std::fstream::in };
+ if ( !mail_file.is_open() )
+ {
+ manage::Logger::LogError( "Unable to open file to read " + mPathFile );
+ return {};
+ }
+ std::string line{};
+ manage::MailsSet result;
- while( std::getline( mail_file, line ))
- {
- auto parsed_data = GetMailFromLine( line );
- if( parsed_data )
+ while ( std::getline( mail_file, line ) )
+ {
+ if( mRegistratorErrors.Check( line ) )
{
- result.push_back( *parsed_data );
+ result.push_back( line );
}
- }
- mail_file.close();
- return result;
- }
-
- bool Mail::Write( manage::MailsSet const& data ) const
- {
- std::ofstream mail_file{mPathFile, std::fstream::out | std::fstream::trunc};
- if( !mail_file.is_open())
- {
- logger::LoggerSet::GetInstance()->LogError( "Unable to open file to write " + mPathFile );
- return false;
- }
- for( const auto& pair: data )
- {
- mail_file << pair << "\n";
- }
- mail_file.close();
- return true;
- }
-
- std::optional < std::string > Mail::GetMailFromLine( std::string const& line ) const
- {
- //TODO registrator if checking parsing
- auto pos = line.find( '@' );
- if( pos == std::string::npos )
- {
- return {};
- }
- return line;
- }
+ }
+ mail_file.close();
+ return result;
+ }
+ bool Mail::Write( manage::MailsSet const& data ) const
+ {
+ std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc };
+ if ( !mail_file.is_open() )
+ {
+ manage::Logger::LogError( "Unable to open file to write " + mPathFile );
+ return false;
+ }
+ for( const auto& mail : data )
+ {
+ if( mRegistratorErrors.Check( mail ) )
+ {
+ mail_file << mail << "\n";
+ }
+ }
+ mail_file.close();
+ return true;
+ }
}
diff --git a/src/file/mail.hpp b/src/file/mail.hpp
index 34050bf..148aa11 100644
--- a/src/file/mail.hpp
+++ b/src/file/mail.hpp
@@ -3,22 +3,22 @@
#include <string>
#include <optional>
-#include "managment/general.hpp"
+#include "management/general.hpp"
+#include "checker/registrator_mails.hpp"
namespace smtp::file
{
class Mail
{
public:
- explicit Mail( std::string const& path_file );
+ explicit Mail( std::string const& path_file, checker::RegistratorMails const& registrator_errors );
~Mail() = default;
manage::MailsSet Read() const;
bool Write( manage::MailsSet const& data ) const;
private:
- std::optional<std::string> GetMailFromLine( std::string const& line ) const;
-
std::string mPathFile;
+ checker::RegistratorMails mRegistratorErrors;
};
}
diff --git a/src/file/settings.cpp b/src/file/settings.cpp
index 445cb5e..83f8322 100644
--- a/src/file/settings.cpp
+++ b/src/file/settings.cpp
@@ -5,60 +5,77 @@
namespace smtp::file
{
- Settings::Settings( std::string const& path_file )
- : mPathFile( path_file )
- {
+ //
+ //Constructors
+ //
+ Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors )
+ : mPathFile( path_file )
+ , mRegistratorErrors( registrator_errors )
+ {
- }
+ }
- manage::SettingsFields Settings::Read() const
- {
- auto parsed_store = GetParsedStore();
- return converter::Full{}.Convert( parsed_store );
- }
+ //
+ //Public methods
+ //
+ manage::SettingsFields Settings::Read() const
+ {
+ auto parsed_store = GetParsedStore();
+ return converter::Full{}.Convert( parsed_store );
+ }
- bool Settings::Write( manage::SettingsFields const& settings_fields ) const
- {
- auto parsed_data = converter::Full{}.Convert( settings_fields );
- return SetParsedData( parsed_data );
- }
+ bool Settings::Write( manage::SettingsFields const& settings_fields ) const
+ {
+ auto parsed_data = converter::Full{}.Convert( settings_fields );
+ return mRegistratorErrors.Check( parsed_data ) && SetParsedData( parsed_data );
+ }
+
+ //
+ //Private methods
+ //
+ manage::SettingsFileDataType Settings::GetParsedStore() const
+ {
+ std::ifstream settings_file{ mPathFile, std::fstream::in };
+ if ( !settings_file.is_open() )
+ {
+ manage::Logger::LogError( "Unable to open file to read " + mPathFile );
+ return {};
+ }
+ auto result = GetDataFromFile( settings_file );
- ParsedStoreType Settings::GetParsedStore() const
+ settings_file.close();
+ return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{};
+ }
+
+ manage::SettingsFileDataType Settings::GetDataFromFile( std::ifstream& settings_file ) const
{
- std::ifstream settings_file{mPathFile, std::fstream::in};
- if( !settings_file.is_open())
- {
- logger::LoggerSet::GetInstance()->LogError( "Unable to open file to read " + mPathFile );
- return {};
- }
std::string line{};
- ParsedStoreType result;
+ manage::SettingsFileDataType result;
- while( std::getline( settings_file, line ))
+ while ( std::getline( settings_file, line ) )
{
auto parsed_data = parser::Settings{}.Parse( line );
result.insert( parsed_data );
}
- settings_file.close();
return result;
}
- bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const
- {
- std::ofstream settings_file{mPathFile, std::fstream::out | std::fstream::trunc};
- if( !settings_file.is_open())
- {
- logger::LoggerSet::GetInstance()->LogError( "Unable to open file to write " + mPathFile );
- return false;
- }
- for( const auto& data: parsed_data )
- {
- auto line = BuildParam( data );
- settings_file << line << "\n";
- }
- settings_file.close();
- return true;
- }
+ bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const
+ {
+ std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc };
+ if ( !settings_file.is_open() )
+ {
+ manage::Logger::LogError( "Unable to open file to write " + mPathFile );
+ return false;
+ }
+ for( const auto& data : parsed_data )
+ {
+ auto line = BuildParam( data );
+ settings_file << line << "\n";
+ }
+ settings_file.close();
+ return true;
+ }
std::string Settings::BuildParam( std::pair < std::string, std::string > const& data ) const
{
diff --git a/src/file/settings.hpp b/src/file/settings.hpp
index fb77b1e..0882ac3 100644
--- a/src/file/settings.hpp
+++ b/src/file/settings.hpp
@@ -5,26 +5,29 @@
#include "converter/full.hpp"
#include "parser/settings.hpp"
-#include "managment/general.hpp"
+#include "management/general.hpp"
+#include "checker/registrator_settings.hpp"
namespace smtp::file
{
- using ParsedStoreType = std::unordered_map<std::string, std::string>;
-
- class Settings
- {
- public:
- explicit Settings( std::string const& path_file );
- ~Settings() = default;
-
- manage::SettingsFields Read() const;
- bool Write( manage::SettingsFields const& settings_fields ) const;
- private:
- ParsedStoreType GetParsedStore() const;
- bool SetParsedData( ParsedStoreType const& parsed_data ) const;
- std::string BuildParam( std::pair<std::string, std::string> const& data ) const;
-
- std::string mPathFile;
- };
+
+
+ class Settings
+ {
+ public:
+ explicit Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors );
+ ~Settings() = default;
+
+ manage::SettingsFields Read() const;
+ bool Write( manage::SettingsFields const& settings_fields ) const;
+ private:
+ manage::SettingsFileDataType GetParsedStore() const;
+ bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const;
+ std::string BuildParam( std::pair < std::string, std::string > const& data ) const;
+
+ std::string mPathFile;
+ checker::RegistratorSettings mRegistratorErrors;
+ manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const;
+ };
}
diff --git a/src/main.cpp b/src/main.cpp
index b58bb69..cc92f3f 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,8 +1,8 @@
#include <sdbusplus/asio/connection.hpp>
#include "service/smtp.hpp"
-#include "managment/builder/mail.hpp"
-#include "managment/builder/settings.hpp"
+#include "management/builder/mail.hpp"
+#include "management/builder/settings.hpp"
int main()
{
diff --git a/src/management/builder/mail.cpp b/src/management/builder/mail.cpp
new file mode 100644
index 0000000..f72803f
--- /dev/null
+++ b/src/management/builder/mail.cpp
@@ -0,0 +1,23 @@
+#include "mail.hpp"
+#include "file/mail.hpp"
+
+namespace smtp::manage::builder
+{
+ smtp::manage::Mail Mail::Build() const
+ {
+ static const std::string PATH = {"/var/lib/smtp/mails.txt"};
+
+ auto registrator = BuildErrorRegistrator();
+ file::Mail file_manipulator{PATH, registrator};
+ return smtp::manage::Mail{file_manipulator};
+ }
+
+ checker::RegistratorMails Mail::BuildErrorRegistrator() const
+ {
+ checker::RegistratorMails result;
+
+
+ return result;
+ }
+
+}
diff --git a/src/managment/builder/mail.hpp b/src/management/builder/mail.hpp
index ae53202..e735fd6 100644
--- a/src/managment/builder/mail.hpp
+++ b/src/management/builder/mail.hpp
@@ -1,6 +1,7 @@
#pragma once
-#include "managment/mail.hpp"
+#include "management/mail.hpp"
+#include "checker/registrator_mails.hpp"
namespace smtp::manage::builder
{
@@ -11,6 +12,7 @@ namespace smtp::manage::builder
~Mail() = default;
smtp::manage::Mail Build() const;
+ checker::RegistratorMails BuildErrorRegistrator() const;
};
}
diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp
new file mode 100644
index 0000000..baa45da
--- /dev/null
+++ b/src/management/builder/settings.cpp
@@ -0,0 +1,29 @@
+#include "settings.hpp"
+#include "checker/errors/settings/port_number.hpp"
+
+namespace smtp::manage::builder
+{
+
+ smtp::manage::Settings Settings::Build() const
+ {
+ auto file_manipulator = GetFileSettings();
+ return smtp::manage::Settings{file_manipulator};
+ }
+
+ file::Settings Settings::GetFileSettings() const
+ {
+ static const std::string PATH = "/var/lib/smtp/settings.txt";
+
+ auto registrator = BuildErrorRegistrator();
+ return file::Settings{PATH, registrator};
+ }
+
+ checker::RegistratorSettings Settings::BuildErrorRegistrator() const
+ {
+ checker::RegistratorSettings result;
+
+ result.Add( std::make_shared < checker::errors::settings::PortNumber >());
+ return result;
+ }
+
+}
diff --git a/src/managment/builder/settings.hpp b/src/management/builder/settings.hpp
index 1089b06..64f9384 100644
--- a/src/managment/builder/settings.hpp
+++ b/src/management/builder/settings.hpp
@@ -1,7 +1,8 @@
#pragma once
-#include "managment/settings.hpp"
+#include "management/settings.hpp"
#include "file/settings.hpp"
+#include "checker/registrator_settings.hpp"
namespace smtp::manage::builder
{
@@ -14,6 +15,7 @@ namespace smtp::manage::builder
smtp::manage::Settings Build() const;
private:
file::Settings GetFileSettings() const;
+ checker::RegistratorSettings BuildErrorRegistrator() const;
};
}
diff --git a/src/managment/general.hpp b/src/management/general.hpp
index ed1a789..ed1a789 100644
--- a/src/managment/general.hpp
+++ b/src/management/general.hpp
diff --git a/src/management/mail.cpp b/src/management/mail.cpp
new file mode 100644
index 0000000..5c3c276
--- /dev/null
+++ b/src/management/mail.cpp
@@ -0,0 +1,71 @@
+#include <algorithm>
+
+#include "mail.hpp"
+
+namespace smtp::manage
+{
+ Mail::Mail( file::Mail const& file_reader )
+ : mFileReader( file_reader )
+ {
+ mMails = mFileReader.Read();
+ }
+
+ MailsSet Mail::GetMailToSend() const
+ {
+ return mMails;
+ }
+
+ bool Mail::AddMailsToSend( MailsSet const& mails_to_add )
+ {
+ auto merged_mails = GetMergedMails( mails_to_add );
+
+ auto result = mFileReader.Write( merged_mails );
+ if( result )
+ {
+ mMails = merged_mails;
+ }
+ return result;
+ }
+
+ bool Mail::DeleteMailToSend( MailsSet const& mail_to_send )
+ {
+ auto mails_to_delete = GetItersectionMails( mail_to_send );
+ auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete );
+ auto result_of_delete = mFileReader.Write( result_set_after_delete );
+ if( result_of_delete )
+ {
+ mMails = result_set_after_delete;
+ }
+ return result_of_delete;
+ }
+
+ MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add )
+ {
+ auto result = mails_to_add;
+ result.merge( mMails );
+ return result;
+ }
+
+ MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send )
+ {
+ MailsSet result;
+
+ auto sorted_mail_to_send = mail_to_send;
+ sorted_mail_to_send.sort();
+ mMails.sort();
+ std::set_intersection( mMails.cbegin(), mMails.cend(),
+ sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(),
+ std::back_inserter( result ));
+ return result;
+ }
+
+ MailsSet Mail::GetMailsAfterDelete( MailsSet const& result_set_after_delete )
+ {
+ auto result = mMails;
+ for( const auto& element_to_delete: result_set_after_delete )
+ {
+ result.remove( element_to_delete );
+ }
+ return result;
+ }
+}
diff --git a/src/management/mail.hpp b/src/management/mail.hpp
new file mode 100644
index 0000000..12b79ab
--- /dev/null
+++ b/src/management/mail.hpp
@@ -0,0 +1,30 @@
+#pragma once
+
+#include <set>
+#include <string>
+
+#include "file/mail.hpp"
+#include "checker/registrator_mails.hpp"
+
+namespace smtp::manage
+{
+ class Mail
+ {
+ public:
+ explicit Mail( file::Mail const& file_reader );
+ ~Mail() = default;
+
+ MailsSet GetMailToSend() const;
+ bool AddMailsToSend( MailsSet const& mails );
+ bool DeleteMailToSend( MailsSet const& mail_to_send );
+ private:
+ MailsSet GetMergedMails( MailsSet const& mails_to_add );
+ MailsSet GetItersectionMails( MailsSet const& mail_to_send );
+ MailsSet GetMailsAfterDelete( MailsSet const& result_set_after_delete );
+
+ MailsSet mMails;
+ file::Mail mFileReader;
+
+ };
+
+}
diff --git a/src/managment/settings.cpp b/src/management/settings.cpp
index 65888aa..65888aa 100644
--- a/src/managment/settings.cpp
+++ b/src/management/settings.cpp
diff --git a/src/managment/settings.hpp b/src/management/settings.hpp
index 3c0a15d..650f966 100644
--- a/src/managment/settings.hpp
+++ b/src/management/settings.hpp
@@ -3,7 +3,8 @@
#include <string>
#include "file/settings.hpp"
-#include "managment/general.hpp"
+#include "management/general.hpp"
+
namespace smtp::manage
{
class Settings
diff --git a/src/managment/builder/mail.cpp b/src/managment/builder/mail.cpp
deleted file mode 100644
index da8dff5..0000000
--- a/src/managment/builder/mail.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-#include "mail.hpp"
-#include "file/mail.hpp"
-
-namespace smtp::manage::builder
-{
- smtp::manage::Mail Mail::Build() const
- {
- static const std::string PATH = {"/var/lib/smtp/mails.txt"};
-
- file::Mail file_manipulator{PATH};
- return smtp::manage::Mail{ file_manipulator };
- }
-
-}
diff --git a/src/managment/builder/settings.cpp b/src/managment/builder/settings.cpp
deleted file mode 100644
index cd08c57..0000000
--- a/src/managment/builder/settings.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "settings.hpp"
-
-namespace smtp::manage::builder
-{
-
- smtp::manage::Settings Settings::Build() const
- {
- auto file_manipulator = GetFileSettings();
- return smtp::manage::Settings{ file_manipulator };
- }
-
- file::Settings Settings::GetFileSettings() const
- {
- static const std::string PATH = {"/var/lib/smtp/settings.txt"};
- return file::Settings{PATH};
- }
-
-}
diff --git a/src/managment/mail.cpp b/src/managment/mail.cpp
deleted file mode 100644
index ccde362..0000000
--- a/src/managment/mail.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <algorithm>
-
-#include "mail.hpp"
-
-namespace smtp::manage
-{
- Mail::Mail( file::Mail const& file_reader )
- : mFileReader( file_reader )
- {
- mMails = mFileReader.Read();
- }
-
- MailsSet Mail::GetMailToSend() const
- {
- return mMails;
- }
-
- bool Mail::AddMailsToSend( MailsSet const& mails_to_add )
- {
- auto merged_mails = GetMergedMails( mails_to_add );
-
- auto result = mFileReader.Write( merged_mails );
- if( result )
- {
- mMails = merged_mails;
- }
- return result;
- }
-
- bool Mail::DeleteMailToSend( MailsSet const& mail_to_send )
- {
- auto mails_to_delete = GetItersectionMails( mail_to_send );
- auto result_set_after_delete = GetMailsAfterDelete( mails_to_delete );
- auto result_of_delete = mFileReader.Write( result_set_after_delete );
- if(result_of_delete)
- {
- mMails = result_set_after_delete;
- }
- return result_of_delete;
- }
-
- MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add )
- {
- auto result = mails_to_add;
- result.merge( mMails );
- return result;
- }
-
- MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_send )
- {
- MailsSet result;
-
- auto sorted_mail_to_send = mail_to_send;
- sorted_mail_to_send.sort();
- mMails.sort();
- std::set_intersection( mMails.cbegin(), mMails.cend(),
- sorted_mail_to_send.cbegin(), sorted_mail_to_send.cend(),
- std::back_inserter( result ));
- return result;
- }
-
- MailsSet Mail::GetMailsAfterDelete( MailsSet const& result_set_after_delete)
- {
- auto result = mMails;
- for(const auto& element_to_delete : result_set_after_delete)
- {
- result.remove( element_to_delete );
- }
- return result;
- }
-
-}
diff --git a/src/managment/mail.hpp b/src/managment/mail.hpp
deleted file mode 100644
index d6dfeef..0000000
--- a/src/managment/mail.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#pragma once
-
-#include <set>
-#include <string>
-
-#include "file/mail.hpp"
-
-namespace smtp::manage
-{
-
- class Mail
- {
- public:
- explicit Mail( file::Mail const& file_reader );
- ~Mail() = default;
-
- MailsSet GetMailToSend() const;
- bool AddMailsToSend( MailsSet const& mails );
- bool DeleteMailToSend(MailsSet const&mail_to_send );
- private:
- MailsSet GetMergedMails( MailsSet const& mails_to_add );
- MailsSet GetItersectionMails( MailsSet const& mail_to_send );
- MailsSet GetMailsAfterDelete( MailsSet const& result_set_after_delete);
- MailsSet mMails;
- file::Mail mFileReader;
- };
-
-}
diff --git a/src/message/builder/cc.hpp b/src/message/builder/cc.hpp
index dbca4b7..9eee0a7 100644
--- a/src/message/builder/cc.hpp
+++ b/src/message/builder/cc.hpp
@@ -2,7 +2,7 @@
#include "types/idecorator.hpp"
#include "types/imessage_builder.hpp"
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::message::builder
{
diff --git a/src/message/builder/mail_to.hpp b/src/message/builder/mail_to.hpp
index 1c21684..626f210 100644
--- a/src/message/builder/mail_to.hpp
+++ b/src/message/builder/mail_to.hpp
@@ -2,7 +2,7 @@
#include "types/idecorator.hpp"
#include "types/imessage_builder.hpp"
-#include "managment/general.hpp"
+#include "management/general.hpp"
namespace smtp::message::builder
{
diff --git a/src/message/sender.hpp b/src/message/sender.hpp
index d19e209..ba5953e 100644
--- a/src/message/sender.hpp
+++ b/src/message/sender.hpp
@@ -5,34 +5,33 @@
#include <curl/curl.h>
-#include "managment/settings.hpp"
-#include "managment/mail.hpp"
-
+#include "management/settings.hpp"
+#include "management/mail.hpp"
namespace smtp::message
{
- struct WriteThis
- {
- int counter;
- };
-
- class Sender
- {
- public:
- Sender( manage::Settings& settings_storage, manage::Mail const& mail_to );
- ~Sender() = default;
-
- bool Send( std::string const& mail_from, std::string const& subject, std::string const& text );
- private:
- void UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& textt ) const;
- void FillRecipients( CURL* curl, curl_slist* recipients );
- std::string GetHostPortData() const;
- static size_t ReadCallBack( void* ptr, size_t size, size_t nmemb, void* userp );
-
- manage::Settings& mSettingsStorage;
- manage::Mail const& mMailTo;
-
- bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from );
- };
+ struct WriteThis
+ {
+ int counter;
+ };
+
+ class Sender
+ {
+ public:
+ Sender( manage::Settings& settings_storage, manage::Mail const& mail_to );
+ ~Sender() = default;
+
+ bool Send( std::string const& mail_from, std::string const& subject, std::string const& text );
+ private:
+ void UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& textt ) const;
+ void FillRecipients(CURL* curl, curl_slist* recipients );
+ std::string GetHostPortData() const;
+ static size_t ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp );
+
+ manage::Settings& mSettingsStorage;
+ manage::Mail const& mMailTo;
+
+ bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from );
+ };
}
diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp
index edf964e..47ff209 100644
--- a/src/service/smtp.hpp
+++ b/src/service/smtp.hpp
@@ -5,8 +5,8 @@
#include <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
-#include "managment/mail.hpp"
-#include "managment/settings.hpp"
+#include "management/mail.hpp"
+#include "management/settings.hpp"
namespace smtp::service
{