From cfbc440dc80c9ca7b5e2bdcb5a0996144f014f9a Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 7 Dec 2023 15:33:34 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-758=20-=20=D0=A0?= =?UTF-8?q?=D0=B0=D0=B7=D1=80=D0=B5=D1=88=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20=D1=81=20SMTP=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20TLS=20=D0=B8=20=D0=B0=D1=83=D1=82=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config.js | 4 ++++ core/notifier.js | 2 +- core/utils.js | 18 +++++++++++++----- models/obj_config.js | 18 ++++++++++++++++++ 4 files changed, 36 insertions(+), 6 deletions(-) diff --git a/config.js b/config.js index c6c8ed3..52de5e9 100644 --- a/config.js +++ b/config.js @@ -77,10 +77,14 @@ let mail = { sHost: "smtp.mail.ru", //Порт сервера SMTP nPort: 465, + //Использовать безопасное соединение SMTP (true - использование TLS/SSL, false - использование только в случае наличия STARTTLS) + bSecure: true, //Имя пользователя SMTP-сервера sUser: "appserver@citk-parus.ru", //Пароль пользователя SMTP-сервера sPass: "", + //Отображать ошибку о некорректном сертификате при проверке безопасности + bRejectUnauthorized: true, //Наименование отправителя для исходящих сообщений sFrom: "'Сервис интеграции с WEB-API' " }; diff --git a/core/notifier.js b/core/notifier.js index 8b21440..30f4060 100644 --- a/core/notifier.js +++ b/core/notifier.js @@ -113,7 +113,7 @@ class Notifier extends EventEmitter { if (!message.bSent) { try { //Если всё в порядке с настройками - if (this.mail.sHost && this.mail.nPort && this.mail.sUser && this.mail.sPass && this.mail.sFrom) { + if (this.mail.sHost && this.mail.nPort && this.mail.sFrom && this.mail.hasOwnProperty('bSecure') && this.mail.hasOwnProperty('bRejectUnauthorized')) { //Отправляем await sendMail({ mail: this.mail, diff --git a/core/utils.js b/core/utils.js index e8d5b9b..a87978b 100644 --- a/core/utils.js +++ b/core/utils.js @@ -182,16 +182,24 @@ const sendMail = prms => { ); //Если структура объекта в норме if (!sCheckResult) { - //Параметры подключения к SMTP-серверу - let transporter = nodemailer.createTransport({ + //Формируем параметры для подключения к SMTP + let transpOptions = { host: prms.mail.sHost, port: prms.mail.nPort, - secure: prms.mail.nPort == 465, - auth: { + secure: prms.mail.bSecure, + tls: { + rejectUnauthorized: prms.mail.bRejectUnauthorized + } + }; + //Если есть информация о пользователе - добавляем + if (prms.mail.sUser) { + transpOptions.auth = { user: prms.mail.sUser, pass: prms.mail.sPass } - }); + } + //Настраиваем подключение к SMTP-серверу + let transporter = nodemailer.createTransport(transpOptions); //Параметры отправляемого сообщения let mailOptions = { from: prms.mail.sFrom, diff --git a/models/obj_config.js b/models/obj_config.js index 44c0848..c10b0c1 100644 --- a/models/obj_config.js +++ b/models/obj_config.js @@ -356,6 +356,15 @@ const mail = new Schema({ required: path => `Не указан порт сервера SMTP (${path})` } }, + //Использовать безопасное соединение STMP + bSecure: { + type: Boolean, + required: false, + message: { + type: path => `Использование безопасного соединения SMTP (${path}) имеет некорректный тип данных (ожидалось - Boolean)`, + required: path => `Не указано использование безопасного соединения SMTP (${path})` + } + }, //Имя пользователя SMTP-сервера sUser: { type: String, @@ -375,6 +384,15 @@ const mail = new Schema({ required: path => `Не указан пароль пользователя SMTP-сервера (${path})` } }, + //Отображать ошибку о некорректном сертификате при проверке безопасности + bRejectUnauthorized: { + type: Boolean, + required: false, + message: { + type: path => `Отображение ошибки о некорректном сертификате SMTP (${path}) имеет некорректный тип данных (ожидалось - Boolean)`, + required: path => `Не указано отображение ошибки о некорректном сертификате (${path})` + } + }, //Наименование отправителя для исходящих сообщений sFrom: { type: String, From 3594a00202410795b824a246c5ac1661a6bbdb73 Mon Sep 17 00:00:00 2001 From: Dollerino Date: Thu, 7 Dec 2023 15:35:35 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=A6=D0=98=D0=A2=D0=9A-43=20-=20=D0=9F?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D1=84=D0=BE=D1=80=D0=BC=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B8=20URL?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/utils.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/utils.js b/core/utils.js index a87978b..13d309a 100644 --- a/core/utils.js +++ b/core/utils.js @@ -238,8 +238,8 @@ const buildURL = prms => { let sCheckResult = validateObject(prms, prmsUtilsSchema.buildURL, "Параметры функции формирования URL"); //Если структура объекта в норме if (!sCheckResult) { - //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! КОНТРОЛЬ КОРРЕКТНОСТИ - return `${prms.sSrvRoot}/${prms.sFnURL}${prms.sQuery ? `?${prms.sQuery}` : ""}`; + //Формируем URL с учетом лишних "/" + return `${prms.sSrvRoot.replace(/\/+$/, '')}/${prms.sFnURL.replace(/^\/+/, '')}${prms.sQuery ? `?${prms.sQuery}` : ""}`; } else { throw new ServerError(SERR_OBJECT_BAD_INTERFACE, sCheckResult); }