From 7a446d48b9270dbe2628b462a54a7a23ff43c572 Mon Sep 17 00:00:00 2001 From: claiff Date: Mon, 19 Sep 2022 14:03:14 +0300 Subject: temp --- CMakeLists.txt | 142 +++++++++++++++------------ src/checker/errors/mail/empty.cpp | 9 ++ src/checker/errors/mail/empty.hpp | 17 ++++ src/checker/errors/settings/host_number.cpp | 36 +++++++ src/checker/errors/settings/host_number.hpp | 17 ++++ src/checker/errors/types/imails_error.hpp | 19 ++++ src/checker/errors/types/isettings_error.hpp | 22 +++++ src/checker/registrator_mails.cpp | 22 +++++ src/checker/registrator_mails.hpp | 19 ++++ src/checker/registrator_settings.hpp | 35 +++++++ src/file/mail.cpp | 31 +++--- src/file/mail.hpp | 6 +- src/file/settings.cpp | 15 +-- src/file/settings.hpp | 10 +- src/management/builder/mail.cpp | 23 +++++ src/management/builder/mail.hpp | 18 ++++ src/management/builder/settings.cpp | 29 ++++++ src/management/builder/settings.hpp | 21 ++++ src/management/general.hpp | 21 ++++ src/management/logger.cpp | 12 +++ src/management/logger.hpp | 13 +++ src/management/mail.cpp | 71 ++++++++++++++ src/management/mail.hpp | 30 ++++++ src/management/settings.cpp | 57 +++++++++++ src/management/settings.hpp | 30 ++++++ src/managment/builder/mail.cpp | 14 --- src/managment/builder/mail.hpp | 16 --- src/managment/builder/settings.cpp | 18 ---- src/managment/builder/settings.hpp | 19 ---- src/managment/general.hpp | 21 ---- src/managment/logger.cpp | 12 --- src/managment/logger.hpp | 13 --- src/managment/mail.cpp | 72 -------------- src/managment/mail.hpp | 28 ------ src/managment/settings.cpp | 57 ----------- src/managment/settings.hpp | 30 ------ 36 files changed, 626 insertions(+), 399 deletions(-) create mode 100644 src/checker/errors/mail/empty.cpp create mode 100644 src/checker/errors/mail/empty.hpp create mode 100644 src/checker/errors/settings/host_number.cpp create mode 100644 src/checker/errors/settings/host_number.hpp create mode 100644 src/checker/errors/types/imails_error.hpp create mode 100644 src/checker/errors/types/isettings_error.hpp create mode 100644 src/checker/registrator_mails.cpp create mode 100644 src/checker/registrator_mails.hpp create mode 100644 src/checker/registrator_settings.hpp create mode 100644 src/management/builder/mail.cpp create mode 100644 src/management/builder/mail.hpp create mode 100644 src/management/builder/settings.cpp create mode 100644 src/management/builder/settings.hpp create mode 100644 src/management/general.hpp create mode 100644 src/management/logger.cpp create mode 100644 src/management/logger.hpp create mode 100644 src/management/mail.cpp create mode 100644 src/management/mail.hpp create mode 100644 src/management/settings.cpp create mode 100644 src/management/settings.hpp delete mode 100644 src/managment/builder/mail.cpp delete mode 100644 src/managment/builder/mail.hpp delete mode 100644 src/managment/builder/settings.cpp delete mode 100644 src/managment/builder/settings.hpp delete mode 100644 src/managment/general.hpp delete mode 100644 src/managment/logger.cpp delete mode 100644 src/managment/logger.hpp delete mode 100644 src/managment/mail.cpp delete mode 100644 src/managment/mail.hpp delete mode 100644 src/managment/settings.cpp delete mode 100644 src/managment/settings.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 11f62b1..6a1916b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -15,62 +15,60 @@ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Os -flto") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0") 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 && ./bootstrap.sh - BUILD_COMMAND cd && ./b2 --exec-prefix= - --prefix= --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 && ./bootstrap.sh + BUILD_COMMAND cd && ./b2 --exec-prefix= + --prefix= --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() - find_package(Boost 1.69 REQUIRED COMPONENTS coroutine context) - endif() - message("++ Using Boost version: " ${Boost_VERSION}) - - include_directories(${Boost_INCLUDE_DIRS}) - link_directories(${Boost_LIBRARY_DIRS}) + if(${BOOST_VERSION}) + find_package(Boost ${BOOST_VERSION} EXACT) + else() + find_package(Boost 1.69 REQUIRED COMPONENTS coroutine context) + endif() + message("++ Using Boost version: " ${Boost_VERSION}) + + include_directories(${Boost_INCLUDE_DIRS}) + link_directories(${Boost_LIBRARY_DIRS}) endif() include_directories(src) @@ -78,11 +76,12 @@ include_directories(src) set(SRC_DIR src) set(MESSAGE_DIR src/message) set(SERVICE_DIR src/service) -set(MANAGMENT_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(CHECKER_DIR src/checker) set(SRC_FILES ${SRC_DIR}/main.cpp @@ -108,13 +107,13 @@ set(SRC_FILES ${MESSAGE_DIR}/builder/types/imessage_builder.hpp ${MESSAGE_DIR}/builder/types/idecorator.hpp - ${MANAGMENT_DIR}/mail.hpp - ${MANAGMENT_DIR}/mail.cpp - ${MANAGMENT_DIR}/settings.hpp - ${MANAGMENT_DIR}/settings.cpp - ${MANAGMENT_DIR}/logger.hpp - ${MANAGMENT_DIR}/logger.cpp - ${MANAGMENT_DIR}/general.hpp + ${MANAGEMENT_DIR}/mail.hpp + ${MANAGEMENT_DIR}/mail.cpp + ${MANAGEMENT_DIR}/settings.hpp + ${MANAGEMENT_DIR}/settings.cpp + ${MANAGEMENT_DIR}/logger.hpp + ${MANAGEMENT_DIR}/logger.cpp + ${MANAGEMENT_DIR}/general.hpp ${FILE_DIR}/mail.hpp ${FILE_DIR}/mail.cpp @@ -137,12 +136,25 @@ set(SRC_FILES ${MANAGER_BUILDER_DIR}/settings.cpp ${MANAGER_BUILDER_DIR}/mail.hpp ${MANAGER_BUILDER_DIR}/mail.cpp + + ${CHECKER_DIR}/registrator_mails.hpp + ${CHECKER_DIR}/registrator_mails.cpp + ${CHECKER_DIR}/registrator_settings.hpp + + ${CHECKER_DIR}/errors/settings/host_number.cpp + ${CHECKER_DIR}/errors/settings/host_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 ) add_executable(smtp ${SRC_FILES}) if(NOT ${YOCTO_DEPENDENCIES}) - add_dependencies(smtp sdbusplus-project) + add_dependencies(smtp sdbusplus-project) endif() + target_link_libraries(smtp boost_context) target_link_libraries(smtp sdbusplus) target_link_libraries(smtp systemd) 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/host_number.cpp b/src/checker/errors/settings/host_number.cpp new file mode 100644 index 0000000..3580265 --- /dev/null +++ b/src/checker/errors/settings/host_number.cpp @@ -0,0 +1,36 @@ +#include "host_number.hpp" +#include "managment/logger.hpp" +#include +namespace smtp::checker::errors::settings +{ + bool HostNumber::Check( const manage::SettingsFileDataType& line ) const + { + //TODO общее использование полей + auto find = line.find("host"); + if(find == line.end()) + { + manage::Logger::LogError("Host doesn't found"); + return false; + } + int host_as_int{}; + auto host_as_string = find->second; + if(host_as_string.empty()) + { + return true; + } + + try + { + host_as_int = std::stoi( host_as_string ); + } + catch( std::invalid_argument const& ex ) + { + manage::Logger::LogError("Host doesn't entered by numbers"); + } + catch( std::out_of_range const& ex ) + { + manage::Logger::LogError("Host out of range"); + } + return host_as_int >= 0 && host_as_int <= 65535; + } +} diff --git a/src/checker/errors/settings/host_number.hpp b/src/checker/errors/settings/host_number.hpp new file mode 100644 index 0000000..1f2bfe7 --- /dev/null +++ b/src/checker/errors/settings/host_number.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "checker/errors/types/isettings_error.hpp" + +namespace smtp::checker::errors::settings +{ + class HostNumber : public types::IErrorSettings + { + public: + HostNumber() = default; + ~HostNumber() override = default; + + virtual 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 +#include + +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; +} + + diff --git a/src/checker/errors/types/isettings_error.hpp b/src/checker/errors/types/isettings_error.hpp new file mode 100644 index 0000000..d5a788f --- /dev/null +++ b/src/checker/errors/types/isettings_error.hpp @@ -0,0 +1,22 @@ +// +// Created by claiff on 18.09.22. +// + +#pragma once + +#include + +#include "managment/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; +} \ 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 + +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 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 + +namespace smtp::checker +{ + class RegistratorSettings + { + public: + RegistratorSettings() = default; + ~RegistratorSettings() = default; + + void Add( errors::types::IErrorSettingsPtr const& error ) + { + mErrors.push_back( error ); + } + + template + 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/file/mail.cpp b/src/file/mail.cpp index 5452136..c728edc 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -5,8 +5,9 @@ namespace smtp::file { - Mail::Mail( std::string const& path_file ) + Mail::Mail( std::string const& path_file, checker::RegistratorMails const& registrator_errors ) : mPathFile( path_file ) + , mRegistratorErrors( registrator_errors ) { } @@ -23,11 +24,10 @@ namespace smtp::file while ( std::getline( mail_file, line ) ) { - auto parsed_data = GetMailFromLine( line ); - if( parsed_data ) - { - result.push_back( *parsed_data ); - } + if( mRegistratorErrors.Check( line ) ) + { + result.push_back( line ); + } } mail_file.close(); return result; @@ -41,23 +41,14 @@ namespace smtp::file manage::Logger::LogError( "Unable to open file to write " + mPathFile ); return false; } - for( const auto& pair : data ) + for( const auto& mail : data ) { - mail_file << pair << "\n"; + if( mRegistratorErrors.Check( mail ) ) + { + mail_file << mail << "\n"; + } } mail_file.close(); return true; } - - std::optional Mail::GetMailFromLine( std::string const& line ) const - { - //TODO registrator if checking parsing - auto pos = line.find('@'); - if(pos == std::string::npos) - { - return {}; - } - return line; - } - } diff --git a/src/file/mail.hpp b/src/file/mail.hpp index 34050bf..2860c79 100644 --- a/src/file/mail.hpp +++ b/src/file/mail.hpp @@ -4,21 +4,21 @@ #include #include "managment/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 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 83c1037..a856f6e 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -5,8 +5,9 @@ namespace smtp::file { - Settings::Settings( std::string const& path_file) + Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) : mPathFile( path_file ) + , mRegistratorErrors( registrator_errors ) { } @@ -23,7 +24,7 @@ namespace smtp::file return SetParsedData( parsed_data ); } - ParsedStoreType Settings::GetParsedStore() const + manage::SettingsFileDataType Settings::GetParsedStore() const { std::ifstream settings_file{ mPathFile, std::fstream::in }; if ( !settings_file.is_open() ) @@ -32,18 +33,18 @@ namespace smtp::file return {}; } std::string line{}; - ParsedStoreType result; + manage::SettingsFileDataType result; while ( std::getline( settings_file, line ) ) { - auto parsed_data = parser::Settings{}.Parse(line); - result.insert( parsed_data ); + auto parsed_data = parser::Settings{}.Parse( line ); + result.insert( parsed_data ); } settings_file.close(); - return result; + return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{}; } - bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const + 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() ) diff --git a/src/file/settings.hpp b/src/file/settings.hpp index fb77b1e..7e5ce63 100644 --- a/src/file/settings.hpp +++ b/src/file/settings.hpp @@ -6,25 +6,27 @@ #include "converter/full.hpp" #include "parser/settings.hpp" #include "managment/general.hpp" +#include "checker/registrator_settings.hpp" namespace smtp::file { - using ParsedStoreType = std::unordered_map; + class Settings { public: - explicit Settings( std::string const& path_file ); + 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: - ParsedStoreType GetParsedStore() const; - bool SetParsedData( ParsedStoreType const& parsed_data ) const; + manage::SettingsFileDataType GetParsedStore() const; + bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; std::string BuildParam( std::pair const& data ) const; std::string mPathFile; + checker::RegistratorSettings mRegistratorErrors; }; } 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/management/builder/mail.hpp b/src/management/builder/mail.hpp new file mode 100644 index 0000000..ad1de36 --- /dev/null +++ b/src/management/builder/mail.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "managment/mail.hpp" +#include "checker/registrator_mails.hpp" + +namespace smtp::manage::builder +{ + class Mail + { + public: + Mail() = default; + ~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..d5a5e3b --- /dev/null +++ b/src/management/builder/settings.cpp @@ -0,0 +1,29 @@ +#include "settings.hpp" +#include "checker/errors/settings/host_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::HostNumber >()); + return result; + } + +} diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp new file mode 100644 index 0000000..67b7481 --- /dev/null +++ b/src/management/builder/settings.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include "managment/settings.hpp" +#include "file/settings.hpp" +#include "checker/registrator_settings.hpp" + +namespace smtp::manage::builder +{ + class Settings + { + public: + Settings() = default; + ~Settings() = default; + + smtp::manage::Settings Build() const; + private: + file::Settings GetFileSettings() const; + checker::RegistratorSettings BuildErrorRegistrator() const; + }; + +} diff --git a/src/management/general.hpp b/src/management/general.hpp new file mode 100644 index 0000000..ed1a789 --- /dev/null +++ b/src/management/general.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include + +namespace smtp::manage +{ + using SettingsFileDataType = std::unordered_map; + using MailsSet = std::list; + + struct SettingsFields + { + bool is_need_auth; + bool is_need_ssl; + std::string username; + std::string password; + std::string host; + std::string port; + }; +} diff --git a/src/management/logger.cpp b/src/management/logger.cpp new file mode 100644 index 0000000..0c55394 --- /dev/null +++ b/src/management/logger.cpp @@ -0,0 +1,12 @@ +#include + +#include "logger.hpp" + +namespace smtp::manage +{ + void Logger::LogError( std::string const& message ) + { + std::cout << message << std::endl; + } + +} diff --git a/src/management/logger.hpp b/src/management/logger.hpp new file mode 100644 index 0000000..315e17e --- /dev/null +++ b/src/management/logger.hpp @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace smtp::manage +{ + class Logger + { + public: + Logger() = default; + static void LogError( std::string const& message ); + }; +} 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 + +#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 +#include + +#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/management/settings.cpp b/src/management/settings.cpp new file mode 100644 index 0000000..65888aa --- /dev/null +++ b/src/management/settings.cpp @@ -0,0 +1,57 @@ +#include "settings.hpp" +#include "converter/string.hpp" + +namespace smtp::manage +{ + Settings::Settings( file::Settings const& file_reader ) + : mFileReader( file_reader ) + { + ReloadSettings(); + } + + bool Settings::SetSettings( manage::SettingsFields const& settings_fields )const + { + return mFileReader.Write( settings_fields ); + } + + std::string Settings::GetSettings() + { + ReloadSettings(); + return converter::String{}.Convert(mSettingsFields); + } + + void Settings::ReloadSettings() + { + mSettingsFields = mFileReader.Read(); + } + + bool Settings::IsNeedAuth() const noexcept + { + return mSettingsFields.is_need_auth; + } + + bool Settings::IsNeedSsl() const noexcept + { + return mSettingsFields.is_need_ssl; + } + + std::string Settings::GetUserName() const + { + return mSettingsFields.username; + } + + std::string Settings::GetPassword() const + { + return mSettingsFields.password; + } + + std::string Settings::GetHost() const + { + return mSettingsFields.host; + } + + std::string Settings::GetPort() const + { + return mSettingsFields.port; + } +} diff --git a/src/management/settings.hpp b/src/management/settings.hpp new file mode 100644 index 0000000..3c0a15d --- /dev/null +++ b/src/management/settings.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include + +#include "file/settings.hpp" +#include "managment/general.hpp" +namespace smtp::manage +{ + class Settings + { + public: + explicit Settings( file::Settings const& file_reader ); + ~Settings() = default; + + bool SetSettings( manage::SettingsFields const& settings_fields ) const; + std::string GetSettings(); + void ReloadSettings(); + + bool IsNeedAuth() const noexcept; + bool IsNeedSsl() const noexcept; + + std::string GetUserName() const; + std::string GetPassword() const; + std::string GetHost() const; + std::string GetPort() const; + private: + file::Settings mFileReader; + manage::SettingsFields mSettingsFields; + }; +} 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/mail.hpp b/src/managment/builder/mail.hpp deleted file mode 100644 index ae53202..0000000 --- a/src/managment/builder/mail.hpp +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include "managment/mail.hpp" - -namespace smtp::manage::builder -{ - class Mail - { - public: - Mail() = default; - ~Mail() = default; - - smtp::manage::Mail Build() const; - }; - -} 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/builder/settings.hpp b/src/managment/builder/settings.hpp deleted file mode 100644 index 1089b06..0000000 --- a/src/managment/builder/settings.hpp +++ /dev/null @@ -1,19 +0,0 @@ -#pragma once - -#include "managment/settings.hpp" -#include "file/settings.hpp" - -namespace smtp::manage::builder -{ - class Settings - { - public: - Settings() = default; - ~Settings() = default; - - smtp::manage::Settings Build() const; - private: - file::Settings GetFileSettings() const; - }; - -} diff --git a/src/managment/general.hpp b/src/managment/general.hpp deleted file mode 100644 index ed1a789..0000000 --- a/src/managment/general.hpp +++ /dev/null @@ -1,21 +0,0 @@ -#pragma once - -#include -#include -#include - -namespace smtp::manage -{ - using SettingsFileDataType = std::unordered_map; - using MailsSet = std::list; - - struct SettingsFields - { - bool is_need_auth; - bool is_need_ssl; - std::string username; - std::string password; - std::string host; - std::string port; - }; -} diff --git a/src/managment/logger.cpp b/src/managment/logger.cpp deleted file mode 100644 index 0c55394..0000000 --- a/src/managment/logger.cpp +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "logger.hpp" - -namespace smtp::manage -{ - void Logger::LogError( std::string const& message ) - { - std::cout << message << std::endl; - } - -} diff --git a/src/managment/logger.hpp b/src/managment/logger.hpp deleted file mode 100644 index 315e17e..0000000 --- a/src/managment/logger.hpp +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once - -#include - -namespace smtp::manage -{ - class Logger - { - public: - Logger() = default; - static void LogError( std::string const& message ); - }; -} 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 - -#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 -#include - -#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/managment/settings.cpp b/src/managment/settings.cpp deleted file mode 100644 index 65888aa..0000000 --- a/src/managment/settings.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "settings.hpp" -#include "converter/string.hpp" - -namespace smtp::manage -{ - Settings::Settings( file::Settings const& file_reader ) - : mFileReader( file_reader ) - { - ReloadSettings(); - } - - bool Settings::SetSettings( manage::SettingsFields const& settings_fields )const - { - return mFileReader.Write( settings_fields ); - } - - std::string Settings::GetSettings() - { - ReloadSettings(); - return converter::String{}.Convert(mSettingsFields); - } - - void Settings::ReloadSettings() - { - mSettingsFields = mFileReader.Read(); - } - - bool Settings::IsNeedAuth() const noexcept - { - return mSettingsFields.is_need_auth; - } - - bool Settings::IsNeedSsl() const noexcept - { - return mSettingsFields.is_need_ssl; - } - - std::string Settings::GetUserName() const - { - return mSettingsFields.username; - } - - std::string Settings::GetPassword() const - { - return mSettingsFields.password; - } - - std::string Settings::GetHost() const - { - return mSettingsFields.host; - } - - std::string Settings::GetPort() const - { - return mSettingsFields.port; - } -} diff --git a/src/managment/settings.hpp b/src/managment/settings.hpp deleted file mode 100644 index 3c0a15d..0000000 --- a/src/managment/settings.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include - -#include "file/settings.hpp" -#include "managment/general.hpp" -namespace smtp::manage -{ - class Settings - { - public: - explicit Settings( file::Settings const& file_reader ); - ~Settings() = default; - - bool SetSettings( manage::SettingsFields const& settings_fields ) const; - std::string GetSettings(); - void ReloadSettings(); - - bool IsNeedAuth() const noexcept; - bool IsNeedSsl() const noexcept; - - std::string GetUserName() const; - std::string GetPassword() const; - std::string GetHost() const; - std::string GetPort() const; - private: - file::Settings mFileReader; - manage::SettingsFields mSettingsFields; - }; -} -- cgit v1.2.3 From 6cfc7076808138be2ad5a2b05edd635b5948bf31 Mon Sep 17 00:00:00 2001 From: claiff Date: Wed, 21 Sep 2022 15:50:24 +0300 Subject: add port errors check --- CMakeLists.txt | 4 +-- src/checker/errors/settings/host_number.cpp | 36 --------------------- src/checker/errors/settings/host_number.hpp | 17 ---------- src/checker/errors/settings/port_number.cpp | 48 ++++++++++++++++++++++++++++ src/checker/errors/settings/port_number.hpp | 17 ++++++++++ src/checker/errors/types/isettings_error.hpp | 2 +- src/converter/file.hpp | 2 +- src/converter/full.hpp | 4 +-- src/converter/settings.hpp | 2 +- src/converter/string.hpp | 2 +- src/file/mail.cpp | 2 +- src/file/mail.hpp | 2 +- src/file/settings.cpp | 38 +++++++++++++++------- src/file/settings.hpp | 27 ++++++++-------- src/main.cpp | 4 +-- src/management/builder/mail.hpp | 2 +- src/management/builder/settings.cpp | 4 +-- src/management/builder/settings.hpp | 2 +- src/management/settings.hpp | 3 +- src/message/builder/cc.hpp | 2 +- src/message/builder/mail_to.hpp | 2 +- src/message/sender.cpp | 2 +- src/message/sender.hpp | 5 ++- src/service/smtp.hpp | 4 +-- 24 files changed, 131 insertions(+), 102 deletions(-) delete mode 100644 src/checker/errors/settings/host_number.cpp delete mode 100644 src/checker/errors/settings/host_number.hpp create mode 100644 src/checker/errors/settings/port_number.cpp create mode 100644 src/checker/errors/settings/port_number.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a1916b..a640f3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,8 +141,8 @@ set(SRC_FILES ${CHECKER_DIR}/registrator_mails.cpp ${CHECKER_DIR}/registrator_settings.hpp - ${CHECKER_DIR}/errors/settings/host_number.cpp - ${CHECKER_DIR}/errors/settings/host_number.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 diff --git a/src/checker/errors/settings/host_number.cpp b/src/checker/errors/settings/host_number.cpp deleted file mode 100644 index 3580265..0000000 --- a/src/checker/errors/settings/host_number.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "host_number.hpp" -#include "managment/logger.hpp" -#include -namespace smtp::checker::errors::settings -{ - bool HostNumber::Check( const manage::SettingsFileDataType& line ) const - { - //TODO общее использование полей - auto find = line.find("host"); - if(find == line.end()) - { - manage::Logger::LogError("Host doesn't found"); - return false; - } - int host_as_int{}; - auto host_as_string = find->second; - if(host_as_string.empty()) - { - return true; - } - - try - { - host_as_int = std::stoi( host_as_string ); - } - catch( std::invalid_argument const& ex ) - { - manage::Logger::LogError("Host doesn't entered by numbers"); - } - catch( std::out_of_range const& ex ) - { - manage::Logger::LogError("Host out of range"); - } - return host_as_int >= 0 && host_as_int <= 65535; - } -} diff --git a/src/checker/errors/settings/host_number.hpp b/src/checker/errors/settings/host_number.hpp deleted file mode 100644 index 1f2bfe7..0000000 --- a/src/checker/errors/settings/host_number.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "checker/errors/types/isettings_error.hpp" - -namespace smtp::checker::errors::settings -{ - class HostNumber : public types::IErrorSettings - { - public: - HostNumber() = default; - ~HostNumber() override = default; - - virtual bool Check( const manage::SettingsFileDataType& 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 + +#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/isettings_error.hpp b/src/checker/errors/types/isettings_error.hpp index d5a788f..05f68e3 100644 --- a/src/checker/errors/types/isettings_error.hpp +++ b/src/checker/errors/types/isettings_error.hpp @@ -6,7 +6,7 @@ #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::checker::errors::types { 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 #include -#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 #include -#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 const& from ) const; + manage::SettingsFields Convert( manage::SettingsFileDataType const& from ) const; std::unordered_map 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 #include -#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 #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::converter { diff --git a/src/file/mail.cpp b/src/file/mail.cpp index c728edc..2b1ff14 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -1,7 +1,7 @@ #include #include "mail.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::file { diff --git a/src/file/mail.hpp b/src/file/mail.hpp index 2860c79..148aa11 100644 --- a/src/file/mail.hpp +++ b/src/file/mail.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" #include "checker/registrator_mails.hpp" namespace smtp::file diff --git a/src/file/settings.cpp b/src/file/settings.cpp index a856f6e..710b67f 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -1,10 +1,13 @@ #include #include "settings.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::file { + // + //Constructors + // Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) : mPathFile( path_file ) , mRegistratorErrors( registrator_errors ) @@ -12,6 +15,9 @@ namespace smtp::file } + // + //Public methods + // manage::SettingsFields Settings::Read() const { auto parsed_store = GetParsedStore(); @@ -21,9 +27,12 @@ namespace smtp::file bool Settings::Write( manage::SettingsFields const& settings_fields ) const { auto parsed_data = converter::Full{}.Convert( settings_fields ); - return SetParsedData( parsed_data ); + return mRegistratorErrors.Check( parsed_data ) && SetParsedData( parsed_data ); } + // + //Private methods + // manage::SettingsFileDataType Settings::GetParsedStore() const { std::ifstream settings_file{ mPathFile, std::fstream::in }; @@ -32,19 +41,26 @@ namespace smtp::file manage::Logger::LogError( "Unable to open file to read " + mPathFile ); return {}; } - std::string line{}; - manage::SettingsFileDataType result; + auto result = GetDataFromFile( settings_file ); - while ( std::getline( settings_file, line ) ) - { - auto parsed_data = parser::Settings{}.Parse( line ); - result.insert( parsed_data ); - } - settings_file.close(); + settings_file.close(); return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{}; } - bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const + manage::SettingsFileDataType Settings::GetDataFromFile( std::ifstream& settings_file ) const + { + std::string line{}; + manage::SettingsFileDataType result; + + while ( std::getline( settings_file, line ) ) + { + auto parsed_data = parser::Settings{}.Parse( line ); + result.insert( parsed_data ); + } + return result; + } + + 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() ) diff --git a/src/file/settings.hpp b/src/file/settings.hpp index 7e5ce63..0882ac3 100644 --- a/src/file/settings.hpp +++ b/src/file/settings.hpp @@ -5,28 +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 { - class Settings - { - public: - explicit Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ); - ~Settings() = default; + 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::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 const& data ) const; + bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; + std::string BuildParam( std::pair < std::string, std::string > const& data ) const; - std::string mPathFile; + 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 #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.hpp b/src/management/builder/mail.hpp index ad1de36..e735fd6 100644 --- a/src/management/builder/mail.hpp +++ b/src/management/builder/mail.hpp @@ -1,6 +1,6 @@ #pragma once -#include "managment/mail.hpp" +#include "management/mail.hpp" #include "checker/registrator_mails.hpp" namespace smtp::manage::builder diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp index d5a5e3b..baa45da 100644 --- a/src/management/builder/settings.cpp +++ b/src/management/builder/settings.cpp @@ -1,5 +1,5 @@ #include "settings.hpp" -#include "checker/errors/settings/host_number.hpp" +#include "checker/errors/settings/port_number.hpp" namespace smtp::manage::builder { @@ -22,7 +22,7 @@ namespace smtp::manage::builder { checker::RegistratorSettings result; - result.Add( std::make_shared < checker::errors::settings::HostNumber >()); + result.Add( std::make_shared < checker::errors::settings::PortNumber >()); return result; } diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp index 67b7481..64f9384 100644 --- a/src/management/builder/settings.hpp +++ b/src/management/builder/settings.hpp @@ -1,6 +1,6 @@ #pragma once -#include "managment/settings.hpp" +#include "management/settings.hpp" #include "file/settings.hpp" #include "checker/registrator_settings.hpp" diff --git a/src/management/settings.hpp b/src/management/settings.hpp index 3c0a15d..650f966 100644 --- a/src/management/settings.hpp +++ b/src/management/settings.hpp @@ -3,7 +3,8 @@ #include #include "file/settings.hpp" -#include "managment/general.hpp" +#include "management/general.hpp" + namespace smtp::manage { class Settings 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.cpp b/src/message/sender.cpp index 5b3a421..c617a16 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -7,7 +7,7 @@ #include "builder/subject.hpp" #include "builder/text.hpp" #include "builder/from.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::message { diff --git a/src/message/sender.hpp b/src/message/sender.hpp index ca2c3ff..ba5953e 100644 --- a/src/message/sender.hpp +++ b/src/message/sender.hpp @@ -5,8 +5,8 @@ #include -#include "managment/settings.hpp" -#include "managment/mail.hpp" +#include "management/settings.hpp" +#include "management/mail.hpp" namespace smtp::message { struct WriteThis @@ -23,7 +23,6 @@ namespace smtp::message 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 InitSenders( std::string const& mail_from, std::list const& mail_to ); 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 ); diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp index a52c9c0..1c71acc 100644 --- a/src/service/smtp.hpp +++ b/src/service/smtp.hpp @@ -5,8 +5,8 @@ #include #include -#include "managment/mail.hpp" -#include "managment/settings.hpp" +#include "management/mail.hpp" +#include "management/settings.hpp" namespace smtp::service { -- cgit v1.2.3