diff options
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 { |