From 6cfc7076808138be2ad5a2b05edd635b5948bf31 Mon Sep 17 00:00:00 2001 From: claiff Date: Wed, 21 Sep 2022 15:50:24 +0300 Subject: add port errors check --- CMakeLists.txt | 4 +-- src/checker/errors/settings/host_number.cpp | 36 --------------------- src/checker/errors/settings/host_number.hpp | 17 ---------- src/checker/errors/settings/port_number.cpp | 48 ++++++++++++++++++++++++++++ src/checker/errors/settings/port_number.hpp | 17 ++++++++++ src/checker/errors/types/isettings_error.hpp | 2 +- src/converter/file.hpp | 2 +- src/converter/full.hpp | 4 +-- src/converter/settings.hpp | 2 +- src/converter/string.hpp | 2 +- src/file/mail.cpp | 2 +- src/file/mail.hpp | 2 +- src/file/settings.cpp | 38 +++++++++++++++------- src/file/settings.hpp | 27 ++++++++-------- src/main.cpp | 4 +-- src/management/builder/mail.hpp | 2 +- src/management/builder/settings.cpp | 4 +-- src/management/builder/settings.hpp | 2 +- src/management/settings.hpp | 3 +- src/message/builder/cc.hpp | 2 +- src/message/builder/mail_to.hpp | 2 +- src/message/sender.cpp | 2 +- src/message/sender.hpp | 5 ++- src/service/smtp.hpp | 4 +-- 24 files changed, 131 insertions(+), 102 deletions(-) delete mode 100644 src/checker/errors/settings/host_number.cpp delete mode 100644 src/checker/errors/settings/host_number.hpp create mode 100644 src/checker/errors/settings/port_number.cpp create mode 100644 src/checker/errors/settings/port_number.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a1916b..a640f3e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,8 +141,8 @@ set(SRC_FILES ${CHECKER_DIR}/registrator_mails.cpp ${CHECKER_DIR}/registrator_settings.hpp - ${CHECKER_DIR}/errors/settings/host_number.cpp - ${CHECKER_DIR}/errors/settings/host_number.hpp + ${CHECKER_DIR}/errors/settings/port_number.cpp + ${CHECKER_DIR}/errors/settings/port_number.hpp ${CHECKER_DIR}/errors/mail/empty.hpp ${CHECKER_DIR}/errors/mail/empty.cpp diff --git a/src/checker/errors/settings/host_number.cpp b/src/checker/errors/settings/host_number.cpp deleted file mode 100644 index 3580265..0000000 --- a/src/checker/errors/settings/host_number.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "host_number.hpp" -#include "managment/logger.hpp" -#include -namespace smtp::checker::errors::settings -{ - bool HostNumber::Check( const manage::SettingsFileDataType& line ) const - { - //TODO общее использование полей - auto find = line.find("host"); - if(find == line.end()) - { - manage::Logger::LogError("Host doesn't found"); - return false; - } - int host_as_int{}; - auto host_as_string = find->second; - if(host_as_string.empty()) - { - return true; - } - - try - { - host_as_int = std::stoi( host_as_string ); - } - catch( std::invalid_argument const& ex ) - { - manage::Logger::LogError("Host doesn't entered by numbers"); - } - catch( std::out_of_range const& ex ) - { - manage::Logger::LogError("Host out of range"); - } - return host_as_int >= 0 && host_as_int <= 65535; - } -} diff --git a/src/checker/errors/settings/host_number.hpp b/src/checker/errors/settings/host_number.hpp deleted file mode 100644 index 1f2bfe7..0000000 --- a/src/checker/errors/settings/host_number.hpp +++ /dev/null @@ -1,17 +0,0 @@ -#pragma once - -#include "checker/errors/types/isettings_error.hpp" - -namespace smtp::checker::errors::settings -{ - class HostNumber : public types::IErrorSettings - { - public: - HostNumber() = default; - ~HostNumber() override = default; - - virtual bool Check( const manage::SettingsFileDataType& line ) const override; - }; -} - - diff --git a/src/checker/errors/settings/port_number.cpp b/src/checker/errors/settings/port_number.cpp new file mode 100644 index 0000000..b02eec4 --- /dev/null +++ b/src/checker/errors/settings/port_number.cpp @@ -0,0 +1,48 @@ +#include + +#include "port_number.hpp" +#include "management/logger.hpp" + +namespace smtp::checker::errors::settings +{ + bool PortNumber::Check( const manage::SettingsFileDataType& line ) const + { + static const std::string PORT_FIELD = "port"; + static constexpr int MIN_PORT_NUMBER = 0; + static constexpr int MAX_PORT_NUMBER = 65535; + + //TODO общее использование полей + auto find = line.find( PORT_FIELD ); + if( find == line.end() ) + { + manage::Logger::LogError( "Port doesn't found" ); + return false; + } + auto host_as_string = find->second; + if( host_as_string.empty()) + { + return true; + } + int host_as_int{}; + try + { + host_as_int = std::stoi( host_as_string ); + } + catch( std::invalid_argument const& ex ) + { + manage::Logger::LogError( "Port doesn't entered by numbers" ); + return false; + } + catch( std::out_of_range const& ex ) + { + manage::Logger::LogError( "Port out of range" ); + return false; + } + catch( ... ) + { + manage::Logger::LogError( "Port doesn't entered by numbers" ); + return false; + } + return host_as_int >= MIN_PORT_NUMBER && host_as_int <= MAX_PORT_NUMBER; + } +} diff --git a/src/checker/errors/settings/port_number.hpp b/src/checker/errors/settings/port_number.hpp new file mode 100644 index 0000000..42ab808 --- /dev/null +++ b/src/checker/errors/settings/port_number.hpp @@ -0,0 +1,17 @@ +#pragma once + +#include "checker/errors/types/isettings_error.hpp" + +namespace smtp::checker::errors::settings +{ + class PortNumber : public types::IErrorSettings + { + public: + PortNumber() = default; + ~PortNumber() override = default; + + bool Check( const manage::SettingsFileDataType& line ) const override; + }; +} + + diff --git a/src/checker/errors/types/isettings_error.hpp b/src/checker/errors/types/isettings_error.hpp index d5a788f..05f68e3 100644 --- a/src/checker/errors/types/isettings_error.hpp +++ b/src/checker/errors/types/isettings_error.hpp @@ -6,7 +6,7 @@ #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::checker::errors::types { diff --git a/src/converter/file.hpp b/src/converter/file.hpp index 64ef152..daa35fd 100644 --- a/src/converter/file.hpp +++ b/src/converter/file.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::converter { diff --git a/src/converter/full.hpp b/src/converter/full.hpp index 7025324..dac7499 100644 --- a/src/converter/full.hpp +++ b/src/converter/full.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::converter { @@ -13,7 +13,7 @@ namespace smtp::converter Full() = default; ~Full() = default; - manage::SettingsFields Convert( std::unordered_map const& from ) const; + manage::SettingsFields Convert( manage::SettingsFileDataType const& from ) const; std::unordered_map Convert( manage::SettingsFields const& from ) const; private: diff --git a/src/converter/settings.hpp b/src/converter/settings.hpp index d25a550..5278b16 100644 --- a/src/converter/settings.hpp +++ b/src/converter/settings.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::converter { diff --git a/src/converter/string.hpp b/src/converter/string.hpp index f1752ad..555e04b 100644 --- a/src/converter/string.hpp +++ b/src/converter/string.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::converter { diff --git a/src/file/mail.cpp b/src/file/mail.cpp index c728edc..2b1ff14 100644 --- a/src/file/mail.cpp +++ b/src/file/mail.cpp @@ -1,7 +1,7 @@ #include #include "mail.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::file { diff --git a/src/file/mail.hpp b/src/file/mail.hpp index 2860c79..148aa11 100644 --- a/src/file/mail.hpp +++ b/src/file/mail.hpp @@ -3,7 +3,7 @@ #include #include -#include "managment/general.hpp" +#include "management/general.hpp" #include "checker/registrator_mails.hpp" namespace smtp::file diff --git a/src/file/settings.cpp b/src/file/settings.cpp index a856f6e..710b67f 100644 --- a/src/file/settings.cpp +++ b/src/file/settings.cpp @@ -1,10 +1,13 @@ #include #include "settings.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::file { + // + //Constructors + // Settings::Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ) : mPathFile( path_file ) , mRegistratorErrors( registrator_errors ) @@ -12,6 +15,9 @@ namespace smtp::file } + // + //Public methods + // manage::SettingsFields Settings::Read() const { auto parsed_store = GetParsedStore(); @@ -21,9 +27,12 @@ namespace smtp::file bool Settings::Write( manage::SettingsFields const& settings_fields ) const { auto parsed_data = converter::Full{}.Convert( settings_fields ); - return SetParsedData( parsed_data ); + return mRegistratorErrors.Check( parsed_data ) && SetParsedData( parsed_data ); } + // + //Private methods + // manage::SettingsFileDataType Settings::GetParsedStore() const { std::ifstream settings_file{ mPathFile, std::fstream::in }; @@ -32,19 +41,26 @@ namespace smtp::file manage::Logger::LogError( "Unable to open file to read " + mPathFile ); return {}; } - std::string line{}; - manage::SettingsFileDataType result; + auto result = GetDataFromFile( settings_file ); - while ( std::getline( settings_file, line ) ) - { - auto parsed_data = parser::Settings{}.Parse( line ); - result.insert( parsed_data ); - } - settings_file.close(); + settings_file.close(); return mRegistratorErrors.Check(result) ? result : manage::SettingsFileDataType{}; } - bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const + manage::SettingsFileDataType Settings::GetDataFromFile( std::ifstream& settings_file ) const + { + std::string line{}; + manage::SettingsFileDataType result; + + while ( std::getline( settings_file, line ) ) + { + auto parsed_data = parser::Settings{}.Parse( line ); + result.insert( parsed_data ); + } + return result; + } + + bool Settings::SetParsedData( manage::SettingsFileDataType const& parsed_data ) const { std::ofstream settings_file{ mPathFile, std::fstream::out | std::fstream::trunc }; if ( !settings_file.is_open() ) diff --git a/src/file/settings.hpp b/src/file/settings.hpp index 7e5ce63..0882ac3 100644 --- a/src/file/settings.hpp +++ b/src/file/settings.hpp @@ -5,28 +5,29 @@ #include "converter/full.hpp" #include "parser/settings.hpp" -#include "managment/general.hpp" +#include "management/general.hpp" #include "checker/registrator_settings.hpp" namespace smtp::file { - class Settings - { - public: - explicit Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ); - ~Settings() = default; + class Settings + { + public: + explicit Settings( std::string const& path_file, checker::RegistratorSettings const& registrator_errors ); + ~Settings() = default; - manage::SettingsFields Read() const; - bool Write( manage::SettingsFields const& settings_fields ) const; - private: + manage::SettingsFields Read() const; + bool Write( manage::SettingsFields const& settings_fields ) const; + private: manage::SettingsFileDataType GetParsedStore() const; - bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; - std::string BuildParam( std::pair const& data ) const; + bool SetParsedData( manage::SettingsFileDataType const& parsed_data ) const; + std::string BuildParam( std::pair < std::string, std::string > const& data ) const; - std::string mPathFile; + std::string mPathFile; checker::RegistratorSettings mRegistratorErrors; - }; + manage::SettingsFileDataType GetDataFromFile( std::ifstream& settings_file ) const; + }; } diff --git a/src/main.cpp b/src/main.cpp index b58bb69..cc92f3f 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,8 +1,8 @@ #include #include "service/smtp.hpp" -#include "managment/builder/mail.hpp" -#include "managment/builder/settings.hpp" +#include "management/builder/mail.hpp" +#include "management/builder/settings.hpp" int main() { diff --git a/src/management/builder/mail.hpp b/src/management/builder/mail.hpp index ad1de36..e735fd6 100644 --- a/src/management/builder/mail.hpp +++ b/src/management/builder/mail.hpp @@ -1,6 +1,6 @@ #pragma once -#include "managment/mail.hpp" +#include "management/mail.hpp" #include "checker/registrator_mails.hpp" namespace smtp::manage::builder diff --git a/src/management/builder/settings.cpp b/src/management/builder/settings.cpp index d5a5e3b..baa45da 100644 --- a/src/management/builder/settings.cpp +++ b/src/management/builder/settings.cpp @@ -1,5 +1,5 @@ #include "settings.hpp" -#include "checker/errors/settings/host_number.hpp" +#include "checker/errors/settings/port_number.hpp" namespace smtp::manage::builder { @@ -22,7 +22,7 @@ namespace smtp::manage::builder { checker::RegistratorSettings result; - result.Add( std::make_shared < checker::errors::settings::HostNumber >()); + result.Add( std::make_shared < checker::errors::settings::PortNumber >()); return result; } diff --git a/src/management/builder/settings.hpp b/src/management/builder/settings.hpp index 67b7481..64f9384 100644 --- a/src/management/builder/settings.hpp +++ b/src/management/builder/settings.hpp @@ -1,6 +1,6 @@ #pragma once -#include "managment/settings.hpp" +#include "management/settings.hpp" #include "file/settings.hpp" #include "checker/registrator_settings.hpp" diff --git a/src/management/settings.hpp b/src/management/settings.hpp index 3c0a15d..650f966 100644 --- a/src/management/settings.hpp +++ b/src/management/settings.hpp @@ -3,7 +3,8 @@ #include #include "file/settings.hpp" -#include "managment/general.hpp" +#include "management/general.hpp" + namespace smtp::manage { class Settings diff --git a/src/message/builder/cc.hpp b/src/message/builder/cc.hpp index dbca4b7..9eee0a7 100644 --- a/src/message/builder/cc.hpp +++ b/src/message/builder/cc.hpp @@ -2,7 +2,7 @@ #include "types/idecorator.hpp" #include "types/imessage_builder.hpp" -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::message::builder { diff --git a/src/message/builder/mail_to.hpp b/src/message/builder/mail_to.hpp index 1c21684..626f210 100644 --- a/src/message/builder/mail_to.hpp +++ b/src/message/builder/mail_to.hpp @@ -2,7 +2,7 @@ #include "types/idecorator.hpp" #include "types/imessage_builder.hpp" -#include "managment/general.hpp" +#include "management/general.hpp" namespace smtp::message::builder { diff --git a/src/message/sender.cpp b/src/message/sender.cpp index 5b3a421..c617a16 100644 --- a/src/message/sender.cpp +++ b/src/message/sender.cpp @@ -7,7 +7,7 @@ #include "builder/subject.hpp" #include "builder/text.hpp" #include "builder/from.hpp" -#include "managment/logger.hpp" +#include "management/logger.hpp" namespace smtp::message { diff --git a/src/message/sender.hpp b/src/message/sender.hpp index ca2c3ff..ba5953e 100644 --- a/src/message/sender.hpp +++ b/src/message/sender.hpp @@ -5,8 +5,8 @@ #include -#include "managment/settings.hpp" -#include "managment/mail.hpp" +#include "management/settings.hpp" +#include "management/mail.hpp" namespace smtp::message { struct WriteThis @@ -23,7 +23,6 @@ namespace smtp::message 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& subject, std::string const& textt ) const; - void InitSenders( std::string const& mail_from, std::list const& mail_to ); 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 ); diff --git a/src/service/smtp.hpp b/src/service/smtp.hpp index a52c9c0..1c71acc 100644 --- a/src/service/smtp.hpp +++ b/src/service/smtp.hpp @@ -5,8 +5,8 @@ #include #include -#include "managment/mail.hpp" -#include "managment/settings.hpp" +#include "management/mail.hpp" +#include "management/settings.hpp" namespace smtp::service { -- cgit v1.2.3