summaryrefslogtreecommitdiff
path: root/src/service/smtp.cpp
blob: 90e3acc081b0ac2aff830592840e73b61e7c6002 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#include "smtp.hpp"
#include "message/sender.hpp"

namespace smtp::service
{
    //
    // Constructors
    //

    Smtp::Smtp( ConnectionPtr connection, manage::Settings const& settings, manage::Mail const& mail_to )
        :mSettingsStorage(settings), mMailTo(mail_to)
    {
        CreateService( connection );
        CreateMessengerInterface( connection );
        CreateSettingsManagerInterface( connection );
        CreateMailManagerInterface( connection );
    }

    //
    // Private methods
    //

    void Smtp::CreateService( ConnectionPtr connection )
    {
        static constexpr char SMTP_BUS_NAME[] = "xyz.openbmc_project.SMTP";

        connection->request_name( SMTP_BUS_NAME );
    }

    void Smtp::CreateMessengerInterface( ConnectionPtr connection )
    {
        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<sdbusplus::asio::object_server>( connection );
		mMessengerInterface = mObjectServer->add_interface( SMTP_OBJECT_NAME, SMTP_INTERFACE_NAME );

		AddMessengerMethods();

        mMessengerInterface->initialize();
    }

    void Smtp::CreateSettingsManagerInterface(ConnectionPtr connection)
    {
        static constexpr char SMTP_MANAGER_OBJECT_NAME[] = "/xyz/openbmc_project/SMTP/Manager";
        static constexpr char SMTP_SETTINGS_MANAGER_INTERFACE_NAME[] = "xyz.openbmc_project.SettingsManager";

        mObjectServer = std::make_shared<sdbusplus::asio::object_server>( connection );
        mManagerSettingsInterface = mObjectServer->add_interface( SMTP_MANAGER_OBJECT_NAME, SMTP_SETTINGS_MANAGER_INTERFACE_NAME );

        AddSettingsManagerMethods();

        mManagerSettingsInterface->initialize();
    }

    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<sdbusplus::asio::object_server>( connection );
        mManagerMailInterface = mObjectServer->add_interface( SMTP_MANAGER_OBJECT_NAME, SMTP_MAIL_MANAGER_INTERFACE_NAME );

        AddMailManagerMethods();

        mManagerMailInterface->initialize();
    }

    void Smtp::AddMessengerMethods()
    {
        static constexpr char SMTP_SEND_MESSAGE_METHOD_NAME[] = "SendMail";

        mMessengerInterface->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 );});
    }

    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 )
                                                                    { return mSettingsStorage.SetSettings({ is_need_auth, is_need_ssl,
                                                                                                            user, password, host, port});});

        mManagerSettingsInterface->register_method(SMTP_GET_SETTINGS_METHOD_NAME, [this](){ return mSettingsStorage.GetSettings();});
    }

    void Smtp::AddMailManagerMethods()
    {
        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);});
    }
}