From da5f91a0ce15351a82beb061c3ccc965164529bc Mon Sep 17 00:00:00 2001 From: claiff Date: Thu, 6 Oct 2022 12:26:45 +0300 Subject: create settings on start --- CMakeLists.txt | 12 +++- src/checker/errors/mail/empty.cpp | 7 +-- src/checker/errors/settings/port_number.cpp | 2 +- src/checker/errors/settings/port_number.hpp | 2 +- src/checker/errors/settings/server.cpp | 2 +- src/checker/errors/settings/server.hpp | 2 +- src/checker/errors/types/isettings_error.hpp | 4 +- src/converter/file_to_string.cpp | 2 +- src/converter/file_to_string.hpp | 4 +- src/converter/file_to_struct.cpp | 20 +++---- src/converter/file_to_struct.hpp | 20 +++---- src/converter/struct_to_file.cpp | 16 +++--- src/converter/struct_to_file.hpp | 16 +++--- src/converter/struct_to_string.cpp | 14 ++--- src/converter/struct_to_string.hpp | 16 +++--- src/file/errors/not_create.cpp | 25 ++++++++ src/file/errors/not_create.hpp | 18 ++++++ src/file/errors/registrator.cpp | 32 +++++++++++ src/file/errors/registrator.hpp | 21 +++++++ src/file/errors/types/ierror.hpp | 21 +++++++ src/file/mail/checker_decorator.cpp | 8 +-- src/file/mail/checker_decorator.hpp | 14 ++--- src/file/mail/file_decorator.cpp | 15 ++--- src/file/mail/file_decorator.hpp | 18 +++--- src/file/mail/sort_decorator.cpp | 6 +- src/file/mail/sort_decorator.hpp | 10 ++-- src/file/mail/types/ifile_manipulator.hpp | 6 +- src/file/settings/checker_decorator.cpp | 12 ++-- src/file/settings/checker_decorator.hpp | 10 ++-- src/file/settings/file_decorator.cpp | 13 +++-- src/file/settings/file_decorator.hpp | 16 +++--- src/file/settings/settings.cpp | 4 +- src/file/settings/settings.hpp | 12 ++-- src/file/settings/types/ifile_manipulator.hpp | 6 +- src/general/idecorator.hpp | 82 +++++++++++++++++++++++++++ src/general/struct.hpp | 21 +++++++ src/logger/journal.cpp | 11 +++- src/logger/journal.hpp | 1 + src/logger/logger_set.cpp | 12 +++- src/logger/logger_set.hpp | 4 +- src/logger/phosphor.cpp | 8 ++- src/logger/phosphor.hpp | 1 + src/logger/types/ilogger.hpp | 3 +- src/management/builder/mail.cpp | 16 +++++- src/management/builder/mail.hpp | 4 +- src/management/builder/settings.cpp | 15 ++++- src/management/builder/settings.hpp | 4 +- src/management/general.hpp | 21 ------- src/management/mail.cpp | 16 +++--- src/management/mail.hpp | 16 +++--- src/management/settings.cpp | 3 +- src/management/settings.hpp | 6 +- src/message/builder/cc.cpp | 2 +- src/message/builder/cc.hpp | 10 ++-- src/message/builder/date.hpp | 4 +- src/message/builder/from.hpp | 4 +- src/message/builder/mail_to.cpp | 2 +- src/message/builder/mail_to.hpp | 10 ++-- src/message/builder/subject.hpp | 4 +- src/message/builder/text.hpp | 4 +- src/message/builder/types/idecorator.hpp | 82 --------------------------- src/service/smtp.cpp | 6 +- 62 files changed, 478 insertions(+), 300 deletions(-) create mode 100644 src/file/errors/not_create.cpp create mode 100644 src/file/errors/not_create.hpp create mode 100644 src/file/errors/registrator.cpp create mode 100644 src/file/errors/registrator.hpp create mode 100644 src/file/errors/types/ierror.hpp create mode 100644 src/general/idecorator.hpp create mode 100644 src/general/struct.hpp delete mode 100644 src/management/general.hpp delete mode 100644 src/message/builder/types/idecorator.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index cba5aa3..7351684 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -97,6 +97,7 @@ set(MANAGER_BUILDER_DIR src/management/builder) set(CONVERTER_DIR src/converter) set(LOGGER_DIR src/logger) set(CHECKER_DIR src/checker) +set(GENERAL_DIR src/general) set(SRC_FILES ${SRC_DIR}/main.cpp @@ -120,13 +121,11 @@ set(SRC_FILES ${MESSAGE_DIR}/builder/from.hpp ${MESSAGE_DIR}/builder/from.cpp ${MESSAGE_DIR}/builder/types/imessage_builder.hpp - ${MESSAGE_DIR}/builder/types/idecorator.hpp ${MANAGEMENT_DIR}/mail.hpp ${MANAGEMENT_DIR}/mail.cpp ${MANAGEMENT_DIR}/settings.hpp ${MANAGEMENT_DIR}/settings.cpp - ${MANAGEMENT_DIR}/general.hpp ${FILE_DIR}/mail/file_decorator.hpp ${FILE_DIR}/mail/file_decorator.cpp @@ -146,6 +145,12 @@ set(SRC_FILES ${FILE_DIR}/settings/checker_decorator.cpp ${FILE_DIR}/settings/types/ifile_manipulator.hpp + ${FILE_DIR}/errors/registrator.hpp + ${FILE_DIR}/errors/registrator.cpp + ${FILE_DIR}/errors/not_create.hpp + ${FILE_DIR}/errors/not_create.cpp + ${FILE_DIR}/errors/types/ierror.hpp + ${CONVERTER_DIR}/struct_to_file.hpp ${CONVERTER_DIR}/struct_to_file.cpp ${CONVERTER_DIR}/file_to_struct.hpp @@ -181,6 +186,9 @@ set(SRC_FILES ${CHECKER_DIR}/errors/types/imails_error.hpp ${CHECKER_DIR}/errors/types/isettings_error.hpp + + ${GENERAL_DIR}/struct.hpp + ${GENERAL_DIR}/idecorator.hpp ) if( ${ADD_PHOSPHOR_LOGGING} STREQUAL "ON") diff --git a/src/checker/errors/mail/empty.cpp b/src/checker/errors/mail/empty.cpp index 8a1591e..c39516e 100644 --- a/src/checker/errors/mail/empty.cpp +++ b/src/checker/errors/mail/empty.cpp @@ -5,11 +5,6 @@ namespace smtp::checker::errors::mail { bool Empty::Check( std::string const& line ) const { - auto result = !line.empty() && line != " "; - if( !result ) - { - logger::LoggerSet::GetInstance()->LogError( GetMethodName(), "Mails are empty" ); - } - return result; + return !line.empty() && line != " "; } } diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp index b0d9661..6e8b960 100644 --- a/src/checker/errors/settings/port_number.cpp +++ b/src/checker/errors/settings/port_number.cpp @@ -5,7 +5,7 @@ namespace smtp::checker::errors::settings { - bool PortNumber::Check( manage::SettingsFileDataType const& line ) const + bool PortNumber::Check( general::SettingsFileDataType const& line ) const { static const std::string PORT_FIELD = "port"; static constexpr int MIN_PORT_NUMBER = 0; diff --git a/src/checker/errors/settings/port_number.hpp b/src/checker/errors/settings/port_number.hpp index 789a486..a3145e9 100644 --- a/src/checker/errors/settings/port_number.hpp +++ b/src/checker/errors/settings/port_number.hpp @@ -10,7 +10,7 @@ namespace smtp::checker::errors::settings PortNumber() = default; ~PortNumber() override = default; - bool Check( manage::SettingsFileDataType const& line ) const override; + bool Check( general::SettingsFileDataType const& line ) const override; }; } diff --git a/src/checker/errors/settings/server.cpp b/src/checker/errors/settings/server.cpp index d25bc9a..ecddf9a 100644 --- a/src/checker/errors/settings/server.cpp +++ b/src/checker/errors/settings/server.cpp @@ -8,7 +8,7 @@ namespace smtp::checker::errors::settings // //Public methods // - bool Server::Check( manage::SettingsFileDataType const& line ) const + bool Server::Check( general::SettingsFileDataType const& line ) const { static const std::string SERVER_FIELD = "host"; diff --git a/src/checker/errors/settings/server.hpp b/src/checker/errors/settings/server.hpp index 53e6170..31a7758 100644 --- a/src/checker/errors/settings/server.hpp +++ b/src/checker/errors/settings/server.hpp @@ -10,7 +10,7 @@ namespace smtp::checker::errors::settings Server() = default; ~Server() override = default; - bool Check( manage::SettingsFileDataType const& line ) const override; + bool Check( general::SettingsFileDataType const& line ) const override; private: bool IsNormalName( std::string const& line ) const; bool IsIpName( std::string const& line ) const; diff --git a/src/checker/errors/types/isettings_error.hpp b/src/checker/errors/types/isettings_error.hpp index 6355d79..8c9d25a 100644 --- a/src/checker/errors/types/isettings_error.hpp +++ b/src/checker/errors/types/isettings_error.hpp @@ -6,7 +6,7 @@ #include -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::checker::errors::types { @@ -21,7 +21,7 @@ namespace smtp::checker::errors::types static const std::string METHOD_NAME = "Check settings"; return METHOD_NAME; } - virtual bool Check( manage::SettingsFileDataType const& line ) const = 0; + virtual bool Check( general::SettingsFileDataType const& line ) const = 0; }; using IErrorSettingsPtr = std::shared_ptr; } diff --git a/src/converter/file_to_string.cpp b/src/converter/file_to_string.cpp index 3d8860e..8d136f6 100644 --- a/src/converter/file_to_string.cpp +++ b/src/converter/file_to_string.cpp @@ -3,7 +3,7 @@ namespace smtp::converter { - std::list FileToString::Convert( manage::SettingsFileDataType const& from) const + std::list FileToString::Convert( general::SettingsFileDataType const& from) const { std::list result; for(auto const& settings_line : from) diff --git a/src/converter/file_to_string.hpp b/src/converter/file_to_string.hpp index 14e1633..9b7b357 100644 --- a/src/converter/file_to_string.hpp +++ b/src/converter/file_to_string.hpp @@ -1,6 +1,6 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::converter { @@ -10,7 +10,7 @@ namespace smtp::converter FileToString() = default; ~FileToString() = default; - std::list Convert( manage::SettingsFileDataType const& from ) const; + std::list Convert( general::SettingsFileDataType const& from ) const; private: std::string BuildParam( std::pair < std::string, std::string > const& data ) const; }; diff --git a/src/converter/file_to_struct.cpp b/src/converter/file_to_struct.cpp index 4c4bec8..4cb588c 100644 --- a/src/converter/file_to_struct.cpp +++ b/src/converter/file_to_struct.cpp @@ -2,9 +2,9 @@ namespace smtp::converter { - manage::SettingsFields FileToStruct::Convert( manage::SettingsFileDataType const& from ) const + general::SettingsFields FileToStruct::Convert( general::SettingsFileDataType const& from ) const { - manage::SettingsFields result; + general::SettingsFields result; ApplyAuth( result, from ); ApplySsl( result, from ); @@ -16,21 +16,21 @@ namespace smtp::converter return result; } - void FileToStruct::ApplyAuth( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplyAuth( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "is_need_auth"; ApplyBool(from, FIELD, result.is_need_auth); } - void FileToStruct::ApplySsl( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplySsl( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "is_need_ssl"; ApplyBool(from, FIELD, result.is_need_ssl); } - void FileToStruct::ApplyBool( manage::SettingsFileDataType const& from, std::string const& search_field, bool& field ) const + void FileToStruct::ApplyBool( general::SettingsFileDataType const& from, std::string const& search_field, bool& field ) const { static const std::string TRUE_AS_STRING = "true"; static const std::string FALSE_AS_STRING = "false"; @@ -47,35 +47,35 @@ namespace smtp::converter field = (find->second == TRUE_AS_STRING); } - void FileToStruct::ApplyUsername( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplyUsername( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "username"; ApplyString( from, FIELD, result.username ); } - void FileToStruct::ApplyPassword( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplyPassword( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "password"; ApplyString( from, FIELD, result.password ); } - void FileToStruct::ApplyHost( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplyHost( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "host"; ApplyString( from, FIELD, result.host ); } - void FileToStruct::ApplyPort( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + void FileToStruct::ApplyPort( general::SettingsFields &result, general::SettingsFileDataType const& from ) const { static const std::string FIELD = "port"; ApplyString(from, FIELD, result.port); } - void FileToStruct::ApplyString( manage::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const + void FileToStruct::ApplyString( general::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const { auto find = from.find( search_field ); if( find == from.end() ) diff --git a/src/converter/file_to_struct.hpp b/src/converter/file_to_struct.hpp index 1eb7fce..4375ce2 100644 --- a/src/converter/file_to_struct.hpp +++ b/src/converter/file_to_struct.hpp @@ -3,7 +3,7 @@ #include #include -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::converter { @@ -13,17 +13,17 @@ namespace smtp::converter FileToStruct() = default; ~FileToStruct() = default; - manage::SettingsFields Convert( manage::SettingsFileDataType const& from ) const; + general::SettingsFields Convert( general::SettingsFileDataType const& from ) const; private: - void ApplyAuth( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplySsl( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplyBool( manage::SettingsFileDataType const& from, std::string const& search_field, bool& field ) const; + void ApplyAuth( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplySsl( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplyBool( general::SettingsFileDataType const& from, std::string const& search_field, bool& field ) const; - void ApplyUsername( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplyPassword( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplyHost( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplyPort( manage::SettingsFields& result, manage::SettingsFileDataType const& from ) const; - void ApplyString( manage::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const; + void ApplyUsername( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplyPassword( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplyHost( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplyPort( general::SettingsFields& result, general::SettingsFileDataType const& from ) const; + void ApplyString( general::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const; }; } diff --git a/src/converter/struct_to_file.cpp b/src/converter/struct_to_file.cpp index f21cffb..6e28ead 100644 --- a/src/converter/struct_to_file.cpp +++ b/src/converter/struct_to_file.cpp @@ -3,9 +3,9 @@ namespace smtp::converter { - manage::SettingsFileDataType StructToFile::Convert( manage::SettingsFields const& from ) const + general::SettingsFileDataType StructToFile::Convert( general::SettingsFields const& from ) const { - manage::SettingsFileDataType result; + general::SettingsFileDataType result; ApplyPort( from, result ); ApplyHost( from, result ); @@ -17,7 +17,7 @@ namespace smtp::converter return result; } - void StructToFile::ApplyAuth( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplyAuth( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "is_need_auth"; static const std::string TRUE_AS_STRING = "true"; @@ -26,7 +26,7 @@ namespace smtp::converter from.is_need_auth ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); } - void StructToFile::ApplySsl( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplySsl( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "is_need_ssl"; static const std::string TRUE_AS_STRING = "true"; @@ -35,28 +35,28 @@ namespace smtp::converter from.is_need_ssl ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); } - void StructToFile::ApplyUsername( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplyUsername( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "username"; result.insert({FIELD, from.username}); } - void StructToFile::ApplyPassword( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplyPassword( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "password"; result.insert({FIELD, from.password}); } - void StructToFile::ApplyHost( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplyHost( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "host"; result.insert({FIELD, from.host}); } - void StructToFile::ApplyPort( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + void StructToFile::ApplyPort( general::SettingsFields const& from, general::SettingsFileDataType& result ) const { static const std::string FIELD = "port"; diff --git a/src/converter/struct_to_file.hpp b/src/converter/struct_to_file.hpp index 67a9f96..641e693 100644 --- a/src/converter/struct_to_file.hpp +++ b/src/converter/struct_to_file.hpp @@ -1,6 +1,6 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::converter { @@ -10,15 +10,15 @@ namespace smtp::converter StructToFile() = default; ~StructToFile() = default; - manage::SettingsFileDataType Convert( manage::SettingsFields const& from ) const; + general::SettingsFileDataType Convert( general::SettingsFields const& from ) const; private: - void ApplyAuth( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; - void ApplySsl( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; + void ApplyAuth( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; + void ApplySsl( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; - void ApplyUsername( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; - void ApplyPassword( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; - void ApplyHost( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; - void ApplyPort( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const; + void ApplyUsername( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; + void ApplyPassword( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; + void ApplyHost( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; + void ApplyPort( general::SettingsFields const& from, general::SettingsFileDataType& result ) const; }; } diff --git a/src/converter/struct_to_string.cpp b/src/converter/struct_to_string.cpp index c86a6c8..ea3df67 100644 --- a/src/converter/struct_to_string.cpp +++ b/src/converter/struct_to_string.cpp @@ -2,7 +2,7 @@ namespace smtp::converter { - std::string StructToString::Convert( manage::SettingsFields const& from ) const + std::string StructToString::Convert( general::SettingsFields const& from ) const { std::string result; @@ -16,42 +16,42 @@ namespace smtp::converter return result; } - void StructToString::ApplyAuth( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplyAuth( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "is_need_auth"; result += GetBoolParam( FIELD, from.is_need_auth); } - void StructToString::ApplySsl( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplySsl( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "is_need_ssl"; result += GetBoolParam( FIELD, from.is_need_ssl); } - void StructToString::ApplyUsername( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplyUsername( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "username"; result += GetStringParam( FIELD, from.username ); } - void StructToString::ApplyPassword( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplyPassword( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "password"; result += GetStringParam( FIELD, from.password ); } - void StructToString::ApplyHost( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplyHost( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "host"; result += GetStringParam( FIELD, from.host ); } - void StructToString::ApplyPort( manage::SettingsFields const& from, std::string& result ) const + void StructToString::ApplyPort( general::SettingsFields const& from, std::string& result ) const { static const std::string FIELD = "port"; diff --git a/src/converter/struct_to_string.hpp b/src/converter/struct_to_string.hpp index 0a08327..9d6b418 100644 --- a/src/converter/struct_to_string.hpp +++ b/src/converter/struct_to_string.hpp @@ -3,7 +3,7 @@ #include #include -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::converter { @@ -13,15 +13,15 @@ namespace smtp::converter StructToString() = default; ~StructToString() = default; - std::string Convert( manage::SettingsFields const& from ) const; + std::string Convert( general::SettingsFields const& from ) const; private: - void ApplyAuth( manage::SettingsFields const& from, std::string& result ) const; - void ApplySsl( manage::SettingsFields const& from, std::string& result ) const; + void ApplyAuth( general::SettingsFields const& from, std::string& result ) const; + void ApplySsl( general::SettingsFields const& from, std::string& result ) const; - void ApplyUsername( manage::SettingsFields const& from, std::string& result ) const; - void ApplyPassword( manage::SettingsFields const& from, std::string& result ) const; - void ApplyHost( manage::SettingsFields const& from, std::string& result ) const; - void ApplyPort( manage::SettingsFields const& from, std::string& result ) const; + void ApplyUsername( general::SettingsFields const& from, std::string& result ) const; + void ApplyPassword( general::SettingsFields const& from, std::string& result ) const; + void ApplyHost( general::SettingsFields const& from, std::string& result ) const; + void ApplyPort( general::SettingsFields const& from, std::string& result ) const; std::string GetStringParam( std::string const& field, std::string const& param ) const; std::string GetBoolParam( std::string const& field, bool param ) const; diff --git a/src/file/errors/not_create.cpp b/src/file/errors/not_create.cpp new file mode 100644 index 0000000..54995ae --- /dev/null +++ b/src/file/errors/not_create.cpp @@ -0,0 +1,25 @@ +#include + +#include "not_create.hpp" +#include "converter/struct_to_file.hpp" +#include "converter/file_to_string.hpp" +#include "logger/logger_set.hpp" + +namespace smtp::file::errors +{ + NotCreatedFile::NotCreatedFile( std::string const& path ) + : mPath( path ) + { + + } + + void NotCreatedFile::Process( types::SettingsType settings_type ) const + { + std::fstream file( mPath,std::fstream::out ); + file.close(); + settings_type == types::SettingsType::Server ? + logger::LoggerSet::GetInstance()->LogOk("Created new settings for server"): + logger::LoggerSet::GetInstance()->LogOk("Created new settings for recipients"); + } + +} diff --git a/src/file/errors/not_create.hpp b/src/file/errors/not_create.hpp new file mode 100644 index 0000000..05046de --- /dev/null +++ b/src/file/errors/not_create.hpp @@ -0,0 +1,18 @@ +#pragma once + +#include "types/ierror.hpp" +#include "general/struct.hpp" + +namespace smtp::file::errors +{ + class NotCreatedFile : public types::IError + { + public: + explicit NotCreatedFile( std::string const& path ); + ~NotCreatedFile() override = default; + + void Process( types::SettingsType settings_type ) const override; + private: + std::string mPath; + }; +} diff --git a/src/file/errors/registrator.cpp b/src/file/errors/registrator.cpp new file mode 100644 index 0000000..9389179 --- /dev/null +++ b/src/file/errors/registrator.cpp @@ -0,0 +1,32 @@ +#include + +#include "registrator.hpp" +#include "logger/logger_set.hpp" + +namespace smtp::file::errors +{ + + void Registrator::Add( types::IErrorPtr const& error, int error_code ) + { + mErrorSet.insert( {error_code, error} ); + } + + void Registrator::Process( types::SettingsType settings_type ) const + { + auto find = mErrorSet.find(errno); + if( find == mErrorSet.end() ) + { + DefaultProcess(errno); + } + find->second->Process( settings_type ); + } + + void Registrator::DefaultProcess(int error_code) const + { + static const std::string METHOD = "Open file"; + + std::string message = "Unknown error - " + std::to_string(error_code); + logger::LoggerSet::GetInstance()->LogError( METHOD, message ); + } + +} diff --git a/src/file/errors/registrator.hpp b/src/file/errors/registrator.hpp new file mode 100644 index 0000000..381db2f --- /dev/null +++ b/src/file/errors/registrator.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +#include "types/ierror.hpp" + +namespace smtp::file::errors +{ + class Registrator + { + public: + Registrator() = default; + ~Registrator() = default; + + void Add( types::IErrorPtr const& error, int error_code ); + void Process( types::SettingsType settings_type ) const; + private: + void DefaultProcess( int error_code ) const; + std::map< int, types::IErrorPtr > mErrorSet; + }; +} diff --git a/src/file/errors/types/ierror.hpp b/src/file/errors/types/ierror.hpp new file mode 100644 index 0000000..6a47ddb --- /dev/null +++ b/src/file/errors/types/ierror.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +namespace smtp::file::errors::types +{ + enum class SettingsType + { + Server, + Mail + }; + + class IError + { + public: + virtual ~IError() = default; + + virtual void Process( SettingsType settings_type ) const = 0; + }; + using IErrorPtr = std::shared_ptr; +} diff --git a/src/file/mail/checker_decorator.cpp b/src/file/mail/checker_decorator.cpp index 54da9da..3539bc7 100644 --- a/src/file/mail/checker_decorator.cpp +++ b/src/file/mail/checker_decorator.cpp @@ -17,9 +17,9 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet CheckerDecorator::Read() const + general::MailsSet CheckerDecorator::Read() const { - manage::MailsSet result; + general::MailsSet result; if( !mBase ) { @@ -38,9 +38,9 @@ namespace smtp::file::mail return result; } - bool CheckerDecorator::Write( manage::MailsSet const& data ) const + bool CheckerDecorator::Write( general::MailsSet const& data ) const { - manage::MailsSet result; + general::MailsSet result; for( const auto& line : data ) { diff --git a/src/file/mail/checker_decorator.hpp b/src/file/mail/checker_decorator.hpp index ed87fc5..612c07a 100644 --- a/src/file/mail/checker_decorator.hpp +++ b/src/file/mail/checker_decorator.hpp @@ -1,23 +1,23 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "checker/registrator_mails.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::mail { - class CheckerDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class CheckerDecorator : public general::IDecorator< types::IFileManipulator> { public: explicit CheckerDecorator( checker::RegistratorMails const& registrator_errors ); ~CheckerDecorator() override = default; - manage::MailsSet Read() const override; - bool Write( manage::MailsSet const& data ) const override; + general::MailsSet Read() const override; + bool Write( general::MailsSet const& data ) const override; private: - manage::MailsSet ReadFile( std::ifstream& mail_file ) const; - bool WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const; + general::MailsSet ReadFile( std::ifstream& mail_file ) const; + bool WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const; checker::RegistratorMails mRegistratorErrors; }; diff --git a/src/file/mail/file_decorator.cpp b/src/file/mail/file_decorator.cpp index 82111ac..76da5a8 100644 --- a/src/file/mail/file_decorator.cpp +++ b/src/file/mail/file_decorator.cpp @@ -10,8 +10,9 @@ namespace smtp::file::mail //Constructors // - FileDecorator::FileDecorator( std::string const& path_file ) + FileDecorator::FileDecorator( std::string const& path_file, file::errors::Registrator const& registrator_file_errors ) : mPathFile( path_file ) + , mRegistratorFileErrors( registrator_file_errors ) { } @@ -19,14 +20,14 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet FileDecorator::Read() const + general::MailsSet FileDecorator::Read() const { static const std::string METHOD_NAME = "Read mails"; std::ifstream mail_file{ mPathFile, std::fstream::in }; if ( !mail_file.is_open() ) { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); + mRegistratorFileErrors.Process( errors::types::SettingsType::Mail ); return {}; } @@ -36,7 +37,7 @@ namespace smtp::file::mail return result; } - bool FileDecorator::Write( manage::MailsSet const& data ) const + bool FileDecorator::Write( general::MailsSet const& data ) const { static const std::string METHOD_NAME = "Write mails"; @@ -59,10 +60,10 @@ namespace smtp::file::mail //Private methods // - manage::MailsSet FileDecorator::ReadFile( std::ifstream& mail_file ) const + general::MailsSet FileDecorator::ReadFile( std::ifstream& mail_file ) const { std::string line{}; - manage::MailsSet result; + general::MailsSet result; while ( std::getline( mail_file, line ) ) { @@ -71,7 +72,7 @@ namespace smtp::file::mail return result; } - bool FileDecorator::WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const + bool FileDecorator::WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const { bool result = true; diff --git a/src/file/mail/file_decorator.hpp b/src/file/mail/file_decorator.hpp index 21dab10..a1767e6 100644 --- a/src/file/mail/file_decorator.hpp +++ b/src/file/mail/file_decorator.hpp @@ -1,24 +1,26 @@ #pragma once -#include "management/general.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/struct.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::file::mail { - class FileDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class FileDecorator : public general::IDecorator< types::IFileManipulator> { public: - explicit FileDecorator( std::string const& path_file ); + explicit FileDecorator( std::string const& path_file, file::errors::Registrator const& registrator_file_errors ); ~FileDecorator() override = default; - manage::MailsSet Read() const override; - bool Write( manage::MailsSet const& data ) const override; + general::MailsSet Read() const override; + bool Write( general::MailsSet const& data ) const override; private: - manage::MailsSet ReadFile( std::ifstream& mail_file ) const; - bool WriteFile( std::ofstream& mail_file, manage::MailsSet const& data ) const; + general::MailsSet ReadFile( std::ifstream& mail_file ) const; + bool WriteFile( std::ofstream& mail_file, general::MailsSet const& data ) const; std::string mPathFile; + file::errors::Registrator mRegistratorFileErrors; }; } diff --git a/src/file/mail/sort_decorator.cpp b/src/file/mail/sort_decorator.cpp index dca464f..ebfde97 100644 --- a/src/file/mail/sort_decorator.cpp +++ b/src/file/mail/sort_decorator.cpp @@ -7,9 +7,9 @@ namespace smtp::file::mail //Public methods // - manage::MailsSet SortDecorator::Read() const + general::MailsSet SortDecorator::Read() const { - manage::MailsSet result; + general::MailsSet result; if(!mBase) { @@ -22,7 +22,7 @@ namespace smtp::file::mail return result; } - bool SortDecorator::Write( manage::MailsSet const& data ) const + bool SortDecorator::Write( general::MailsSet const& data ) const { if( mBase ) { diff --git a/src/file/mail/sort_decorator.hpp b/src/file/mail/sort_decorator.hpp index 80edf1d..142159b 100644 --- a/src/file/mail/sort_decorator.hpp +++ b/src/file/mail/sort_decorator.hpp @@ -1,19 +1,19 @@ #pragma once -#include "management/general.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/struct.hpp" +#include "general/idecorator.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::mail { - class SortDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class SortDecorator : public general::IDecorator< types::IFileManipulator> { public: SortDecorator() = default; ~SortDecorator() = default; - manage::MailsSet Read() const; - bool Write( manage::MailsSet const& data ) const; + general::MailsSet Read() const; + bool Write( general::MailsSet const& data ) const; }; } diff --git a/src/file/mail/types/ifile_manipulator.hpp b/src/file/mail/types/ifile_manipulator.hpp index 62965e7..0841c16 100644 --- a/src/file/mail/types/ifile_manipulator.hpp +++ b/src/file/mail/types/ifile_manipulator.hpp @@ -2,7 +2,7 @@ #include -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::file::mail::types { @@ -11,8 +11,8 @@ namespace smtp::file::mail::types public: virtual ~IFileManipulator() = default; - virtual manage::MailsSet Read() const = 0; - virtual bool Write( manage::MailsSet const& data ) const = 0; + virtual general::MailsSet Read() const = 0; + virtual bool Write( general::MailsSet const& data ) const = 0; }; using IFileManipulatorPtr = std::shared_ptr; } diff --git a/src/file/settings/checker_decorator.cpp b/src/file/settings/checker_decorator.cpp index ef560ad..a7ccda1 100644 --- a/src/file/settings/checker_decorator.cpp +++ b/src/file/settings/checker_decorator.cpp @@ -16,18 +16,22 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFileDataType CheckerDecorator::Read() const + general::SettingsFileDataType CheckerDecorator::Read() const { - manage::SettingsFileDataType result; + general::SettingsFileDataType result; if(!mBase) { return result; } result = mBase->Read(); - return mRegistratorErrors.Check( result ) ? result : manage::SettingsFileDataType{}; + if(result.empty()) + { + return result; + } + return mRegistratorErrors.Check( result ) ? result : general::SettingsFileDataType{}; } - bool CheckerDecorator::Write( manage::SettingsFileDataType const& settings_fields ) const + bool CheckerDecorator::Write( general::SettingsFileDataType const& settings_fields ) const { if( !mBase ) { diff --git a/src/file/settings/checker_decorator.hpp b/src/file/settings/checker_decorator.hpp index ecaba5a..c596fb6 100644 --- a/src/file/settings/checker_decorator.hpp +++ b/src/file/settings/checker_decorator.hpp @@ -1,20 +1,20 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "checker/registrator_settings.hpp" #include "types/ifile_manipulator.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" namespace smtp::file::settings { - class CheckerDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class CheckerDecorator : public general::IDecorator< types::IFileManipulator> { public: explicit CheckerDecorator( checker::RegistratorSettings const& registrator_errors ); ~CheckerDecorator() = default; - manage::SettingsFileDataType Read() const override; - bool Write( manage::SettingsFileDataType const& data ) const override; + general::SettingsFileDataType Read() const override; + bool Write( general::SettingsFileDataType const& data ) const override; private: checker::RegistratorSettings mRegistratorErrors; }; diff --git a/src/file/settings/file_decorator.cpp b/src/file/settings/file_decorator.cpp index 38b42ce..1b05f72 100644 --- a/src/file/settings/file_decorator.cpp +++ b/src/file/settings/file_decorator.cpp @@ -12,8 +12,9 @@ namespace smtp::file::settings //Constructors // - FileDecorator::FileDecorator( std::string const& path_file ) + FileDecorator::FileDecorator( std::string const& path_file, errors::Registrator const& registrator_errors ) : mPathFile( path_file ) + , mRegistratorErrors( registrator_errors ) { } @@ -22,14 +23,14 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFileDataType FileDecorator::Read() const + general::SettingsFileDataType FileDecorator::Read() const { static const std::string METHOD_NAME = "Read settings"; std::ifstream settings_file{mPathFile, std::fstream::in}; if( !settings_file.is_open() ) { - logger::LoggerSet::GetInstance()->LogError( METHOD_NAME, "Unable to open file to read " + mPathFile ); + mRegistratorErrors.Process( errors::types::SettingsType::Server ); return {}; } auto result = GetDataFromFile( settings_file ); @@ -38,7 +39,7 @@ namespace smtp::file::settings return result; } - bool FileDecorator::Write( manage::SettingsFileDataType const& data ) const + bool FileDecorator::Write( general::SettingsFileDataType const& data ) const { static const std::string METHOD_NAME = "Write settings"; @@ -61,10 +62,10 @@ namespace smtp::file::settings //Private methods // - manage::SettingsFileDataType FileDecorator::GetDataFromFile( std::ifstream& settings_file ) const + general::SettingsFileDataType FileDecorator::GetDataFromFile( std::ifstream& settings_file ) const { std::string line{}; - manage::SettingsFileDataType result; + general::SettingsFileDataType result; parser::Settings parser; while( std::getline( settings_file, line )) diff --git a/src/file/settings/file_decorator.hpp b/src/file/settings/file_decorator.hpp index 5896aed..93c8c20 100644 --- a/src/file/settings/file_decorator.hpp +++ b/src/file/settings/file_decorator.hpp @@ -1,22 +1,24 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "types/ifile_manipulator.hpp" -#include "message/builder/types/idecorator.hpp" +#include "general/idecorator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::file::settings { - class FileDecorator : public smtp::message::builder::types::IDecorator< types::IFileManipulator> + class FileDecorator : public general::IDecorator< types::IFileManipulator> { public: - explicit FileDecorator( std::string const& path_file ); + explicit FileDecorator( std::string const& path_file, errors::Registrator const& registrator_errors ); ~FileDecorator() = default; - manage::SettingsFileDataType Read() const override; - bool Write( manage::SettingsFileDataType const& data ) const override; + general::SettingsFileDataType Read() const override; + bool Write( general::SettingsFileDataType const& data ) const override; private: - manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; + general::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; std::string mPathFile; + errors::Registrator mRegistratorErrors; }; } diff --git a/src/file/settings/settings.cpp b/src/file/settings/settings.cpp index 48232e6..0815f11 100644 --- a/src/file/settings/settings.cpp +++ b/src/file/settings/settings.cpp @@ -17,13 +17,13 @@ namespace smtp::file::settings //Public methods // - manage::SettingsFields Settings::Read() const + general::SettingsFields Settings::Read() const { auto parsed_store = mFileManipulator->Read(); return converter::FileToStruct{}.Convert( parsed_store ); } - bool Settings::Write( manage::SettingsFields const& settings_fields ) const + bool Settings::Write( general::SettingsFields const& settings_fields ) const { auto parsed_data = converter::StructToFile{}.Convert( settings_fields ); return mFileManipulator->Write( parsed_data ); diff --git a/src/file/settings/settings.hpp b/src/file/settings/settings.hpp index 60634fe..9e05f24 100644 --- a/src/file/settings/settings.hpp +++ b/src/file/settings/settings.hpp @@ -1,6 +1,6 @@ #pragma once -#include "management/general.hpp" +#include "general/struct.hpp" #include "types/ifile_manipulator.hpp" namespace smtp::file::settings @@ -11,12 +11,12 @@ namespace smtp::file::settings explicit Settings( types::IFileManipulatorPtr const& file_manipulator ); ~Settings() = default; - manage::SettingsFields Read() const; - bool Write( manage::SettingsFields const& settings_fields ) const; + general::SettingsFields Read() const; + bool Write( general::SettingsFields const& settings_fields ) const; private: - manage::SettingsFileDataType GetParsedStore() const; - manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; - bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; + general::SettingsFileDataType GetParsedStore() const; + general::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; + bool SetParsedData( general::SettingsFileDataType const& parsed_data ) const; std::string BuildParam( std::pair < std::string, std::string > const& data ) const; std::string mPathFile; diff --git a/src/file/settings/types/ifile_manipulator.hpp b/src/file/settings/types/ifile_manipulator.hpp index 6de0bf3..312aece 100644 --- a/src/file/settings/types/ifile_manipulator.hpp +++ b/src/file/settings/types/ifile_manipulator.hpp @@ -2,7 +2,7 @@ #include -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::file::settings::types { @@ -11,8 +11,8 @@ namespace smtp::file::settings::types public: virtual ~IFileManipulator() = default; - virtual manage::SettingsFileDataType Read() const = 0; - virtual bool Write( manage::SettingsFileDataType const& data ) const = 0; + virtual general::SettingsFileDataType Read() const = 0; + virtual bool Write( general::SettingsFileDataType const& data ) const = 0; }; using IFileManipulatorPtr = std::shared_ptr; } diff --git a/src/general/idecorator.hpp b/src/general/idecorator.hpp new file mode 100644 index 0000000..53efda5 --- /dev/null +++ b/src/general/idecorator.hpp @@ -0,0 +1,82 @@ +#pragma once + +#include + +namespace smtp::general +{ + +/** + * @brief Базовый интерфейс описания декоратора + * @details См. https://refactoring.guru/ru/design-patterns/decorator + * @tparam T Тип декорируемого класса, T должен обладать возможностью наследования (в том числе виртуальный деструктор) + */ + template < typename T, typename TPointerType = std::shared_ptr > class IDecorator : public T + { + public: + using PointerType = TPointerType; + using Type = IDecorator; + + ~IDecorator() override = default; + + /** + * @brief Установить указатель на декорируемый класс + * @details По возможности используйте метод Apply() как наиболее универсальный + * @param base Указатель на декорируемый класс + */ + void SetBase( PointerType const& base ) noexcept + { + mBase = base; + } + + void SetBase( PointerType&& base ) noexcept + { + mBase = std::move( base ); + } + + /** + * @brief Установить указатель на декорируемый класс (цепочка обязанностей) + * @details См. https://refactoring.guru/ru/design-patterns/chain-of-responsibility/cpp/example + * @details Цепь вызовов: декоратор1 -> декоратор2 -> базовый класс + * @param base_or_decorator Указатель на декорируемый класс или целевой декоратор + */ + Type& Apply( PointerType const& base_or_decorator ) noexcept + { + if( !base_or_decorator ) + { + return *this; + } + + SetBase( base_or_decorator ); + return GetApplyResult(); + } + + Type& Apply( PointerType&& base_or_decorator ) noexcept + { + if( !base_or_decorator ) + { + return *this; + } + + SetBase( std::move( base_or_decorator ) ); + return GetApplyResult(); + } + + private: + Type& GetApplyResult() noexcept + { + auto as_decorator = dynamic_cast< Type * >( mBase.get() ); + if( as_decorator ) + { + return *as_decorator; + } + + return *this; + } + + protected: + PointerType mBase; + }; + + template < typename T, typename TDeleter = std::default_delete > using IDecoratorUnique = IDecorator >; + +} // namespace sbis::devices::generic::types diff --git a/src/general/struct.hpp b/src/general/struct.hpp new file mode 100644 index 0000000..db61e68 --- /dev/null +++ b/src/general/struct.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include +#include +#include + +namespace smtp::general +{ + 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/logger/journal.cpp b/src/logger/journal.cpp index ba002b0..5e4f36d 100644 --- a/src/logger/journal.cpp +++ b/src/logger/journal.cpp @@ -6,6 +6,11 @@ namespace smtp::logger { void Journal::LogError( std::string const& method, std::string const& message ) const { - std::cout << message << std::endl; - } -} \ No newline at end of file + std::cout << "Error in method: " + method + " with message " + message << std::endl; + } + + void Journal::LogOk( std::string const& message ) const + { + std::cout << message << std::endl; + } +} diff --git a/src/logger/journal.hpp b/src/logger/journal.hpp index 0f1e6bb..f28fbeb 100644 --- a/src/logger/journal.hpp +++ b/src/logger/journal.hpp @@ -12,6 +12,7 @@ namespace smtp::logger ~Journal() override = default; void LogError( std::string const& method, std::string const& message ) const override; + void LogOk( std::string const& message ) const override; }; } diff --git a/src/logger/logger_set.cpp b/src/logger/logger_set.cpp index d5d45a0..e46b6cc 100644 --- a/src/logger/logger_set.cpp +++ b/src/logger/logger_set.cpp @@ -38,8 +38,16 @@ namespace smtp::logger for( const auto& logger: mLogger ) { logger->LogError( method, message ); - } - } + } + } + + void LoggerSet::LogOk( std::string const& message ) + { + for( const auto& logger: mLogger ) + { + logger->LogOk( message ); + } + } } diff --git a/src/logger/logger_set.hpp b/src/logger/logger_set.hpp index e482042..c60779b 100644 --- a/src/logger/logger_set.hpp +++ b/src/logger/logger_set.hpp @@ -19,7 +19,9 @@ namespace smtp::logger LoggerSet( const LoggerSet& ) = delete; LoggerSet& operator=( LoggerSet& ) = delete; + static std::shared_ptr < LoggerSet > GetInstance(); + void LogError( std::string const& method, std::string const& message ); - static std::shared_ptr < LoggerSet > GetInstance(); + void LogOk( std::string const& message ); }; } diff --git a/src/logger/phosphor.cpp b/src/logger/phosphor.cpp index f3575c4..a5ebe04 100644 --- a/src/logger/phosphor.cpp +++ b/src/logger/phosphor.cpp @@ -10,4 +10,10 @@ namespace smtp::logger const auto* msg = "OpenBMC.0.1.SMTPError"; lg2::error("SMTP error", "REDFISH_MESSAGE_ID", msg, "REDFISH_MESSAGE_ARGS", join_message); } -} \ No newline at end of file + + void Phosphor::LogOk( std::string const& message ) const + { + const auto* msg = "OpenBMC.0.1.SMTPOk"; + lg2::error("SMTP event", "REDFISH_MESSAGE_ID", msg, "REDFISH_MESSAGE_ARGS", message); + } +} diff --git a/src/logger/phosphor.hpp b/src/logger/phosphor.hpp index f40ddf2..fdbce0c 100644 --- a/src/logger/phosphor.hpp +++ b/src/logger/phosphor.hpp @@ -12,5 +12,6 @@ namespace smtp::logger ~Phosphor() override = default; void LogError( std::string const& method, std::string const& message ) const override; + void LogOk( std::string const& message ) const override; }; } diff --git a/src/logger/types/ilogger.hpp b/src/logger/types/ilogger.hpp index 5dce1d5..7f2a5e5 100644 --- a/src/logger/types/ilogger.hpp +++ b/src/logger/types/ilogger.hpp @@ -10,7 +10,8 @@ namespace smtp::logger::types virtual ~ILogger() = default; virtual void LogError( std::string const& method, std::string const& message ) const = 0; + virtual void LogOk( std::string const& message ) const = 0; }; using ILoggerPtr = std::shared_ptr < ILogger >; -} \ No newline at end of file +} diff --git a/src/management/builder/mail.cpp b/src/management/builder/mail.cpp index a96fd33..7a8aa42 100644 --- a/src/management/builder/mail.cpp +++ b/src/management/builder/mail.cpp @@ -7,6 +7,8 @@ #include "file/mail/checker_decorator.hpp" #include "file/mail/sort_decorator.hpp" +#include "file/errors/not_create.hpp" + namespace smtp::manage::builder { smtp::manage::Mail Mail::Build() const @@ -18,12 +20,20 @@ namespace smtp::manage::builder { static const std::string PATH = {"/var/lib/smtp/mails.txt"}; auto result = std::make_shared() ; - result->Apply(std::make_shared( BuildErrorRegistrator() )) - .Apply(std::make_shared( PATH )); + result->Apply(std::make_shared( BuildSettingsErrorRegistrator() )) + .Apply(std::make_shared( PATH, BuildFileErrorRegistrator(PATH) )); + return result; + } + + file::errors::Registrator Mail::BuildFileErrorRegistrator( std::string const& path ) const + { + file::errors::Registrator result; + auto not_created_file_error = std::make_shared(path); + result.Add(not_created_file_error, ENOENT); return result; } - checker::RegistratorMails Mail::BuildErrorRegistrator() const + checker::RegistratorMails Mail::BuildSettingsErrorRegistrator() const { checker::RegistratorMails result; result.Add( std::make_shared < checker::errors::mail::Empty >()); diff --git a/src/management/builder/mail.hpp b/src/management/builder/mail.hpp index 7cbb29d..ecd6de4 100644 --- a/src/management/builder/mail.hpp +++ b/src/management/builder/mail.hpp @@ -3,6 +3,7 @@ #include "management/mail.hpp" #include "checker/registrator_mails.hpp" #include "file/mail/types/ifile_manipulator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::manage::builder { @@ -15,7 +16,8 @@ namespace smtp::manage::builder smtp::manage::Mail Build() const; private: file::mail::types::IFileManipulatorPtr BuildFileManipulator() const; - checker::RegistratorMails BuildErrorRegistrator() const; + file::errors::Registrator BuildFileErrorRegistrator( std::string const& path ) const; + checker::RegistratorMails BuildSettingsErrorRegistrator() const; }; } diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp index b682c49..bf345e7 100644 --- a/src/management/builder/settings.cpp +++ b/src/management/builder/settings.cpp @@ -4,6 +4,7 @@ #include "file/settings/settings.hpp" #include "file/settings/checker_decorator.hpp" #include "file/settings/file_decorator.hpp" +#include "file/errors/not_create.hpp" namespace smtp::manage::builder { @@ -17,12 +18,20 @@ namespace smtp::manage::builder { static const std::string PATH = "/var/lib/smtp/settings.txt"; - auto result = std::make_shared(BuildErrorRegistrator()); - result->Apply(std::make_shared(PATH)); + auto result = std::make_shared(BuildSettingsErrorRegistrator()); + result->Apply(std::make_shared(PATH, BuildFileErrorRegistrator(PATH))); return result; } - checker::RegistratorSettings Settings::BuildErrorRegistrator() const + file::errors::Registrator Settings::BuildFileErrorRegistrator( std::string const& path ) const + { + file::errors::Registrator result; + auto not_created_file_error = std::make_shared(path); + result.Add(not_created_file_error, ENOENT); + return result; + } + + checker::RegistratorSettings Settings::BuildSettingsErrorRegistrator() const { checker::RegistratorSettings result; diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp index b7215e2..2cfbd5d 100644 --- a/src/management/builder/settings.hpp +++ b/src/management/builder/settings.hpp @@ -3,6 +3,7 @@ #include "management/settings.hpp" #include "checker/registrator_settings.hpp" #include "file/settings/types/ifile_manipulator.hpp" +#include "file/errors/registrator.hpp" namespace smtp::manage::builder { @@ -15,7 +16,8 @@ namespace smtp::manage::builder smtp::manage::Settings Build() const; private: file::settings::types::IFileManipulatorPtr BuildFileManipulator()const; - checker::RegistratorSettings BuildErrorRegistrator() const; + file::errors::Registrator BuildFileErrorRegistrator( std::string const& path ) const; + checker::RegistratorSettings BuildSettingsErrorRegistrator() const; }; } diff --git a/src/management/general.hpp b/src/management/general.hpp deleted file mode 100644 index ed1a789..0000000 --- a/src/management/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/management/mail.cpp b/src/management/mail.cpp index d569826..eefb666 100644 --- a/src/management/mail.cpp +++ b/src/management/mail.cpp @@ -19,19 +19,19 @@ namespace smtp::manage //Public methods // - MailsSet Mail::GetMailToSend() const + general::MailsSet Mail::GetMailToSend() const { return mMails; } - bool Mail::AddMailsToSend( MailsSet const& mails_to_add ) + bool Mail::AddMailsToSend( general::MailsSet const& mails_to_add ) { auto merged_mails = GetMergedMails( mails_to_add ); return RefreshMails( merged_mails ); } - bool Mail::DeleteMailToSend( MailsSet const& mail_to_delete ) + bool Mail::DeleteMailToSend( general::MailsSet const& mail_to_delete ) { auto mails_to_delete = GetItersectionMails( mail_to_delete ); @@ -44,7 +44,7 @@ namespace smtp::manage //Private methods // - MailsSet Mail::GetMergedMails( MailsSet const& mails_to_add ) + general::MailsSet Mail::GetMergedMails( general::MailsSet const& mails_to_add ) { auto result = mails_to_add; result.merge( mMails ); @@ -55,9 +55,9 @@ namespace smtp::manage return result; } - MailsSet Mail::GetItersectionMails( MailsSet const& mail_to_delete ) const + general::MailsSet Mail::GetItersectionMails( general::MailsSet const& mail_to_delete ) const { - MailsSet result; + general::MailsSet result; auto sorted_mail_to_send = mail_to_delete; sorted_mail_to_send.sort(); @@ -67,7 +67,7 @@ namespace smtp::manage return result; } - MailsSet Mail::GetMailsAfterDelete( MailsSet const& mails_to_delete ) + general::MailsSet Mail::GetMailsAfterDelete( general::MailsSet const& mails_to_delete ) { auto result = mMails; for( const auto& mail : mails_to_delete ) @@ -77,7 +77,7 @@ namespace smtp::manage return result; } - bool Mail::RefreshMails( MailsSet const& new_mails ) + bool Mail::RefreshMails( general::MailsSet const& new_mails ) { auto result = mFileReader->Write( new_mails ); mMails = mFileReader->Read(); diff --git a/src/management/mail.hpp b/src/management/mail.hpp index 813a5b4..94919e6 100644 --- a/src/management/mail.hpp +++ b/src/management/mail.hpp @@ -14,17 +14,17 @@ namespace smtp::manage explicit Mail( file::mail::types::IFileManipulatorPtr const& file_reader ); ~Mail() = default; - MailsSet GetMailToSend() const; - bool AddMailsToSend( MailsSet const& mails ); - bool DeleteMailToSend( MailsSet const& mail_to_delete ); + general::MailsSet GetMailToSend() const; + bool AddMailsToSend( general::MailsSet const& mails ); + bool DeleteMailToSend( general::MailsSet const& mail_to_delete ); private: - MailsSet GetMergedMails( MailsSet const& mails_to_add ); - MailsSet GetItersectionMails( MailsSet const& mail_to_delete ) const; - MailsSet GetMailsAfterDelete( MailsSet const& mails_to_delete ); - bool RefreshMails( MailsSet const& new_mails ); + general::MailsSet GetMergedMails( general::MailsSet const& mails_to_add ); + general::MailsSet GetItersectionMails( general::MailsSet const& mail_to_delete ) const; + general::MailsSet GetMailsAfterDelete( general::MailsSet const& mails_to_delete ); + bool RefreshMails( general::MailsSet const& new_mails ); file::mail::types::IFileManipulatorPtr mFileReader; - MailsSet mMails; + general::MailsSet mMails; }; } diff --git a/src/management/settings.cpp b/src/management/settings.cpp index 20c38cb..02392e0 100644 --- a/src/management/settings.cpp +++ b/src/management/settings.cpp @@ -9,10 +9,11 @@ namespace smtp::manage { } - bool Settings::SetSettings( manage::SettingsFields const& settings_fields ) + bool Settings::SetSettings( general::SettingsFields const& settings_fields ) { auto result = mFileReader.Write( settings_fields ); mSettingsFields = mFileReader.Read(); + return result; } diff --git a/src/management/settings.hpp b/src/management/settings.hpp index eb2aafb..2dbe1b6 100644 --- a/src/management/settings.hpp +++ b/src/management/settings.hpp @@ -3,7 +3,7 @@ #include #include "file/settings/settings.hpp" -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::manage { @@ -13,7 +13,7 @@ namespace smtp::manage explicit Settings( file::settings::Settings const& file_reader ); ~Settings() = default; - bool SetSettings( manage::SettingsFields const& settings_fields ); + bool SetSettings( general::SettingsFields const& settings_fields ); std::string GetSettings(); bool IsNeedAuth() const noexcept; @@ -25,6 +25,6 @@ namespace smtp::manage std::string GetPort() const; private: file::settings::Settings mFileReader; - manage::SettingsFields mSettingsFields; + general::SettingsFields mSettingsFields; }; } diff --git a/src/message/builder/cc.cpp b/src/message/builder/cc.cpp index 3cf3276..b186167 100644 --- a/src/message/builder/cc.cpp +++ b/src/message/builder/cc.cpp @@ -2,7 +2,7 @@ namespace smtp::message::builder { - Cc::Cc( manage::MailsSet const& mail_to ) + Cc::Cc( general::MailsSet const& mail_to ) : mMailTo( mail_to ) { diff --git a/src/message/builder/cc.hpp b/src/message/builder/cc.hpp index 9eee0a7..e990310 100644 --- a/src/message/builder/cc.hpp +++ b/src/message/builder/cc.hpp @@ -1,21 +1,21 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::message::builder { - class Cc : public types::IDecorator + class Cc : public general::IDecorator { public: - explicit Cc( manage::MailsSet const& mail_to ); + explicit Cc( general::MailsSet const& mail_to ); ~Cc() override = default; std::string Get() const override; private: bool IsFirstElement( std::string const& cc ) const; - manage::MailsSet const& mMailTo; + general::MailsSet const& mMailTo; }; } diff --git a/src/message/builder/date.hpp b/src/message/builder/date.hpp index 31908ac..38e9bc2 100644 --- a/src/message/builder/date.hpp +++ b/src/message/builder/date.hpp @@ -1,11 +1,11 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" namespace smtp::message::builder { - class Date : public types::IDecorator + class Date : public general::IDecorator { public: Date() = default; diff --git a/src/message/builder/from.hpp b/src/message/builder/from.hpp index d1f0b21..8f67c46 100644 --- a/src/message/builder/from.hpp +++ b/src/message/builder/from.hpp @@ -1,11 +1,11 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" namespace smtp::message::builder { - class From : public types::IDecorator + class From : public general::IDecorator { public: explicit From( std::string const& mail_to ); diff --git a/src/message/builder/mail_to.cpp b/src/message/builder/mail_to.cpp index 3ef7e0e..342829c 100644 --- a/src/message/builder/mail_to.cpp +++ b/src/message/builder/mail_to.cpp @@ -2,7 +2,7 @@ namespace smtp::message::builder { - MailTo::MailTo( manage::MailsSet const& mails ) + MailTo::MailTo( general::MailsSet const& mails ) : mMailTo( mails ) { diff --git a/src/message/builder/mail_to.hpp b/src/message/builder/mail_to.hpp index 626f210..7d2fa32 100644 --- a/src/message/builder/mail_to.hpp +++ b/src/message/builder/mail_to.hpp @@ -1,21 +1,21 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" -#include "management/general.hpp" +#include "general/struct.hpp" namespace smtp::message::builder { - class MailTo : public types::IDecorator + class MailTo : public general::IDecorator { public: - explicit MailTo( manage::MailsSet const& mails ); + explicit MailTo( general::MailsSet const& mails ); ~MailTo() override = default; std::string Get() const override; private: std::string GetFirstMail() const; - manage::MailsSet const& mMailTo; + general::MailsSet const& mMailTo; }; } diff --git a/src/message/builder/subject.hpp b/src/message/builder/subject.hpp index 8153bc8..22e5b3b 100644 --- a/src/message/builder/subject.hpp +++ b/src/message/builder/subject.hpp @@ -1,11 +1,11 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" namespace smtp::message::builder { - class Subject : public types::IDecorator + class Subject : public general::IDecorator { public: explicit Subject( std::string const& subject ); diff --git a/src/message/builder/text.hpp b/src/message/builder/text.hpp index 9715656..8deb14a 100644 --- a/src/message/builder/text.hpp +++ b/src/message/builder/text.hpp @@ -1,11 +1,11 @@ #pragma once -#include "types/idecorator.hpp" +#include "general/idecorator.hpp" #include "types/imessage_builder.hpp" namespace smtp::message::builder { - class Text : public types::IDecorator + class Text : public general::IDecorator { public: explicit Text( std::string const& text ); diff --git a/src/message/builder/types/idecorator.hpp b/src/message/builder/types/idecorator.hpp deleted file mode 100644 index 19284ac..0000000 --- a/src/message/builder/types/idecorator.hpp +++ /dev/null @@ -1,82 +0,0 @@ -#pragma once - -#include - -namespace smtp::message::builder::types -{ - -/** - * @brief Базовый интерфейс описания декоратора - * @details См. https://refactoring.guru/ru/design-patterns/decorator - * @tparam T Тип декорируемого класса, T должен обладать возможностью наследования (в том числе виртуальный деструктор) - */ - template < typename T, typename TPointerType = std::shared_ptr > class IDecorator : public T - { - public: - using PointerType = TPointerType; - using Type = IDecorator; - - ~IDecorator() override = default; - - /** - * @brief Установить указатель на декорируемый класс - * @details По возможности используйте метод Apply() как наиболее универсальный - * @param base Указатель на декорируемый класс - */ - void SetBase( PointerType const& base ) noexcept - { - mBase = base; - } - - void SetBase( PointerType&& base ) noexcept - { - mBase = std::move( base ); - } - - /** - * @brief Установить указатель на декорируемый класс (цепочка обязанностей) - * @details См. https://refactoring.guru/ru/design-patterns/chain-of-responsibility/cpp/example - * @details Цепь вызовов: декоратор1 -> декоратор2 -> базовый класс - * @param base_or_decorator Указатель на декорируемый класс или целевой декоратор - */ - Type& Apply( PointerType const& base_or_decorator ) noexcept - { - if( !base_or_decorator ) - { - return *this; - } - - SetBase( base_or_decorator ); - return GetApplyResult(); - } - - Type& Apply( PointerType&& base_or_decorator ) noexcept - { - if( !base_or_decorator ) - { - return *this; - } - - SetBase( std::move( base_or_decorator ) ); - return GetApplyResult(); - } - - private: - Type& GetApplyResult() noexcept - { - auto as_decorator = dynamic_cast< Type * >( mBase.get() ); - if( as_decorator ) - { - return *as_decorator; - } - - return *this; - } - - protected: - PointerType mBase; - }; - - template < typename T, typename TDeleter = std::default_delete > using IDecoratorUnique = IDecorator >; - -} // namespace sbis::devices::generic::types diff --git a/src/service/smtp.cpp b/src/service/smtp.cpp index 90e3acc..3c71161 100644 --- a/src/service/smtp.cpp +++ b/src/service/smtp.cpp @@ -8,7 +8,7 @@ namespace smtp::service // Smtp::Smtp( ConnectionPtr connection, manage::Settings const& settings, manage::Mail const& mail_to ) - :mSettingsStorage(settings), mMailTo(mail_to) + : mSettingsStorage(settings), mMailTo(mail_to) { CreateService( connection ); CreateMessengerInterface( connection ); @@ -102,7 +102,7 @@ namespace smtp::service mManagerMailInterface->register_method( SMTP_GET_MAILS_TO_SEND_METHOD_NAME, [this]() { return mMailTo.GetMailToSend();}); - mManagerMailInterface->register_method( SMTP_ADD_MAILS_TO_SEND_METHOD_NAME, [this](manage::MailsSet const& mails){ return mMailTo.AddMailsToSend(mails);}); - mManagerMailInterface->register_method( SMTP_DELETE_MAILS_METHOD_NAME, [this](manage::MailsSet const& mails_to_delete){ return mMailTo.DeleteMailToSend(mails_to_delete);}); + mManagerMailInterface->register_method( SMTP_ADD_MAILS_TO_SEND_METHOD_NAME, [this](general::MailsSet const& mails){ return mMailTo.AddMailsToSend(mails);}); + mManagerMailInterface->register_method( SMTP_DELETE_MAILS_METHOD_NAME, [this](general::MailsSet const& mails_to_delete){ return mMailTo.DeleteMailToSend(mails_to_delete);}); } } -- cgit v1.2.3