From dcbaf61e4968734d9b3bc41f704ea04d54746cea Mon Sep 17 00:00:00 2001 From: eportnov Date: Tue, 13 Sep 2022 11:13:33 +0300 Subject: add file reading --- CMakeLists.txt | 26 ++++++++++- src/file/mail.cpp | 41 +++++++++++++++++ src/file/mail.hpp | 22 +++++++++ src/file/parser/settings.cpp | 20 ++++++++ src/file/parser/settings.hpp | 19 ++++++++ src/file/settings.cpp | 50 ++++++++++++++++++++ src/file/settings.hpp | 31 +++++++++++++ src/file/settings_converter.cpp | 94 ++++++++++++++++++++++++++++++++++++++ src/file/settings_converter.hpp | 41 +++++++++++++++++ src/main.cpp | 7 ++- src/managment/builder/mail.cpp | 14 ++++++ src/managment/builder/mail.hpp | 16 +++++++ src/managment/builder/settings.cpp | 18 ++++++++ src/managment/builder/settings.hpp | 19 ++++++++ src/managment/mail.cpp | 25 ++++++++++ src/managment/mail.hpp | 23 ++++++++++ src/managment/settings.cpp | 44 ++++++++++++++++++ src/managment/settings.hpp | 27 +++++++++++ src/message/builder/cc.cpp | 12 ++++- src/message/builder/cc.hpp | 1 + src/message/sender.cpp | 27 ++++++----- src/message/sender.hpp | 18 ++++---- src/service/settings.cpp | 54 ---------------------- src/service/settings.hpp | 36 --------------- src/service/smtp.cpp | 15 +++--- src/service/smtp.hpp | 8 ++-- 26 files changed, 579 insertions(+), 129 deletions(-) create mode 100644 src/file/mail.cpp create mode 100644 src/file/mail.hpp create mode 100644 src/file/parser/settings.cpp create mode 100644 src/file/parser/settings.hpp create mode 100644 src/file/settings.cpp create mode 100644 src/file/settings.hpp create mode 100644 src/file/settings_converter.cpp create mode 100644 src/file/settings_converter.hpp create mode 100644 src/managment/builder/mail.cpp create mode 100644 src/managment/builder/mail.hpp create mode 100644 src/managment/builder/settings.cpp create mode 100644 src/managment/builder/settings.hpp create mode 100644 src/managment/mail.cpp create mode 100644 src/managment/mail.hpp create mode 100644 src/managment/settings.cpp create mode 100644 src/managment/settings.hpp delete mode 100644 src/service/settings.cpp delete mode 100644 src/service/settings.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 7b4acc3..9213377 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -78,14 +78,16 @@ include_directories(src) set(SRC_DIR src) set(MESSAGE_DIR src/message) set(SERVICE_DIR src/service) +set(MANAGMENT_DIR src/managment) +set(FILE_DIR src/file) +set(PARSER_DIR src/file/parser) +set(MANAGER_BUILDER_DIR src/managment/builder) set(SRC_FILES ${SRC_DIR}/main.cpp ${SERVICE_DIR}/smtp.cpp ${SERVICE_DIR}/smtp.hpp - ${SERVICE_DIR}/settings.hpp - ${SERVICE_DIR}/settings.cpp ${MESSAGE_DIR}/sender.hpp ${MESSAGE_DIR}/sender.cpp @@ -104,6 +106,26 @@ set(SRC_FILES ${MESSAGE_DIR}/builder/from.cpp ${MESSAGE_DIR}/builder/types/imessage_builder.hpp ${MESSAGE_DIR}/builder/types/idecorator.hpp + + ${MANAGMENT_DIR}/mail.hpp + ${MANAGMENT_DIR}/mail.cpp + ${MANAGMENT_DIR}/settings.hpp + ${MANAGMENT_DIR}/settings.cpp + + ${FILE_DIR}/mail.hpp + ${FILE_DIR}/mail.cpp + ${FILE_DIR}/settings.hpp + ${FILE_DIR}/settings.cpp + ${FILE_DIR}/settings_converter.hpp + ${FILE_DIR}/settings_converter.cpp + + ${PARSER_DIR}/settings.hpp + ${PARSER_DIR}/settings.cpp + + ${MANAGER_BUILDER_DIR}/settings.hpp + ${MANAGER_BUILDER_DIR}/settings.cpp + ${MANAGER_BUILDER_DIR}/mail.hpp + ${MANAGER_BUILDER_DIR}/mail.cpp ) add_executable(smtp ${SRC_FILES}) diff --git a/src/file/mail.cpp b/src/file/mail.cpp new file mode 100644 index 0000000..14e6228 --- /dev/null +++ b/src/file/mail.cpp @@ -0,0 +1,41 @@ +#include + +#include "mail.hpp" + +namespace smtp::file +{ + Mail::Mail( std::string const& path_file ) + : PathFile( path_file ) + { + + } + + std::list Mail::Read() const + { + std::ifstream mail_file{ PathFile }; + if ( !mail_file.is_open() ) + { + //TODO new file + // std::cerr << "Failed to open pcie_devices database \n"; + } + std::string line{}; + std::list result; + + while ( std::getline( mail_file, line ) ) + { + auto parsed_data = GetMailFromLine( line ); + if( parsed_data ) + { + result.push_back( *parsed_data ); + } + } + return result; + } + + std::optional Mail::GetMailFromLine( std::string const& line ) const + { + //TODO parsing + return line; + } + +} diff --git a/src/file/mail.hpp b/src/file/mail.hpp new file mode 100644 index 0000000..0f5ade5 --- /dev/null +++ b/src/file/mail.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include + +namespace smtp::file +{ + class Mail + { + public: + explicit Mail( std::string const& path_file ); + ~Mail() = default; + + std::list Read() const; + private: + std::optional GetMailFromLine( std::string const& line ) const; + + std::string PathFile; + }; + +} diff --git a/src/file/parser/settings.cpp b/src/file/parser/settings.cpp new file mode 100644 index 0000000..590ed72 --- /dev/null +++ b/src/file/parser/settings.cpp @@ -0,0 +1,20 @@ +#include "settings.hpp" + +namespace smtp::file::parser +{ + ParseResult Settings::Parse( std::string const& line ) const + { + static constexpr char DELIMITER = '='; + static constexpr size_t ZERO_POSITION = 0; + static constexpr size_t NEXT_POSITION = 1; + + auto position = line.find(DELIMITER); + if( position == std::string::npos) + { + return {}; + } + auto first_part = line.substr( ZERO_POSITION, position ); + auto second_part = line.substr(position + NEXT_POSITION, line.length()); + return {first_part, second_part}; + } +} diff --git a/src/file/parser/settings.hpp b/src/file/parser/settings.hpp new file mode 100644 index 0000000..e7de2f6 --- /dev/null +++ b/src/file/parser/settings.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include +#include + +namespace smtp::file::parser +{ + using ParseResult = std::pair; + + class Settings + { + public: + Settings() = default; + ~Settings() = default; + + ParseResult Parse( std::string const& line ) const; + }; + +} diff --git a/src/file/settings.cpp b/src/file/settings.cpp new file mode 100644 index 0000000..bcb2f3e --- /dev/null +++ b/src/file/settings.cpp @@ -0,0 +1,50 @@ +#include + +#include "settings.hpp" + +namespace smtp::file +{ + Settings::Settings( std::string const& path_file, parser::Settings const& parser, SettingsConverter const& converter) + : mPathFile( path_file ) + , mParser( parser ) + , mConverter( converter ) + { + + } + + SettingsFields Settings::Read() const + { + auto parsed_store = GetParsedStore(); + return mConverter.Convert( parsed_store ); + } + + void Settings::Write( SettingsFields const& settings_fields ) const + { + auto parsed_data = mConverter.Convert( settings_fields ); + SetParsedData(); + } + + ParsedStoreType Settings::GetParsedStore() const + { + std::ifstream settings_file{ mPathFile }; + if ( !settings_file.is_open() ) + { + //TODO new file + // std::cerr << "Failed to open pcie_devices database \n"; + } + std::string line{}; + ParsedStoreType result; + + while ( std::getline( settings_file, line ) ) + { + auto parsed_data = mParser.Parse(line); + result.insert( parsed_data ); + } + return result; + } + + void Settings::SetParsedData() const + { + + } +} diff --git a/src/file/settings.hpp b/src/file/settings.hpp new file mode 100644 index 0000000..62182b1 --- /dev/null +++ b/src/file/settings.hpp @@ -0,0 +1,31 @@ +#pragma once + +#include +#include + +#include "settings_converter.hpp" +#include "parser/settings.hpp" + +namespace smtp::file +{ + using ParsedStoreType = std::unordered_map; + + class Settings + { + public: + explicit Settings( std::string const& path_file, parser::Settings const& parser, SettingsConverter const& converter ); + ~Settings() = default; + + SettingsFields Read() const; + void Write( SettingsFields const& settings_fields ) const; + private: + ParsedStoreType GetParsedStore() const; + void SetParsedData() const; + + std::string mPathFile; + parser::Settings mParser; + SettingsConverter mConverter; + + }; + +} diff --git a/src/file/settings_converter.cpp b/src/file/settings_converter.cpp new file mode 100644 index 0000000..c64041f --- /dev/null +++ b/src/file/settings_converter.cpp @@ -0,0 +1,94 @@ +#include "settings_converter.hpp" + +namespace smtp::file +{ + + SettingsFields SettingsConverter::Convert( ParsedDataType const& from ) const + { + SettingsFields result; + + ApplyAuth( result, from ); + ApplySsl( result, from ); + ApplyUsername( result, from ); + ApplyPassword( result, from ); + ApplyHost( result, from ); + ApplyPort( result, from ); + + return result; + } + + std::unordered_map SettingsConverter::Convert( SettingsFields const& from ) const + { + std::unordered_map result; + return result; + } + + void SettingsConverter::ApplyAuth( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "need_auth"; + + ApplyBool(from, FIELD, result.is_need_auth); + } + + void SettingsConverter::ApplySsl( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "need_ssl"; + + ApplyBool(from, FIELD, result.is_need_ssl); + } + + void SettingsConverter::ApplyBool( ParsedDataType 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 SettingsConverter::ApplyUsername( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "username"; + + ApplyString( from, FIELD, result.username ); + } + + void SettingsConverter::ApplyPassword( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "password"; + + ApplyString( from, FIELD, result.password ); + } + + void SettingsConverter::ApplyHost( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "host"; + + ApplyString( from, FIELD, result.host ); + } + + void SettingsConverter::ApplyPort( SettingsFields &result, ParsedDataType const& from ) const + { + static const std::string FIELD = "port"; + + ApplyString(from, FIELD, result.port); + } + + void SettingsConverter::ApplyString( ParsedDataType 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/settings_converter.hpp b/src/file/settings_converter.hpp new file mode 100644 index 0000000..36041c3 --- /dev/null +++ b/src/file/settings_converter.hpp @@ -0,0 +1,41 @@ +#pragma once + +#include +#include + +namespace smtp::file +{ + struct SettingsFields + { + bool is_need_auth; + bool is_need_ssl; + std::string username; + std::string password; + std::string host; + std::string port; + }; + + using ParsedDataType = std::unordered_map;; + + class SettingsConverter + { + public: + SettingsConverter() = default; + ~SettingsConverter() = default; + + SettingsFields Convert( std::unordered_map const& from ) const; + std::unordered_map Convert( SettingsFields const& from ) const; + private: + void ApplyAuth( SettingsFields& result, ParsedDataType const& from ) const; + void ApplySsl( SettingsFields& result, ParsedDataType const& from ) const; + void ApplyBool( ParsedDataType const& from, std::string const& search_field, bool& field ) const; + + void ApplyUsername( SettingsFields& result, ParsedDataType const& from ) const; + void ApplyPassword( SettingsFields& result, ParsedDataType const& from ) const; + void ApplyHost( SettingsFields& result, ParsedDataType const& from ) const; + void ApplyPort( SettingsFields& result, ParsedDataType const& from ) const; + void ApplyString( ParsedDataType const& from, std::string const& search_field, std::string& field ) const; + }; +} + + diff --git a/src/main.cpp b/src/main.cpp index 96c06df..b58bb69 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,13 +1,18 @@ #include #include "service/smtp.hpp" +#include "managment/builder/mail.hpp" +#include "managment/builder/settings.hpp" int main() { boost::asio::io_service io_context; auto connection = std::make_shared( io_context ); - smtp::service::Smtp smtp{ connection }; + auto settings_manager = smtp::manage::builder::Settings{}.Build(); + auto mail_manager = smtp::manage::builder::Mail{}.Build(); + + smtp::service::Smtp smtp{ connection, settings_manager, mail_manager }; io_context.run(); return 0; diff --git a/src/managment/builder/mail.cpp b/src/managment/builder/mail.cpp new file mode 100644 index 0000000..d8413d1 --- /dev/null +++ b/src/managment/builder/mail.cpp @@ -0,0 +1,14 @@ +#include "mail.hpp" +#include "file/mail.hpp" + +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"}; + + file::Mail file_manipulator{PATH}; + return smtp::manage::Mail{ file_manipulator }; + } + +} diff --git a/src/managment/builder/mail.hpp b/src/managment/builder/mail.hpp new file mode 100644 index 0000000..ae53202 --- /dev/null +++ b/src/managment/builder/mail.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "managment/mail.hpp" + +namespace smtp::manage::builder +{ + class Mail + { + public: + Mail() = default; + ~Mail() = default; + + smtp::manage::Mail Build() const; + }; + +} diff --git a/src/managment/builder/settings.cpp b/src/managment/builder/settings.cpp new file mode 100644 index 0000000..fa9fcea --- /dev/null +++ b/src/managment/builder/settings.cpp @@ -0,0 +1,18 @@ +#include "settings.hpp" + +namespace smtp::manage::builder +{ + + smtp::manage::Settings Settings::Build() const + { + auto file_manipulator = GetFileSettings(); + return smtp::manage::Settings{ file_manipulator }; + } + + file::Settings Settings::GetFileSettings() const + { + static const std::string PATH = {"/home/eportnov/work/openbmc/build/cp2-5422/workspace/sources/smtp/settings.txt"}; + return file::Settings{PATH, {},{}}; + } + +} diff --git a/src/managment/builder/settings.hpp b/src/managment/builder/settings.hpp new file mode 100644 index 0000000..1089b06 --- /dev/null +++ b/src/managment/builder/settings.hpp @@ -0,0 +1,19 @@ +#pragma once + +#include "managment/settings.hpp" +#include "file/settings.hpp" + +namespace smtp::manage::builder +{ + class Settings + { + public: + Settings() = default; + ~Settings() = default; + + smtp::manage::Settings Build() const; + private: + file::Settings GetFileSettings() const; + }; + +} diff --git a/src/managment/mail.cpp b/src/managment/mail.cpp new file mode 100644 index 0000000..e43a68c --- /dev/null +++ b/src/managment/mail.cpp @@ -0,0 +1,25 @@ +#include "mail.hpp" + +namespace smtp::manage +{ + Mail::Mail( file::Mail const& file_reader) + { + mMails = file_reader.Read(); + } + + std::list Mail::GetMailToSend() const + { + return mMails; + } + + bool Mail::AddMailToSend() + { + + } + + bool Mail::DeleteMailToSend( std::string const& mail_to_send) + { + + } + +} diff --git a/src/managment/mail.hpp b/src/managment/mail.hpp new file mode 100644 index 0000000..5e14831 --- /dev/null +++ b/src/managment/mail.hpp @@ -0,0 +1,23 @@ +#pragma once + +#include +#include + +#include "file/mail.hpp" + +namespace smtp::manage +{ + class Mail + { + public: + explicit Mail( file::Mail const& file_reader); + ~Mail() = default; + + std::list GetMailToSend() const; + bool AddMailToSend(); + bool DeleteMailToSend( std::string const& mail_to_send ); + private: + std::list mMails; + }; + +} diff --git a/src/managment/settings.cpp b/src/managment/settings.cpp new file mode 100644 index 0000000..72396f8 --- /dev/null +++ b/src/managment/settings.cpp @@ -0,0 +1,44 @@ +#include "settings.hpp" + +namespace smtp::manage +{ + Settings::Settings( file::Settings const& file_reader ) + { + mSettingsFields = file_reader.Read(); + } + + bool Settings::SetSettings( file::SettingsFields const& settings_fields ) + { + + } + + bool Settings::IsNeedAuth() const noexcept + { + return mSettingsFields.is_need_auth; + } + + bool Settings::IsNeedSsl() const noexcept + { + return mSettingsFields.is_need_ssl; + } + + std::string Settings::GetUserName() const + { + return mSettingsFields.username; + } + + std::string Settings::GetPassword() const + { + return mSettingsFields.password; + } + + std::string Settings::GetHost() const + { + return mSettingsFields.host; + } + + std::string Settings::GetPort() const + { + return mSettingsFields.port; + } +} diff --git a/src/managment/settings.hpp b/src/managment/settings.hpp new file mode 100644 index 0000000..ff40dc6 --- /dev/null +++ b/src/managment/settings.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +#include "file/settings.hpp" + +namespace smtp::manage +{ + class Settings + { + public: + explicit Settings( file::Settings const& file_reader ); + ~Settings() = default; + + bool SetSettings( file::SettingsFields const& settings_fields ); + + bool IsNeedAuth() const noexcept; + bool IsNeedSsl() const noexcept; + + std::string GetUserName() const; + std::string GetPassword() const; + std::string GetHost() const; + std::string GetPort() const; + private: + file::SettingsFields mSettingsFields; + }; +} diff --git a/src/message/builder/cc.cpp b/src/message/builder/cc.cpp index 55d70ff..9863abf 100644 --- a/src/message/builder/cc.cpp +++ b/src/message/builder/cc.cpp @@ -21,11 +21,19 @@ namespace smtp::message::builder return result; } - for(const auto& cc : mMailTo) + for( const auto& cc : mMailTo ) { - result += "Cc: " + cc + "\r\n"; + if( !IsFirstElement( cc ) ) + { + result += "Cc: " + cc + "\r\n"; + } } return result; } + + bool Cc::IsFirstElement( std::string const& cc ) const + { + return cc == mMailTo.front(); + } } diff --git a/src/message/builder/cc.hpp b/src/message/builder/cc.hpp index 340c7cd..a06b374 100644 --- a/src/message/builder/cc.hpp +++ b/src/message/builder/cc.hpp @@ -15,6 +15,7 @@ namespace smtp::message::builder std::string Get() const override; private: + bool IsFirstElement( std::string const& cc ) const; std::list const& mMailTo; }; } diff --git a/src/message/sender.cpp b/src/message/sender.cpp index cabcb8f..20b8e9c 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -16,8 +16,9 @@ namespace smtp::message // // Constructors/Destructors // - Sender::Sender( service::Settings const& settings_storage ) - : mSettingsStorage( settings_storage ) + Sender::Sender( manage::Settings const& settings_storage, manage::Mail const& mail_to ) + : mSettingsStorage( settings_storage ), + mMailTo( mail_to ) { } @@ -26,8 +27,7 @@ namespace smtp::message //Public methods // - bool Sender::Send( std::string const& mail_from, std::string const& mail_to, std::list const& cc, - std::string const& subject, std::string const& text ) + bool Sender::Send( std::string const& mail_from, std::string const& subject, std::string const& text ) { CURLcode result = CURLE_OK; curl_slist *recipients = NULL; @@ -38,8 +38,8 @@ namespace smtp::message { return false; } - FillRecipients( curl, mail_to, cc, recipients ); - UpdateMailText( mail_from, mail_to, cc, subject, text); + FillRecipients( curl, recipients ); + UpdateMailText( mail_from, subject, text); result = curl_easy_perform(curl); @@ -79,24 +79,23 @@ namespace smtp::message return true; } - void Sender::UpdateMailText( std::string const& mail_from, std::string const& mail_to, std::list const& cc, - std::string const& subject, std::string const& text ) const + void Sender::UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& text ) const { + auto mail_to = mMailTo.GetMailToSend(); auto text_decorator = std::make_shared( text ); text_decorator->Apply( std::make_shared( subject ) ) - .Apply( std::make_shared( cc ) ) + .Apply( std::make_shared( mail_to ) ) .Apply( std::make_shared( mail_from ) ) - .Apply( std::make_shared( mail_to ) ) + .Apply( std::make_shared( mail_to.front() ) ) .Apply( std::make_shared() ); mText = text_decorator->Get(); std::cout << mText << std::endl; } - void Sender::FillRecipients( CURL* curl, std::string const& mail_to, std::list const& cc, curl_slist* recipients ) + void Sender::FillRecipients( CURL* curl, curl_slist* recipients ) { - recipients = curl_slist_append( recipients, mail_to.c_str() ); - - for( const auto& recipient : cc ) + auto mail_to = mMailTo.GetMailToSend(); + for( const auto& recipient : mail_to ) { recipients = curl_slist_append( recipients, recipient.c_str() ); } diff --git a/src/message/sender.hpp b/src/message/sender.hpp index e75faa8..11afd6f 100644 --- a/src/message/sender.hpp +++ b/src/message/sender.hpp @@ -5,8 +5,8 @@ #include -#include "service/settings.hpp" - +#include "managment/settings.hpp" +#include "managment/mail.hpp" namespace smtp::message { struct WriteThis @@ -17,20 +17,20 @@ namespace smtp::message class Sender { public: - Sender( service::Settings const& settings_storage ); + Sender( manage::Settings const& settings_storage, manage::Mail const& mail_to ); ~Sender() = default; - bool Send( std::string const& mail_from, std::string const& mail_to, std::list const& cc, - std::string const& subject, std::string const& text ); + bool Send( std::string const& mail_from, std::string const& subject, std::string const& text ); private: - void UpdateMailText( std::string const& mail_from, std::string const& mail_to, std::list const& cc, - std::string const& subject, std::string const& textt ) const; + void UpdateMailText( std::string const& mail_from, std::string const& subject, std::string const& textt ) const; void InitSenders( std::string const& mail_from, std::list const& mail_to ); - void FillRecipients( CURL* curl, std::string const& mail_to, std::list const& cc, curl_slist* recipients ); + void FillRecipients(CURL* curl, curl_slist* recipients ); std::string GetHostPortData() const; static size_t ReadCallBack( void *ptr, size_t size, size_t nmemb, void *userp ); - service::Settings const& mSettingsStorage; + manage::Settings const& mSettingsStorage; + manage::Mail const& mMailTo; + bool InitCurl( CURL* curl, WriteThis const& upload_ctx, std::string const& mail_from ); }; } diff --git a/src/service/settings.cpp b/src/service/settings.cpp deleted file mode 100644 index 075aafa..0000000 --- a/src/service/settings.cpp +++ /dev/null @@ -1,54 +0,0 @@ -#include "settings.hpp" - -namespace smtp::service -{ - - Settings::Settings() - : mSettingsFields{} - { - - } - - Settings::Settings( SettingsFields data ) - : mSettingsFields(data) - { - - } - - bool Settings::CheckAndSetSettings(SettingsFields data) - { - mSettingsFields = data; - return true; - } - - bool Settings::IsNeedAuth() const noexcept - { - return mSettingsFields.is_need_auth; - } - - bool Settings::IsNeedSsl() const noexcept - { - return mSettingsFields.is_need_ssl; - } - - std::string Settings::GetUserName() const - { - return mSettingsFields.username; - } - - std::string Settings::GetPassword() const - { - return mSettingsFields.password; - } - - std::string Settings::GetHost() const - { - return mSettingsFields.host; - } - - std::string Settings::GetPort() const - { - return mSettingsFields.port; - } - -} diff --git a/src/service/settings.hpp b/src/service/settings.hpp deleted file mode 100644 index b6319f6..0000000 --- a/src/service/settings.hpp +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once - -#include - -namespace smtp::service -{ - struct SettingsFields - { - bool is_need_auth; - bool is_need_ssl; - std::string username; - std::string password; - std::string host; - std::string port; - }; - - class Settings - { - public: - Settings(); - explicit Settings( SettingsFields data ); - ~Settings() = default; - - bool CheckAndSetSettings( SettingsFields data ); - - bool IsNeedAuth() const noexcept; - bool IsNeedSsl() const noexcept; - - std::string GetUserName() const; - std::string GetPassword() const; - std::string GetHost() const; - std::string GetPort() const; - private: - SettingsFields mSettingsFields; - }; -} diff --git a/src/service/smtp.cpp b/src/service/smtp.cpp index 818a4de..e85dda0 100644 --- a/src/service/smtp.cpp +++ b/src/service/smtp.cpp @@ -1,6 +1,6 @@ #include "smtp.hpp" #include "message/sender.hpp" - +#include namespace smtp::service { static constexpr char HOST_PROPERTY[] = "Host"; @@ -11,7 +11,8 @@ namespace smtp::service // Constructors // - Smtp::Smtp( ConnectionPtr connection ) + 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"}; @@ -19,8 +20,8 @@ namespace smtp::service std::string subject{"subject"}; std::string text{"text"}; - mSettingsStorage.CheckAndSetSettings({true, true, "claiff@mail.ru","nZZbXq7FbwWAqpPpy3YL", "smtp.mail.ru", "" }); - message::Sender{ mSettingsStorage }.Send( "claiff@mail.ru", "claiff1990@gmail.com", {"claiff@mail.ru"}, "subject", "text" ); + // mSettingsStorage.CheckAndSetSettings({true, true, "claiff@mail.ru","nZZbXq7FbwWAqpPpy3YL", "smtp.mail.ru", "" }); + message::Sender{ mSettingsStorage, mMailTo }.Send( "claiff@mail.ru", "subject", "text" ); // CreateService( connection ); // CreateInterface( connection ); @@ -64,11 +65,9 @@ namespace smtp::service static constexpr char SMTP_CHANGE_PARAMETERS_METHOD_NAME[] = "ChangeParameters"; mInterface->register_method(SMTP_SEND_MESSAGE_METHOD_NAME, [this]( std::string const& mail_from, - std::string const& mail_to, - std::list const& cc, std::string const& theme, std::string const& text ) - { return message::Sender{ mSettingsStorage }.Send( mail_from, mail_to, cc, theme, text );}); + { return message::Sender{ mSettingsStorage, mMailTo }.Send( mail_from, theme, text );}); mInterface->register_method(SMTP_CHANGE_PARAMETERS_METHOD_NAME, [this]( bool is_need_auth, @@ -84,7 +83,7 @@ namespace smtp::service std::string const& user, std::string const& password, std::string const& host, std::string const& port ) { - auto is_settings_norm = mSettingsStorage.CheckAndSetSettings({is_need_auth, is_need_ssl, + auto is_settings_norm = mSettingsStorage.SetSettings({is_need_auth, is_need_ssl, user, password, host, port}); if(!is_settings_norm) { diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp index c311645..0284f42 100644 --- a/src/service/smtp.hpp +++ b/src/service/smtp.hpp @@ -5,7 +5,8 @@ #include #include -#include "settings.hpp" +#include "managment/mail.hpp" +#include "managment/settings.hpp" namespace smtp::service { @@ -16,7 +17,7 @@ namespace smtp::service class Smtp { public: - Smtp( ConnectionPtr connection ); + Smtp( ConnectionPtr connection, manage::Settings const& settings, manage::Mail const& mail_to ); ~Smtp() = default; private: void FillStorageByDefault(); @@ -30,6 +31,7 @@ namespace smtp::service InterfacePtr mInterface; ObjectServerPtr mObjectServer; - Settings mSettingsStorage; + manage::Settings mSettingsStorage; + manage::Mail mMailTo; }; } -- cgit v1.2.3