unknown 1 year ago
parent
commit
1529548683
5 changed files with 242 additions and 28 deletions
  1. 50 27
      controllers/user.js
  2. 10 0
      helpers/aws.js
  3. 2 1
      helpers/twilio.js
  4. 179 0
      package-lock.json
  5. 1 0
      package.json

+ 50 - 27
controllers/user.js

@@ -8,10 +8,13 @@ const path = require('path');
 const jwt = require('jsonwebtoken');
 const createFolderIsExist = require('../helpers/create-directory');
 require('dotenv').config();
+const s3 = require('../helpers/aws');
 const client = require('../helpers/twilio');
 const phoneToken = require('generate-sms-verification-code');
 const SECRET_KEY = process.env.JWT_SECRET;
 const DIR_STATIC = process.env.DIR_STATIC;
+const DIR_UPLOAD = process.env.DIR_UPLOAD;
+const AWS_BUCKET_NAME = process.env.AWS_BUCKET_NAME;
 
 const createNewUser = async (req, res, next) => {
 	try {
@@ -206,35 +209,55 @@ const removeAvatar = async (req, res, next) => {
 
 const updateAvatar = async (req, res, next) => {
 	try {
-		const userId = req.user.id;
-		const userNumber = req.user.number;
-		const token = req.user.token;
+		const { token, id } = req.user;
 		const pathToFile = req.file.path;
 		const originalName = req.file.originalname;
-		const newNameAvatar = `${Math.round(Date.now() / 1000)}${originalName}`;
-		await createFolderIsExist(path.join(DIR_STATIC, userId));
-		const img = await Jimp.read(pathToFile);
-		await img
-			.autocrop()
-			.cover(
-				250,
-				250,
-				Jimp.HORIZONTAL_ALIGN_CENTER | Jimp.VERTICAL_ALIGN_MIDDLE
-			)
-			.writeAsync(pathToFile);
-		await fs.rename(pathToFile, path.join(DIR_STATIC, userId, newNameAvatar));
-		const avatarUrl = path.normalize(path.join(userId, newNameAvatar));
-		const avatarsArr = [
-			{ avatarUrl, updatedAt: new Date() },
-			...req.user.avatarsArr,
-		];
-		await UserModel.updateUser(userId, { avatarUrl, avatarsArr });
-		await ChatModel.updateCompanionsChat(userId, { avatarUrl, avatarsArr });
-		await ContactModel.updateCompanionsContact(userNumber, { avatarUrl });
-		await MessageModel.updateOwnerMessages(
-			{ companionIdFlow: { $eq: userId } },
-			{ avatarUrl }
-		);
+		// const newFileName = `${Math.round(Date.now() / 1000)}${id}${originalName}`;
+		// await fs.rename(
+		// 	path.join(DIR_UPLOAD, originalName),
+		// 	path.join(DIR_UPLOAD, newFileName)
+		// );
+		const fileContent = await fs.readFile(pathToFile);
+		const params = {
+			Bucket: AWS_BUCKET_NAME,
+			Key: `${originalName}`,
+			Body: fileContent,
+		};
+
+		s3.upload(params, (err, data) => {
+			if (err) throw err;
+			fs.unlink(pathToFile);
+			console.log(`File uploaded successfully. ${data.Location}`);
+		});
+
+		// const userId = req.user.id;
+		// const userNumber = req.user.number;
+		// const pathToFile = req.file.path;
+		// const originalName = req.file.originalname;
+		// const newNameAvatar = `${Math.round(Date.now() / 1000)}${originalName}`;
+		// await createFolderIsExist(path.join(DIR_STATIC, userId));
+		// const img = await Jimp.read(pathToFile);
+		// await img
+		// 	.autocrop()
+		// 	.cover(
+		// 		250,
+		// 		250,
+		// 		Jimp.HORIZONTAL_ALIGN_CENTER | Jimp.VERTICAL_ALIGN_MIDDLE
+		// 	)
+		// 	.writeAsync(pathToFile);
+		// await fs.rename(pathToFile, path.join(DIR_STATIC, userId, newNameAvatar));
+		// const avatarUrl = path.normalize(path.join(userId, newNameAvatar));
+		// const avatarsArr = [
+		// 	{ avatarUrl, updatedAt: new Date() },
+		// 	...req.user.avatarsArr,
+		// ];
+		// await UserModel.updateUser(userId, { avatarUrl, avatarsArr });
+		// await ChatModel.updateCompanionsChat(userId, { avatarUrl, avatarsArr });
+		// await ContactModel.updateCompanionsContact(userNumber, { avatarUrl });
+		// await MessageModel.updateOwnerMessages(
+		// 	{ companionIdFlow: { $eq: userId } },
+		// 	{ avatarUrl }
+		// );
 		return res.status(200).json({
 			status: 'success',
 			code: 200,

+ 10 - 0
helpers/aws.js

@@ -0,0 +1,10 @@
+const AWS = require('aws-sdk');
+const AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
+const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY;
+
+const s3 = new AWS.S3({
+	accessKeyId: AWS_ACCESS_KEY,
+	secretAccessKey: AWS_SECRET_ACCESS_KEY,
+});
+
+module.exports = s3;

+ 2 - 1
helpers/twilio.js

@@ -1,6 +1,7 @@
+const twilio = require('twilio');
 const ACCOUNT_SID = process.env.ACCOUNT_SID;
 const AUTH_TOKEN = process.env.AUTH_TOKEN;
-const twilio = require('twilio');
+
 const client = new twilio(ACCOUNT_SID, AUTH_TOKEN);
 
 module.exports = client;

+ 179 - 0
package-lock.json

@@ -8,6 +8,7 @@
 			"name": "template",
 			"version": "0.0.0",
 			"dependencies": {
+				"aws-sdk": "^2.1140.0",
 				"bcryptjs": "2.4.3",
 				"chalk": "^3.0.0",
 				"cloudinary": "1.25.0",
@@ -2111,6 +2112,71 @@
 				"node": ">= 4.5.0"
 			}
 		},
+		"node_modules/aws-sdk": {
+			"version": "2.1140.0",
+			"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1140.0.tgz",
+			"integrity": "sha512-cNdq56UQrUzXmCgwo0/J5GGLmfHn+Vp38qgcK/Xd86Sch8P9v2o8tNv7J82mYU98YY2vO007BMxRylA4Sd8PkQ==",
+			"dependencies": {
+				"buffer": "4.9.2",
+				"events": "1.1.1",
+				"ieee754": "1.1.13",
+				"jmespath": "0.16.0",
+				"querystring": "0.2.0",
+				"sax": "1.2.1",
+				"url": "0.10.3",
+				"uuid": "3.3.2",
+				"xml2js": "0.4.19"
+			},
+			"engines": {
+				"node": ">= 10.0.0"
+			}
+		},
+		"node_modules/aws-sdk/node_modules/buffer": {
+			"version": "4.9.2",
+			"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+			"integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+			"dependencies": {
+				"base64-js": "^1.0.2",
+				"ieee754": "^1.1.4",
+				"isarray": "^1.0.0"
+			}
+		},
+		"node_modules/aws-sdk/node_modules/ieee754": {
+			"version": "1.1.13",
+			"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+			"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+		},
+		"node_modules/aws-sdk/node_modules/sax": {
+			"version": "1.2.1",
+			"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+			"integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+		},
+		"node_modules/aws-sdk/node_modules/uuid": {
+			"version": "3.3.2",
+			"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+			"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
+			"deprecated": "Please upgrade  to version 7 or higher.  Older versions may use Math.random() in certain circumstances, which is known to be problematic.  See https://v8.dev/blog/math-random for details.",
+			"bin": {
+				"uuid": "bin/uuid"
+			}
+		},
+		"node_modules/aws-sdk/node_modules/xml2js": {
+			"version": "0.4.19",
+			"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+			"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+			"dependencies": {
+				"sax": ">=0.6.0",
+				"xmlbuilder": "~9.0.1"
+			}
+		},
+		"node_modules/aws-sdk/node_modules/xmlbuilder": {
+			"version": "9.0.7",
+			"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+			"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+			"engines": {
+				"node": ">=4.0"
+			}
+		},
 		"node_modules/aws-sign2": {
 			"version": "0.7.0",
 			"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -4235,6 +4301,14 @@
 				"node": ">= 0.6"
 			}
 		},
+		"node_modules/events": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+			"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=",
+			"engines": {
+				"node": ">=0.4.x"
+			}
+		},
 		"node_modules/exec-sh": {
 			"version": "0.3.4",
 			"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
@@ -7145,6 +7219,14 @@
 				"regenerator-runtime": "^0.13.3"
 			}
 		},
+		"node_modules/jmespath": {
+			"version": "0.16.0",
+			"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+			"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+			"engines": {
+				"node": ">= 0.6.0"
+			}
+		},
 		"node_modules/joi": {
 			"version": "17.4.0",
 			"resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz",
@@ -11163,6 +11245,15 @@
 			"deprecated": "Please see https://github.com/lydell/urix#deprecated",
 			"dev": true
 		},
+		"node_modules/url": {
+			"version": "0.10.3",
+			"resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+			"integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+			"dependencies": {
+				"punycode": "1.3.2",
+				"querystring": "0.2.0"
+			}
+		},
 		"node_modules/url-parse": {
 			"version": "1.5.4",
 			"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",
@@ -11184,6 +11275,11 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/url/node_modules/punycode": {
+			"version": "1.3.2",
+			"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+			"integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+		},
 		"node_modules/use": {
 			"version": "3.1.1",
 			"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -13370,6 +13466,63 @@
 			"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
 			"dev": true
 		},
+		"aws-sdk": {
+			"version": "2.1140.0",
+			"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1140.0.tgz",
+			"integrity": "sha512-cNdq56UQrUzXmCgwo0/J5GGLmfHn+Vp38qgcK/Xd86Sch8P9v2o8tNv7J82mYU98YY2vO007BMxRylA4Sd8PkQ==",
+			"requires": {
+				"buffer": "4.9.2",
+				"events": "1.1.1",
+				"ieee754": "1.1.13",
+				"jmespath": "0.16.0",
+				"querystring": "0.2.0",
+				"sax": "1.2.1",
+				"url": "0.10.3",
+				"uuid": "3.3.2",
+				"xml2js": "0.4.19"
+			},
+			"dependencies": {
+				"buffer": {
+					"version": "4.9.2",
+					"resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz",
+					"integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==",
+					"requires": {
+						"base64-js": "^1.0.2",
+						"ieee754": "^1.1.4",
+						"isarray": "^1.0.0"
+					}
+				},
+				"ieee754": {
+					"version": "1.1.13",
+					"resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz",
+					"integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg=="
+				},
+				"sax": {
+					"version": "1.2.1",
+					"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
+					"integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+				},
+				"uuid": {
+					"version": "3.3.2",
+					"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
+					"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+				},
+				"xml2js": {
+					"version": "0.4.19",
+					"resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
+					"integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+					"requires": {
+						"sax": ">=0.6.0",
+						"xmlbuilder": "~9.0.1"
+					}
+				},
+				"xmlbuilder": {
+					"version": "9.0.7",
+					"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+					"integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+				}
+			}
+		},
 		"aws-sign2": {
 			"version": "0.7.0",
 			"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
@@ -15056,6 +15209,11 @@
 			"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 			"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
 		},
+		"events": {
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz",
+			"integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ="
+		},
 		"exec-sh": {
 			"version": "0.3.4",
 			"resolved": "https://registry.npmjs.org/exec-sh/-/exec-sh-0.3.4.tgz",
@@ -17290,6 +17448,11 @@
 				"regenerator-runtime": "^0.13.3"
 			}
 		},
+		"jmespath": {
+			"version": "0.16.0",
+			"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+			"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
+		},
 		"joi": {
 			"version": "17.4.0",
 			"resolved": "https://registry.npmjs.org/joi/-/joi-17.4.0.tgz",
@@ -20520,6 +20683,22 @@
 			"integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
 			"dev": true
 		},
+		"url": {
+			"version": "0.10.3",
+			"resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz",
+			"integrity": "sha1-Ah5NnHcF8hu/N9A861h2dAJ3TGQ=",
+			"requires": {
+				"punycode": "1.3.2",
+				"querystring": "0.2.0"
+			},
+			"dependencies": {
+				"punycode": {
+					"version": "1.3.2",
+					"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
+					"integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
+				}
+			}
+		},
 		"url-parse": {
 			"version": "1.5.4",
 			"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.4.tgz",

+ 1 - 0
package.json

@@ -13,6 +13,7 @@
 		"test:watch": "jest --watchAll"
 	},
 	"dependencies": {
+		"aws-sdk": "^2.1140.0",
 		"bcryptjs": "2.4.3",
 		"chalk": "^3.0.0",
 		"cloudinary": "1.25.0",