Explorar o código

refactor: email is platform agnostic, allows for any provider through smtp

Signed-off-by: Jonathan <theflametrooper@gmail.com>
Jonathan %!s(int64=4) %!d(string=hai) anos
pai
achega
fe5620b6e2
Modificáronse 4 ficheiros con 4087 adicións e 19 borrados
  1. 10 5
      backend/config/template.json
  2. 23 10
      backend/logic/mail/index.js
  3. 4051 1
      backend/package-lock.json
  4. 3 3
      backend/package.json

+ 10 - 5
backend/config/template.json

@@ -22,11 +22,6 @@
 			"secret": "",
 			"redirect_uri": ""
 		},
-		"mailgun": {
-			"key": "",
-			"domain": "",
-			"enabled": false
-		},
 		"discogs": {
 			"client": "",
 			"secret": "",
@@ -40,6 +35,16 @@
 			"http://dev.musare.com"
 		]
 	},
+	"smtp": {
+		"host": "smtp.mailgun.org",
+		"port": 587,
+		"auth" : {
+			"user": "",
+			"pass": ""
+		},
+		"secure": false,
+		"enabled": false
+	},
 	"redis": {
 		"url": "redis://redis:6379/0",
 		"password": "PASSWORD"

+ 23 - 10
backend/logic/mail/index.js

@@ -1,6 +1,6 @@
 /* eslint-disable global-require */
 import config from "config";
-import Mailgun from "mailgun-js";
+import nodemailer from "nodemailer";
 
 import CoreClass from "../../core";
 
@@ -31,12 +31,17 @@ class _MailModule extends CoreClass {
 			passwordRequest: await importSchema("passwordRequest")
 		};
 
-		this.enabled = config.get("apis.mailgun.enabled");
+		this.enabled = config.get("smtp.enabled");
 
 		if (this.enabled)
-			this.mailgun = new Mailgun({
-				apiKey: config.get("apis.mailgun.key"),
-				domain: config.get("apis.mailgun.domain")
+			this.transporter = nodemailer.createTransport({
+				host: config.get("smtp.host"),
+				port: config.get("smtp.port"),
+				secure: config.get("smtp.secure"),
+				auth: {
+					user: config.get("smtp.auth.user"),
+					pass: config.get("smtp.auth.pass")
+				}
 			});
 
 		return new Promise(resolve => resolve());
@@ -50,12 +55,20 @@ class _MailModule extends CoreClass {
 	 * @returns {Promise} - returns promise (reject, resolve)
 	 */
 	SEND_MAIL(payload) {
-		return new Promise(resolve => {
+		return new Promise((resolve, reject) => {
 			if (MailModule.enabled)
-				MailModule.mailgun.messages().send(payload.data, () => {
-					resolve();
-				});
-			else resolve();
+				return MailModule.transporter
+					.sendMail(payload.data)
+					.then(info => {
+						MailModule.log("SUCCESS", "MAIL_SEND", `Successfully sent email ${info.messageId}`);
+						return resolve();
+					})
+					.catch(err => {
+						MailModule.log("ERROR", "MAIL_SEND", `Failed to send email. ${err}`);
+						return reject();
+					});
+
+			return resolve();
 		});
 	}
 

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 4051 - 1
backend/package-lock.json


+ 3 - 3
backend/package.json

@@ -23,14 +23,14 @@
     "cookie-parser": "^1.4.5",
     "cors": "^2.8.5",
     "express": "^4.17.1",
-    "mailgun-js": "^0.22.0",
     "moment": "^2.24.0",
     "mongoose": "^5.11.8",
+    "nodemailer": "^6.4.18",
     "oauth": "^0.9.15",
     "redis": "^2.8.0",
     "request": "^2.88.0",
     "sha256": "^0.2.0",
-    "socket.io": "^2.4.0",
+    "socket.io": "2.4.1",
     "underscore": "^1.10.2"
   },
   "devDependencies": {
@@ -43,4 +43,4 @@
     "prettier": "^2.2.1",
     "trace-unhandled": "^1.2.1"
   }
-}
+}

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio