summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreportnov <eportnov@ibs.ru>2022-09-13 11:13:38 +0300
committereportnov <eportnov@ibs.ru>2022-09-13 11:13:38 +0300
commita58088ec7a45bb86b155a8ef9514b35b0ba8d1c9 (patch)
tree95a796ba075edb1abf4edea29a11544fa7344754
parentdf33492b80495fd36a1a488c0b0a39753f1df415 (diff)
parentdcbaf61e4968734d9b3bc41f704ea04d54746cea (diff)
downloadobmc-sila-smtp-a58088ec7a45bb86b155a8ef9514b35b0ba8d1c9.tar.xz
Merge branch 'feature/mail_user_managment'
-rw-r--r--CMakeLists.txt26
-rw-r--r--src/file/mail.cpp41
-rw-r--r--src/file/mail.hpp22
-rw-r--r--src/file/parser/settings.cpp20
-rw-r--r--src/file/parser/settings.hpp19
-rw-r--r--src/file/settings.cpp50
-rw-r--r--src/file/settings.hpp31
-rw-r--r--src/file/settings_converter.cpp94
-rw-r--r--src/file/settings_converter.hpp41
-rw-r--r--src/main.cpp7
-rw-r--r--src/managment/builder/mail.cpp14
-rw-r--r--src/managment/builder/mail.hpp16
-rw-r--r--src/managment/builder/settings.cpp18
-rw-r--r--src/managment/builder/settings.hpp19
-rw-r--r--src/managment/mail.cpp25
-rw-r--r--src/managment/mail.hpp23
-rw-r--r--src/managment/settings.cpp (renamed from src/service/settings.cpp)18
-rw-r--r--src/managment/settings.hpp27
-rw-r--r--src/message/builder/cc.cpp12
-rw-r--r--src/message/builder/cc.hpp1
-rw-r--r--src/message/sender.cpp27
-rw-r--r--src/message/sender.hpp18
-rw-r--r--src/service/settings.hpp36
-rw-r--r--src/service/smtp.cpp15
-rw-r--r--src/service/smtp.hpp8
25 files changed, 539 insertions, 89 deletions
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 <fstream>
+
+#include "mail.hpp"
+
+namespace smtp::file
+{
+ Mail::Mail( std::string const& path_file )
+ : PathFile( path_file )
+ {
+
+ }
+
+ std::list<std::string> 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<std::string> result;
+
+ while ( std::getline( mail_file, line ) )
+ {
+ auto parsed_data = GetMailFromLine( line );
+ if( parsed_data )
+ {
+ result.push_back( *parsed_data );
+ }
+ }
+ return result;
+ }
+
+ std::optional<std::string> 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 <list>
+#include <string>
+#include <optional>
+
+namespace smtp::file
+{
+ class Mail
+ {
+ public:
+ explicit Mail( std::string const& path_file );
+ ~Mail() = default;
+
+ std::list<std::string> Read() const;
+ private:
+ std::optional<std::string> 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 <utility>
+#include <string>
+
+namespace smtp::file::parser
+{
+ using ParseResult = std::pair<std::string,std::string>;
+
+ 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 <fstream>
+
+#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 <list>
+#include <string>
+
+#include "settings_converter.hpp"
+#include "parser/settings.hpp"
+
+namespace smtp::file
+{
+ using ParsedStoreType = std::unordered_map<std::string, std::string>;
+
+ 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<std::string, std::string> SettingsConverter::Convert( SettingsFields const& from ) const
+ {
+ std::unordered_map<std::string, std::string> 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 <unordered_map>
+#include <string>
+
+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<std::string, std::string>;;
+
+ class SettingsConverter
+ {
+ public:
+ SettingsConverter() = default;
+ ~SettingsConverter() = default;
+
+ SettingsFields Convert( std::unordered_map<std::string, std::string> const& from ) const;
+ std::unordered_map<std::string, std::string> 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 <sdbusplus/asio/connection.hpp>
#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<sdbusplus::asio::connection>( 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<std::string> 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 <list>
+#include <string>
+
+#include "file/mail.hpp"
+
+namespace smtp::manage
+{
+ class Mail
+ {
+ public:
+ explicit Mail( file::Mail const& file_reader);
+ ~Mail() = default;
+
+ std::list<std::string> GetMailToSend() const;
+ bool AddMailToSend();
+ bool DeleteMailToSend( std::string const& mail_to_send );
+ private:
+ std::list<std::string> mMails;
+ };
+
+}
diff --git a/src/service/settings.cpp b/src/managment/settings.cpp
index 075aafa..72396f8 100644
--- a/src/service/settings.cpp
+++ b/src/managment/settings.cpp
@@ -1,26 +1,17 @@
#include "settings.hpp"
-namespace smtp::service
+namespace smtp::manage
{
-
- Settings::Settings()
- : mSettingsFields{}
+ Settings::Settings( file::Settings const& file_reader )
{
-
+ mSettingsFields = file_reader.Read();
}
- Settings::Settings( SettingsFields data )
- : mSettingsFields(data)
+ bool Settings::SetSettings( file::SettingsFields const& settings_fields )
{
}
- bool Settings::CheckAndSetSettings(SettingsFields data)
- {
- mSettingsFields = data;
- return true;
- }
-
bool Settings::IsNeedAuth() const noexcept
{
return mSettingsFields.is_need_auth;
@@ -50,5 +41,4 @@ namespace smtp::service
{
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 <string>
+
+#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<std::string> 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<std::string> 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<std::string> 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<builder::Text>( text );
text_decorator->Apply( std::make_shared<builder::Subject>( subject ) )
- .Apply( std::make_shared<builder::Cc>( cc ) )
+ .Apply( std::make_shared<builder::Cc>( mail_to ) )
.Apply( std::make_shared<builder::From>( mail_from ) )
- .Apply( std::make_shared<builder::MailTo>( mail_to ) )
+ .Apply( std::make_shared<builder::MailTo>( mail_to.front() ) )
.Apply( std::make_shared<builder::Date>() );
mText = text_decorator->Get();
std::cout << mText << std::endl;
}
- void Sender::FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> 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 <curl/curl.h>
-#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<std::string> 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<std::string> 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<std::string> const& mail_to );
- void FillRecipients( CURL* curl, std::string const& mail_to, std::list<std::string> 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.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 <string>
-
-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 <iostream>
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<std::string> 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 <sdbusplus/asio/connection.hpp>
#include <sdbusplus/asio/object_server.hpp>
-#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;
};
}