From 942b22b2ef5ba188ea077dd545c5f240a043cf6f Mon Sep 17 00:00:00 2001 From: eportnov Date: Tue, 13 Sep 2022 17:30:47 +0300 Subject: add new interfaces --- CMakeLists.txt | 17 +++--- src/converter/file.cpp | 87 ++++++++++++++++++++++++++++ src/converter/file.hpp | 30 ++++++++++ src/converter/full.cpp | 17 ++++++ src/converter/full.hpp | 23 ++++++++ src/converter/settings.cpp | 65 +++++++++++++++++++++ src/converter/settings.hpp | 28 +++++++++ src/converter/string.cpp | 82 ++++++++++++++++++++++++++ src/converter/string.hpp | 31 ++++++++++ src/file/converter/file.cpp | 87 ---------------------------- src/file/converter/file.hpp | 30 ---------- src/file/converter/full.cpp | 17 ------ src/file/converter/full.hpp | 25 -------- src/file/converter/settings.cpp | 65 --------------------- src/file/converter/settings.hpp | 30 ---------- src/file/mail.cpp | 11 ++-- src/file/settings.cpp | 6 +- src/managment/builder/mail.cpp | 2 +- src/managment/builder/settings.cpp | 2 +- src/managment/settings.cpp | 6 ++ src/managment/settings.hpp | 1 + src/service/smtp.cpp | 116 +++++++++++++++++++------------------ src/service/smtp.hpp | 14 ++++- 23 files changed, 464 insertions(+), 328 deletions(-) create mode 100644 src/converter/file.cpp create mode 100644 src/converter/file.hpp create mode 100644 src/converter/full.cpp create mode 100644 src/converter/full.hpp create mode 100644 src/converter/settings.cpp create mode 100644 src/converter/settings.hpp create mode 100644 src/converter/string.cpp create mode 100644 src/converter/string.hpp delete mode 100644 src/file/converter/file.cpp delete mode 100644 src/file/converter/file.hpp delete mode 100644 src/file/converter/full.cpp delete mode 100644 src/file/converter/full.hpp delete mode 100644 src/file/converter/settings.cpp delete mode 100644 src/file/converter/settings.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 12ba97a..e894480 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -82,7 +82,8 @@ set(MANAGMENT_DIR src/managment) set(FILE_DIR src/file) set(PARSER_DIR src/file/parser) set(MANAGER_BUILDER_DIR src/managment/builder) -set(FILE_CONVERTER_DIR src/file/converter) +set(CONVERTER_DIR src/converter) + set(SRC_FILES ${SRC_DIR}/main.cpp @@ -118,12 +119,14 @@ set(SRC_FILES ${FILE_DIR}/settings.hpp ${FILE_DIR}/settings.cpp - ${FILE_CONVERTER_DIR}/full.hpp - ${FILE_CONVERTER_DIR}/full.cpp - ${FILE_CONVERTER_DIR}/settings.hpp - ${FILE_CONVERTER_DIR}/settings.cpp - ${FILE_CONVERTER_DIR}/file.hpp - ${FILE_CONVERTER_DIR}/file.cpp + ${CONVERTER_DIR}/full.hpp + ${CONVERTER_DIR}/full.cpp + ${CONVERTER_DIR}/settings.hpp + ${CONVERTER_DIR}/settings.cpp + ${CONVERTER_DIR}/file.hpp + ${CONVERTER_DIR}/file.cpp + ${CONVERTER_DIR}/string.hpp + ${CONVERTER_DIR}/string.cpp ${PARSER_DIR}/settings.hpp ${PARSER_DIR}/settings.cpp diff --git a/src/converter/file.cpp b/src/converter/file.cpp new file mode 100644 index 0000000..203cca9 --- /dev/null +++ b/src/converter/file.cpp @@ -0,0 +1,87 @@ +#include "file.hpp" + +namespace smtp::converter +{ + manage::SettingsFields File::Convert( manage::SettingsFileDataType const& from ) const + { + manage::SettingsFields result; + + ApplyAuth( result, from ); + ApplySsl( result, from ); + ApplyUsername( result, from ); + ApplyPassword( result, from ); + ApplyHost( result, from ); + ApplyPort( result, from ); + + return result; + } + + void File::ApplyAuth( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "need_auth"; + + ApplyBool(from, FIELD, result.is_need_auth); + } + + void File::ApplySsl( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "need_ssl"; + + ApplyBool(from, FIELD, result.is_need_ssl); + } + + void File::ApplyBool( manage::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"; + + auto find = from.find( search_field ); + if( find == from.end() ) + { + return; + } + if( find->second != TRUE_AS_STRING && find->second != FALSE_AS_STRING ) + { + return; + } + field = ( find->second == TRUE_AS_STRING ) ? true : false; + } + + void File::ApplyUsername( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "username"; + + ApplyString( from, FIELD, result.username ); + } + + void File::ApplyPassword( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "password"; + + ApplyString( from, FIELD, result.password ); + } + + void File::ApplyHost( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "host"; + + ApplyString( from, FIELD, result.host ); + } + + void File::ApplyPort( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const + { + static const std::string FIELD = "port"; + + ApplyString(from, FIELD, result.port); + } + + void File::ApplyString( manage::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const + { + auto find = from.find( search_field ); + if( find == from.end() ) + { + return; + } + field = find->second; + } +} diff --git a/src/converter/file.hpp b/src/converter/file.hpp new file mode 100644 index 0000000..64ef152 --- /dev/null +++ b/src/converter/file.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include +#include + +#include "managment/general.hpp" + +namespace smtp::converter +{ + class File + { + public: + File() = default; + ~File() = default; + + manage::SettingsFields Convert( manage::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 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; + }; +} + + diff --git a/src/converter/full.cpp b/src/converter/full.cpp new file mode 100644 index 0000000..91a9816 --- /dev/null +++ b/src/converter/full.cpp @@ -0,0 +1,17 @@ +#include "full.hpp" +#include "file.hpp" +#include "settings.hpp" + +namespace smtp::converter +{ + manage::SettingsFields Full::Convert( manage::SettingsFileDataType const& from ) const + { + return File{}.Convert( from ); + } + + std::unordered_map Full::Convert( manage::SettingsFields const& from ) const + { + return Settings{}.Convert( from ); + + } +} diff --git a/src/converter/full.hpp b/src/converter/full.hpp new file mode 100644 index 0000000..7025324 --- /dev/null +++ b/src/converter/full.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +#include "managment/general.hpp" + +namespace smtp::converter +{ + class Full + { + public: + Full() = default; + ~Full() = default; + + manage::SettingsFields Convert( std::unordered_map const& from ) const; + std::unordered_map Convert( manage::SettingsFields const& from ) const; + private: + + }; +} + + diff --git a/src/converter/settings.cpp b/src/converter/settings.cpp new file mode 100644 index 0000000..7aa2106 --- /dev/null +++ b/src/converter/settings.cpp @@ -0,0 +1,65 @@ +#include "settings.hpp" + +namespace smtp::converter +{ + + manage::SettingsFileDataType Settings::Convert( manage::SettingsFields const& from ) const + { + manage::SettingsFileDataType result; + + ApplyPort( from, result ); + ApplyHost( from, result ); + ApplyPassword( from, result ); + ApplyUsername( from, result ); + ApplySsl( from, result ); + ApplyAuth( from, result ); + + return result; + } + + void Settings::ApplyAuth( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "need_auth"; + static const std::string TRUE_AS_STRING = "true"; + static const std::string FALSE_AS_STRING = "false"; + + from.is_need_auth ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); + } + + void Settings::ApplySsl( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "need_ssl"; + static const std::string TRUE_AS_STRING = "true"; + static const std::string FALSE_AS_STRING = "false"; + + from.is_need_ssl ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); + } + + void Settings::ApplyUsername( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "username"; + + result.insert({FIELD, from.username}); + } + + void Settings::ApplyPassword( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "password"; + + result.insert({FIELD, from.password}); + } + + void Settings::ApplyHost( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "host"; + + result.insert({FIELD, from.host}); + } + + void Settings::ApplyPort( manage::SettingsFields const& from, manage::SettingsFileDataType& result ) const + { + static const std::string FIELD = "port"; + + result.insert({FIELD, from.port}); + } +} diff --git a/src/converter/settings.hpp b/src/converter/settings.hpp new file mode 100644 index 0000000..d25a550 --- /dev/null +++ b/src/converter/settings.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "managment/general.hpp" + +namespace smtp::converter +{ + class Settings + { + public: + Settings() = default; + ~Settings() = default; + + std::unordered_map Convert( manage::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 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; + }; +} + + diff --git a/src/converter/string.cpp b/src/converter/string.cpp new file mode 100644 index 0000000..cbdc544 --- /dev/null +++ b/src/converter/string.cpp @@ -0,0 +1,82 @@ +#include "string.hpp" + +namespace smtp::converter +{ + std::string String::Convert( manage::SettingsFields const& from ) const + { + std::string result; + + ApplyPort( from, result ); + ApplyHost( from, result ); + ApplyPassword( from, result ); + ApplyUsername( from, result ); + ApplySsl( from, result ); + ApplyAuth( from, result ); + + return result; + } + + void String::ApplyAuth( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "need_auth"; + + result += GetBoolParam( FIELD, from.is_need_auth); + } + + void String::ApplySsl( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "need_ssl"; + + result += GetBoolParam( FIELD, from.is_need_ssl); + } + + void String::ApplyUsername( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "username"; + + result += GetStringParam( FIELD, from.username ); + } + + void String::ApplyPassword( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "password"; + + result += GetStringParam( FIELD, from.password ); + } + + void String::ApplyHost( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "host"; + + result += GetStringParam( FIELD, from.host ); + } + + void String::ApplyPort( manage::SettingsFields const& from, std::string& result ) const + { + static const std::string FIELD = "port"; + + result += GetStringParam( FIELD, from.port ); + } + + std::string String::GetStringParam(const std::string &field, const std::string ¶m) const + { + std::string result; + result += field; + result += '='; + result += param; + result += '&'; + return result; + } + + std::string String::GetBoolParam(const std::string &field, bool param) const + { + std::string result; + + result += field; + result += '='; + result += param ? "true" : "false"; + result += '&'; + + return result; + } +} diff --git a/src/converter/string.hpp b/src/converter/string.hpp new file mode 100644 index 0000000..f1752ad --- /dev/null +++ b/src/converter/string.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +#include "managment/general.hpp" + +namespace smtp::converter +{ + class String + { + public: + String() = default; + ~String() = default; + + std::string Convert( manage::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 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; + + 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/converter/file.cpp b/src/file/converter/file.cpp deleted file mode 100644 index d0bb032..0000000 --- a/src/file/converter/file.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "file.hpp" - -namespace smtp::file::converter -{ - manage::SettingsFields File::Convert( manage::SettingsFileDataType const& from ) const - { - manage::SettingsFields result; - - ApplyAuth( result, from ); - ApplySsl( result, from ); - ApplyUsername( result, from ); - ApplyPassword( result, from ); - ApplyHost( result, from ); - ApplyPort( result, from ); - - return result; - } - - void File::ApplyAuth( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "need_auth"; - - ApplyBool(from, FIELD, result.is_need_auth); - } - - void File::ApplySsl( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "need_ssl"; - - ApplyBool(from, FIELD, result.is_need_ssl); - } - - void File::ApplyBool( manage::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"; - - auto find = from.find( search_field ); - if( find == from.end() ) - { - return; - } - if( find->second != TRUE_AS_STRING && find->second != FALSE_AS_STRING ) - { - return; - } - field = ( find->second == TRUE_AS_STRING ) ? true : false; - } - - void File::ApplyUsername( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "username"; - - ApplyString( from, FIELD, result.username ); - } - - void File::ApplyPassword( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "password"; - - ApplyString( from, FIELD, result.password ); - } - - void File::ApplyHost( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "host"; - - ApplyString( from, FIELD, result.host ); - } - - void File::ApplyPort( manage::SettingsFields &result, manage::SettingsFileDataType const& from ) const - { - static const std::string FIELD = "port"; - - ApplyString(from, FIELD, result.port); - } - - void File::ApplyString( manage::SettingsFileDataType const& from, std::string const& search_field, std::string& field ) const - { - auto find = from.find( search_field ); - if( find == from.end() ) - { - return; - } - field = find->second; - } -} diff --git a/src/file/converter/file.hpp b/src/file/converter/file.hpp deleted file mode 100644 index 63ff6dd..0000000 --- a/src/file/converter/file.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include -#include - -#include "managment/general.hpp" - -namespace smtp::file::converter -{ - class File - { - public: - File() = default; - ~File() = default; - - manage::SettingsFields Convert( manage::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 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; - }; -} - - diff --git a/src/file/converter/full.cpp b/src/file/converter/full.cpp deleted file mode 100644 index 61f5a85..0000000 --- a/src/file/converter/full.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "full.hpp" -#include "file.hpp" -#include "settings.hpp" - -namespace smtp::file::converter -{ - manage::SettingsFields Full::Convert( ParsedDataType const& from ) const - { - return File{}.Convert( from ); - } - - std::unordered_map Full::Convert( manage::SettingsFields const& from ) const - { - return Settings{}.Convert( from ); - - } -} diff --git a/src/file/converter/full.hpp b/src/file/converter/full.hpp deleted file mode 100644 index 5ffccd4..0000000 --- a/src/file/converter/full.hpp +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once - -#include -#include - -#include "managment/general.hpp" - -namespace smtp::file::converter -{ - using ParsedDataType = std::unordered_map; - - class Full - { - public: - Full() = default; - ~Full() = default; - - manage::SettingsFields Convert( std::unordered_map const& from ) const; - std::unordered_map Convert( manage::SettingsFields const& from ) const; - private: - - }; -} - - diff --git a/src/file/converter/settings.cpp b/src/file/converter/settings.cpp deleted file mode 100644 index 809eef8..0000000 --- a/src/file/converter/settings.cpp +++ /dev/null @@ -1,65 +0,0 @@ -#include "settings.hpp" - -namespace smtp::file::converter -{ - - ParsedDataType Settings::Convert( manage::SettingsFields const& from ) const - { - ParsedDataType result; - - ApplyPort( from, result ); - ApplyHost( from, result ); - ApplyPassword( from, result ); - ApplyUsername( from, result ); - ApplySsl( from, result ); - ApplyAuth( from, result ); - - return result; - } - - void Settings::ApplyAuth( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "need_auth"; - static const std::string TRUE_AS_STRING = "true"; - static const std::string FALSE_AS_STRING = "false"; - - from.is_need_auth ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); - } - - void Settings::ApplySsl( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "need_ssl"; - static const std::string TRUE_AS_STRING = "true"; - static const std::string FALSE_AS_STRING = "false"; - - from.is_need_ssl ? result.insert({FIELD, TRUE_AS_STRING}) : result.insert({FIELD, FALSE_AS_STRING}); - } - - void Settings::ApplyUsername( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "username"; - - result.insert({FIELD, from.username}); - } - - void Settings::ApplyPassword( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "password"; - - result.insert({FIELD, from.password}); - } - - void Settings::ApplyHost( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "host"; - - result.insert({FIELD, from.host}); - } - - void Settings::ApplyPort( manage::SettingsFields const& from, ParsedDataType& result ) const - { - static const std::string FIELD = "port"; - - result.insert({FIELD, from.port}); - } -} diff --git a/src/file/converter/settings.hpp b/src/file/converter/settings.hpp deleted file mode 100644 index 8f94942..0000000 --- a/src/file/converter/settings.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include -#include - -#include "managment/general.hpp" - -namespace smtp::file::converter -{ - using ParsedDataType = std::unordered_map;; - - class Settings - { - public: - Settings() = default; - ~Settings() = default; - - std::unordered_map Convert( manage::SettingsFields const& from ) const; - private: - void ApplyAuth( manage::SettingsFields const& from, ParsedDataType& result ) const; - void ApplySsl( manage::SettingsFields const& from, ParsedDataType& result ) const; - - void ApplyUsername( manage::SettingsFields const& from, ParsedDataType& result ) const; - void ApplyPassword( manage::SettingsFields const& from, ParsedDataType& result ) const; - void ApplyHost( manage::SettingsFields const& from, ParsedDataType& result ) const; - void ApplyPort( manage::SettingsFields const& from, ParsedDataType& result ) const; - }; -} - - diff --git a/src/file/mail.cpp b/src/file/mail.cpp index 4da36c5..1516880 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -7,12 +7,11 @@ namespace smtp::file Mail::Mail( std::string const& path_file ) : mPathFile( path_file ) { - } manage::MailsSet Mail::Read() const { - std::ifstream mail_file{ mPathFile }; + std::ifstream mail_file{ mPathFile, std::fstream::in }; if ( !mail_file.is_open() ) { //TODO new file @@ -29,13 +28,14 @@ namespace smtp::file result.push_back( *parsed_data ); } } + mail_file.close(); return result; } bool Mail::Write( manage::MailsSet const& data ) const { - std::ofstream settings_file{ mPathFile }; - if ( !settings_file.is_open() ) + std::ofstream mail_file{ mPathFile, std::fstream::out | std::fstream::trunc }; + if ( !mail_file.is_open() ) { //TODO new file // std::cerr << "Failed to open pcie_devices database \n"; @@ -43,8 +43,9 @@ namespace smtp::file } for( const auto& pair : data ) { - settings_file << pair << "\n"; + mail_file << pair << "\n"; } + mail_file.close(); return true; } diff --git a/src/file/settings.cpp b/src/file/settings.cpp index 4691fda..df619c9 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -24,7 +24,7 @@ namespace smtp::file ParsedStoreType Settings::GetParsedStore() const { - std::ifstream settings_file{ mPathFile }; + std::ifstream settings_file{ mPathFile, std::fstream::in }; if ( !settings_file.is_open() ) { //TODO new file @@ -38,12 +38,13 @@ namespace smtp::file auto parsed_data = parser::Settings{}.Parse(line); result.insert( parsed_data ); } + settings_file.close(); return result; } bool Settings::SetParsedData( ParsedStoreType const& parsed_data ) const { - std::ofstream settings_file{ mPathFile }; + std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc }; if ( !settings_file.is_open() ) { //TODO new file @@ -55,6 +56,7 @@ namespace smtp::file auto line = BuildParam( data ); settings_file << line << "\n"; } + settings_file.close(); return true; } diff --git a/src/managment/builder/mail.cpp b/src/managment/builder/mail.cpp index d8413d1..fb56462 100644 --- a/src/managment/builder/mail.cpp +++ b/src/managment/builder/mail.cpp @@ -5,7 +5,7 @@ namespace smtp::manage::builder { smtp::manage::Mail Mail::Build() const { - static const std::string PATH = {"/home/eportnov/work/openbmc/build/cp2-5422/workspace/sources/smtp/mails.txt"}; + static const std::string PATH = {"/var/lib/smtp/conf/mails.txt"}; file::Mail file_manipulator{PATH}; return smtp::manage::Mail{ file_manipulator }; diff --git a/src/managment/builder/settings.cpp b/src/managment/builder/settings.cpp index bfa8fb2..02439fd 100644 --- a/src/managment/builder/settings.cpp +++ b/src/managment/builder/settings.cpp @@ -11,7 +11,7 @@ namespace smtp::manage::builder file::Settings Settings::GetFileSettings() const { - static const std::string PATH = {"/home/eportnov/work/openbmc/build/cp2-5422/workspace/sources/smtp/settings.txt"}; + static const std::string PATH = {"/var/lib/smtp/conf/settings.txt"}; return file::Settings{PATH}; } diff --git a/src/managment/settings.cpp b/src/managment/settings.cpp index 1f597c2..08a8a15 100644 --- a/src/managment/settings.cpp +++ b/src/managment/settings.cpp @@ -1,4 +1,5 @@ #include "settings.hpp" +#include "converter/string.hpp" namespace smtp::manage { @@ -13,6 +14,11 @@ namespace smtp::manage return mFileReader.Write( settings_fields ); } + std::string Settings::GetSettings() const + { + return converter::String{}.Convert(mSettingsFields); + } + bool Settings::IsNeedAuth() const noexcept { return mSettingsFields.is_need_auth; diff --git a/src/managment/settings.hpp b/src/managment/settings.hpp index ff78af6..9b34c2c 100644 --- a/src/managment/settings.hpp +++ b/src/managment/settings.hpp @@ -13,6 +13,7 @@ namespace smtp::manage ~Settings() = default; bool SetSettings( manage::SettingsFields const& settings_fields ) const; + std::string GetSettings() const; bool IsNeedAuth() const noexcept; bool IsNeedSsl() const noexcept; diff --git a/src/service/smtp.cpp b/src/service/smtp.cpp index cf3dc45..96bee38 100644 --- a/src/service/smtp.cpp +++ b/src/service/smtp.cpp @@ -3,10 +3,6 @@ #include namespace smtp::service { - static constexpr char HOST_PROPERTY[] = "Host"; - static constexpr char USER_PROPERTY[] = "User"; - static constexpr char PORT_PROPERTY[] = "Port"; - // // Constructors // @@ -14,21 +10,10 @@ namespace smtp::service Smtp::Smtp( ConnectionPtr connection, manage::Settings const& settings, manage::Mail const& mail_to ) :mSettingsStorage(settings), mMailTo(mail_to) { -// std::string from{"claiff@mail.ru"}; -// std::string to{"claiff1990@gmail.com"}; -// std::list cc{"claiff@mail.ru"}; -// std::string subject{"subject"}; -// std::string text{"text"}; - - // mSettingsStorage.CheckAndSetSettings({true, true, "claiff@mail.ru","nZZbXq7FbwWAqpPpy3YL", "smtp.mail.ru", "" }); - //message::Sender{ mSettingsStorage, mMailTo }.Send( "claiff@mail.ru", "subject", "text" ); - //settings.SetSettings(manage::SettingsFields{false,false,"claiff@mail.ru","nZZbXq7FbwWAqpPpy3YL","smtp.mail.ru",""}); - manage::MailsSet add_mail{"gfdgdf@fd.ru"}; - //mMailTo.AddMailsToSend( add_mail ); - mMailTo.DeleteMailToSend({"gfdgdf@fd.ru", "rwer", "fedsfsd"}); - -// CreateService( connection ); -// CreateInterface( connection ); + CreateService( connection ); + CreateMessagerInterface( connection ); + CreateSettingsManagerInterface( connection ); + CreateMailManagerInterface( connection ); } // @@ -42,61 +27,82 @@ namespace smtp::service connection->request_name( SMTP_BUS_NAME ); } - void Smtp::CreateInterface( ConnectionPtr connection ) + void Smtp::CreateMessagerInterface( ConnectionPtr connection ) { - static constexpr char SMTP_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP"; - static constexpr char SMTP_INTERFACE_NAME[] = "xyz.openbmc_project.SMTP"; + static constexpr char SMTP_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP/Messenger"; + static constexpr char SMTP_INTERFACE_NAME[] = "xyz.openbmc_project.Messenger"; mObjectServer = std::make_shared( connection ); - mInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME ); + mMessagerInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME ); - AddProperties(); - AddMethods(); + AddMessagerMethods(); - mInterface->initialize(); + mMessagerInterface->initialize(); } - void Smtp::AddProperties() + void Smtp::CreateSettingsManagerInterface(ConnectionPtr connection) { - mInterface->register_property( HOST_PROPERTY, mSettingsStorage.GetHost(), sdbusplus::asio::PropertyPermission::readOnly ); - mInterface->register_property( USER_PROPERTY, mSettingsStorage.GetUserName(), sdbusplus::asio::PropertyPermission::readOnly ); - mInterface->register_property( PORT_PROPERTY, mSettingsStorage.GetPort(), sdbusplus::asio::PropertyPermission::readOnly ); + static constexpr char SMTP_MANAGER_OBJECT_NAME[] = "/xyz/openbmc_project/Manager"; + static constexpr char SMTP_SETTINGS_MANAGER_INTERFACE_NAME[] = "xyz.openbmc_project.SettingsManager"; + + mObjectServer = std::make_shared( connection ); + mManagerSettingsInterface = mObjectServer->add_interface( SMTP_MANAGER_OBJECT_NAME, SMTP_SETTINGS_MANAGER_INTERFACE_NAME ); + + AddSettingsManagerMethods(); + + mManagerSettingsInterface->initialize(); } - void Smtp::AddMethods() + void Smtp::CreateMailManagerInterface(ConnectionPtr connection) + { + static constexpr char SMTP_MANAGER_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP/Manager"; + static constexpr char SMTP_MAIL_MANAGER_INTERFACE_NAME[] = "xyz.openbmc_project.MailManager"; + + mObjectServer = std::make_shared( connection ); + mManagerMailInterface = mObjectServer->add_interface( SMTP_MANAGER_OBJECT_NAME, SMTP_MAIL_MANAGER_INTERFACE_NAME ); + + AddMailManagerMethods(); + + mManagerMailInterface->initialize(); + } + + void Smtp::AddMessagerMethods() { static constexpr char SMTP_SEND_MESSAGE_METHOD_NAME[] = "SendMail"; - static constexpr char SMTP_CHANGE_PARAMETERS_METHOD_NAME[] = "ChangeParameters"; - mInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from, + mMessagerInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from, std::string const& theme, std::string const& text ) { return message::Sender{ mSettingsStorage, mMailTo }.Send( mail_from, theme, text );}); + } - - mInterface->register_method(SMTP_CHANGE_PARAMETERS_METHOD_NAME, [this]( bool is_need_auth, - bool is_need_ssl, - std::string const& user, - std::string const& password, - std::string const& host, - std::string const& port ) - { return RefreshSettings( is_need_auth, is_need_ssl, user, password, host, port);}); + void Smtp::AddSettingsManagerMethods() + { + static constexpr char SMTP_SET_SETTINGS_METHOD_NAME[] = "SetSettings"; + static constexpr char SMTP_GET_SETTINGS_METHOD_NAME[] = "GetSettings"; + + mManagerSettingsInterface->register_method(SMTP_SET_SETTINGS_METHOD_NAME, [this]( bool is_need_auth, + bool is_need_ssl, + std::string const& user, + std::string const& password, + std::string const& host, + std::string const& port ) + { mSettingsStorage.SetSettings({ is_need_auth, is_need_ssl, + user, password, host, port});}); + + mManagerSettingsInterface->register_method(SMTP_GET_SETTINGS_METHOD_NAME, [this](){ return mSettingsStorage.GetSettings();}); } - bool Smtp::RefreshSettings( bool is_need_auth, bool is_need_ssl, - std::string const& user, std::string const& password, - std::string const& host, std::string const& port ) + void Smtp::AddMailManagerMethods() { - auto is_settings_norm = mSettingsStorage.SetSettings({is_need_auth, is_need_ssl, - user, password, host, port}); - if(!is_settings_norm) - { - return false; - } - - mInterface->set_property(HOST_PROPERTY, host); - mInterface->set_property(USER_PROPERTY, user); - mInterface->set_property(PORT_PROPERTY, port); - return true; + static constexpr char SMTP_GET_MAILS_TO_SEND_METHOD_NAME[] = "GetMailsToSend"; + static constexpr char SMTP_ADD_MAILS_TO_SEND_METHOD_NAME[] = "AddMailsToSend"; + static constexpr char SMTP_DELETE_MAILS_METHOD_NAME[] = "DeleteMailsToSend"; + + 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);}); } } diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp index 0284f42..a52c9c0 100644 --- a/src/service/smtp.hpp +++ b/src/service/smtp.hpp @@ -22,14 +22,22 @@ namespace smtp::service private: void FillStorageByDefault(); void CreateService( ConnectionPtr bus ); - void CreateInterface( ConnectionPtr connection ); + void CreateMessagerInterface( ConnectionPtr connection ); + void CreateSettingsManagerInterface( ConnectionPtr connection ); + void CreateMailManagerInterface( ConnectionPtr connection ); void AddProperties(); - void AddMethods(); + void AddMessagerMethods(); + void AddSettingsManagerMethods(); + void AddMailManagerMethods(); + bool RefreshSettings( bool is_need_auth, bool is_need_ssl, std::string const& user, std::string const& password, std::string const& host, std::string const& port ); - InterfacePtr mInterface; + InterfacePtr mMessagerInterface; + InterfacePtr mManagerSettingsInterface; + InterfacePtr mManagerMailInterface; + ObjectServerPtr mObjectServer; manage::Settings mSettingsStorage; manage::Mail mMailTo; -- cgit v1.2.3