From ff52ca186da4af19fc1cbfd8e0173148972b543b Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 11:09:29 +0530 Subject: [PATCH 1/8] migrated store to s3 --- package-lock.json | 236 +++++++++++++++++++++++++++++++++++++++++ package.json | 3 + routes/api/v1/index.js | 147 ++++++++++++++++++------- routes/settings.js | 171 +++++++++++++++-------------- views/me/settings.ejs | 4 +- 5 files changed, 444 insertions(+), 117 deletions(-) diff --git a/package-lock.json b/package-lock.json index b843cdd..4c96aa3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -180,6 +180,11 @@ "resolved": "https://registry.npmjs.org/apikeygen/-/apikeygen-1.1.0.tgz", "integrity": "sha512-745AtzPeNqukZIk4CTGl34GQ683VpmZiL+J+GNEWVWQLjgUy7rfLrsp0uWLoMsTzZqKuTDnAkltctNq734uzgQ==" }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -260,6 +265,22 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, + "aws-sdk": { + "version": "2.647.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.647.0.tgz", + "integrity": "sha512-yOORXYUpy2x7yantXF4rdobRPMsCUIc75Vmp9d1x397iWkQkEU9F7YEBR+QnoBoWs1DQZUV1DcSR5JJ4z43I2A==", + "requires": { + "buffer": "4.9.1", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.15.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "uuid": "3.3.2", + "xml2js": "0.4.19" + } + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -311,6 +332,11 @@ "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz", "integrity": "sha1-c5JncZI7Whl0etZmqlzUv5xunOg=" }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", @@ -493,6 +519,16 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz", "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg==" }, + "buffer": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -508,6 +544,38 @@ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=" }, + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", @@ -761,6 +829,17 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, "connect-mongo": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-3.2.0.tgz", @@ -911,6 +990,38 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + } + } + }, "diff": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", @@ -1098,6 +1209,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=" + }, "express": { "version": "4.17.1", "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", @@ -1558,6 +1674,11 @@ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" + }, "http-errors": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", @@ -1679,6 +1800,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "indexof": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", @@ -1791,6 +1917,14 @@ "has": "^1.0.3" } }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "requires": { + "html-comment-regex": "^1.1.0" + } + }, "is-symbol": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", @@ -1840,6 +1974,11 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-24.9.0.tgz", "integrity": "sha512-lUseMzAley4LhIcpSP9Jf+fTrQ4a1yHQwLNeeVa2cEmbCGeoZAtYPOIv8JaxLD/sUpKxetKGP+gsHl8f8TSj8Q==" }, + "jmespath": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz", + "integrity": "sha1-o/Iiqarp+Wb10nx5ZRDigJF2Qhc=" + }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -2380,6 +2519,38 @@ } } }, + "multer": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.2.tgz", + "integrity": "sha512-xY8pX7V+ybyUpbYMxtjM9KAiD9ixtg5/JkeKUTD6xilfDv0vzzOFcCp4Ljb1UU3tSOM3VTZtKo63OmzOrGi3Cg==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + } + }, + "multer-s3": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/multer-s3/-/multer-s3-2.9.0.tgz", + "integrity": "sha512-qLF8pCD5HhXLLd954q49B63x3bk6Fe0jqD3eM0FVcGtqhiSVuTrchEDAo0mnO5pc34cMuX/CVCCbPkGTjX2xUA==", + "requires": { + "file-type": "^3.3.0", + "is-svg": "^2.1.0", + "run-parallel": "^1.1.6" + }, + "dependencies": { + "file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=" + } + } + }, "mv": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", @@ -2465,6 +2636,11 @@ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "object-component": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", @@ -2992,6 +3168,11 @@ "glob": "^6.0.1" } }, + "run-parallel": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz", + "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==" + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -3011,6 +3192,11 @@ "sparse-bitfield": "^3.0.3" } }, + "sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" + }, "select": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", @@ -3269,6 +3455,11 @@ "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-0.1.1.tgz", "integrity": "sha1-DO5d+clZ+x0/TtpIGfKJ1fkgWvw=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -3452,6 +3643,11 @@ } } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -3505,6 +3701,22 @@ "punycode": "^2.1.0" } }, + "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=" + } + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3520,6 +3732,11 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, "validator": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.0.0.tgz", @@ -3628,6 +3845,20 @@ "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.1.tgz", "integrity": "sha512-sucePNSafamSKoOqoNfBd8V0StlkzJKL2ZAhGQinCfNQ+oacw+Pk7lcdAElecBF2VkLNZRiIb5Oi1Q5lVUVt2A==" }, + "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=" + }, "xmldom": { "version": "0.1.31", "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz", @@ -3638,6 +3869,11 @@ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "xtraverse": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz", diff --git a/package.json b/package.json index ba4004b..fa08be0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "dependencies": { "apikeygen": "^1.1.0", "array-tools": "2.0.9", + "aws-sdk": "^2.647.0", "axios": "^0.19.2", "bcrypt-nodejs": "0.0.3", "chai": "^4.2.0", @@ -34,6 +35,8 @@ "mocha": "^7.1.1", "mongoose": "^5.9.6", "morgan": "~1.10.0", + "multer": "^1.4.2", + "multer-s3": "^2.9.0", "mv": "2.1.1", "newsapi": "^2.4.0", "node-schedule": "^1.3.2", diff --git a/routes/api/v1/index.js b/routes/api/v1/index.js index a9b1853..41bad42 100644 --- a/routes/api/v1/index.js +++ b/routes/api/v1/index.js @@ -8,6 +8,11 @@ var ta = require("time-ago"); const Fuse = require("fuse.js"); const q = require("queue")({ autostart: true }); var _ = require("underscore"); +const multer = require("multer"); +const multerS3 = require("multer-s3"); +const AWS = require("aws-sdk"); +AWS.config.loadFromPath("../../../config/s3_config"); +const S3 = new AWS.S3(); // Rate limiting router.use(function(req, res, next) { @@ -44,42 +49,6 @@ router.get("/threat", (req, res, next) => { } }); -// router.post("/event", (req, res, next) => { -// if (req.body.key !== process.env.API_KEY) { -// return res.json({ success: false, error: "Inavlid API Key" }); -// } -// var date = new Date(); -// var payload = { -// text: req.body.text, -// title: req.body.title, -// link: { -// link_url: req.body.link_url, -// link_text: req.body.link_text -// } -// }; -// console.log(payload); -// req.app.events.push({ -// text: payload.text, -// title: payload.title, -// img: "/images/universe.png", -// time: [date, date.setDate(date.getDate() + 1)], -// link: { -// link_url: payload.link.link_url, -// link_text: payload.link.link_text -// }, -// type() { -// if (alertTypes.includes(payload.type)) { -// return payload.type; -// } -// } -// }); -// console.log(req.app.events); -// res.json({ -// success: true, -// data: req.app.events -// }); -// }); - router.get("/v1/posts", function(req, res) { if (!req.session.user) { res.sendStatus(404); @@ -234,4 +203,110 @@ router.post("/v1/notifications/markAsRead", function(req, res, next) { }); }); +router.post("/v1/user/:mode", function(req, res, next) { + if (!req.session.user) return res.sendStatus(404); + if (req.params.mode == "picture") { + db.findOne({ id: req.query.id }, (err, user) => { + if (!user) return res.sendStatus(404); + var image_types = ["png", "jpeg", "gif", "jpg"]; + var form = new formidable.IncomingForm(); + var buffer = null; + var fileName = ""; + + form.parse(req); + + form.on("fileBegin", function(name, file) { + if (!image_types.includes(file.name.split(".")[1].toLowerCase())) { + return res.status(404).send("Unsupported file type!"); + } + if ( + fs.existsSync( + __dirname.split("/routes")[0] + + "/public/images/profile_pictures/" + + user.id + + "." + + file.name.split(".")[1] + ) && + user.profile_picture + // user.profile_picture + ) { + fs.unlinkSync( + __dirname.split("/routes")[0] + + "/public/images/profile_pictures/" + + user.id + + "." + + file.name.split(".")[1] + ); + var params = { + Bucket: "frenly", + Key: "images" + user.profile_picture.split("images")[1] + }; + s3.deleteObject(params, (err, data) => { + if (err) console.log(err, err.stack); + }); + } + file.path = + __dirname.split("/routes")[0] + + "/public/images/profile_pictures/" + + user.id + + "." + + file.name.split(".")[1]; + }); + + form.on("file", function(name, file) { + if (!image_types.includes(file.name.split(".")[1].toLowerCase())) { + return; + } + buffer = fs.readFileSync(file.path); + fileName = file.name; + }); + + form.on("end", function() { + s3.putObject( + { + Bucket: "frenly", + Key: `images/profile_pictures/${user.id}.${fileName + .split(".")[1] + .toLowerCase()}`, + Body: buffer, + ACL: "public-read" + }, + (err, data) => { + if (err) console.log(err); + user[ + "profile_picture" + ] = `https://frenly.s3.ap-south-1.amazonaws.com/images/profile_pictures/${ + user.id + }.${fileName.split(".").pop().toLowerCase()}`; + user.save((err, savedUser) => { + console.log("updated"); + res + .status(200) + .send( + "/images/profile_pictures/" + + user.id + + "." + + fileName.split(".").pop() + ); + }); + } + ); + }); + // return; + }); + return; + } + db.findOne({ id: req.body.id }, (err, user) => { + if (err) return res.end(err); + if (!user) return res.sendStatus(404); + + user[req.body.key] = req.body.value; + user.save((err, profile) => { + res.status(200).send("done"); + }); + }); +}); + + + module.exports = router; diff --git a/routes/settings.js b/routes/settings.js index 6cb61ef..e9e0246 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -2,11 +2,28 @@ var express = require("express"); var router = express.Router(); var path = require("path"); var guid = require("guid"); +var _ = require("underscore"); var mv = require("mv"); const mime = require("mime-types"); var db = require("../utils/models/user"); var formParser = require("../utils/form-parser.js"); const fs = require("file-system"); +const multer = require("multer"); +const AWS = require("aws-sdk"); +const multerS3 = require("multer-s3"); +AWS.config.loadFromPath('../config/s3_config'); +const s3 = new AWS.S3(); +const upload = multer({ + storage: multerS3({ + s3, + bucket: "frenly", + acl: "public-read", + key: function (req, file, cb) { + cb(null, `feeds/${req.session.user.id}_${Date.now()}.${file.originalname + .split(".").pop().toLowerCase}`); + } + }) +}) var file_types = ["png", "jpeg", "gif", "jpg", "mov", "mp4"]; @@ -43,23 +60,25 @@ router.get("/post/:action/:query", function(req, res, next) { { db.findOne({ id: req.session.user.id }).exec((err, u) => { let id = req.params.query; - if (!u.posts[u.posts.indexOf(u.posts.find((x) => x._id === id))]) { + let postToDelete = _find(u.posts, (eachPost) => eachPost._id === id); + if (!postToDelete) { return res.redirect("/"); } - console.log(u); - if ( - u.posts[u.posts.indexOf(u.posts.find((x) => x._id === id))] && - u.posts[u.posts.indexOf(u.posts.find((x) => x._id === id))].static_url - ) { + if (postToDelete && postToDelete.static_url) { try { - let static_path = `./public${u.posts[u.posts.indexOf(u.posts.find((x) => x._id === id))].static_url}`; - fs.unlinkSync(static_path); - } catch (err) { - console.log(err, err.stack); - } + let params = { + bucket: "frenly", + Key: "feeds" + postToDelete.static_url.split("feeds")[1] + }; + s3.deleteObject(params,(err,data) => { + if(err) console.log(err,err.stack) + }); + } catch (err) { + console.log("Post could not be deleted"); + }; } - u.posts.splice(u.posts.indexOf(u.posts.find((x) => x._id === id)), 1); - u.save((err) => { + u.posts = _.reject(u.posts, (eachPost) => eachPost._id === id); + u.save((err, savedU) => { if (err) { throw err; } @@ -81,91 +100,85 @@ router.get("/upload", function(req, res, next) { }); }); -router.post("/upload", formParser, function(req, res, next) { - // Generate a random id - var random_id = guid.raw(); - var final_location = null, mimeType; - if (req.files.filetoupload.name) { - // Assign static_url path - var oldpath = req.files.filetoupload.path; - console.log(req.files.filetoupload.name); - var type = req.files.filetoupload.name.split(".")[req.files.filetoupload.name.split(".").length - 1].toLowerCase(); - if (file_types.indexOf(type) < 0) { - return res.status(403).render("error", { - error: new Error("Only images and videos are allowed for upload!") - }); - } - var newpath = path.join( - __dirname, - `../public/feeds/${req.session.user.username}_${random_id}.${type}` - ); - final_location = `/feeds/${req.session.user.username}_${random_id}.${type}`; - - console.log( - `${oldpath} - OldPath\n ${newpath} - Newpath\n ${final_location} - DiskLocation\n` - ); - // Finally upload the file to disk and save the feed to users profile. - mimeType = mime.lookup(req.files.filetoupload.name).split("/")[1]; - mv(oldpath, newpath, function(err) { - console.log("moving files"); - }); - } - +router.post("/upload", upload.single("filetoupload"), function(req, res, next) { db.findOne({ id: req.session.user.id }).exec((err, u) => { u.posts.push({ - _id: random_id, + _id: guid.raw(), author: req.session.user.username, authorID: req.session.user.id, - static_url: final_location, + static_url: (req.file) ? req.file.location : null, caption: req.body.caption, category: req.body.type, comments: [], likes: [], - type: mimeType, + type: (req.file) ? (req.file.originalname.split(".").pop().toLowerCase()) : null, createdAt: new Date(), lastEditedAt: new Date() }); - u = new db(u); - u.save((err) => { + u.save((err, savedU) => { if (err) { throw err; } console.log("Post saved"); - // Redirect back after the job is done. res.redirect("/"); }); }); }); -router.post("/upload/code", (req, res, next) => { - var random_id = guid.raw(); - console.log(req.body); - if (req.body.code) { - db.findOne({ username: req.session.user.username }).exec(function( - err, - user - ) { - user.posts.push({ - _id: random_id, - author: req.session.user.username, - authorID: req.session.user.id, - code: req.body.code, - comments: [], - caption: req.body.caption, - likes: [], - createdAt: new Date(), - lastEditedAt: new Date() - }); - user.save((err) => { - if (err) { - throw err; - } - console.log("Gist Saved"); - // Redirect back after the job is done. - res.redirect("/"); - }); - }); - } -}); +// router.post("/upload", formParser, function(req, res, next) { +// // Generate a random id +// var random_id = guid.raw(); +// var final_location = null, mimeType; +// if (req.files.filetoupload.name) { +// // Assign static_url path +// var oldpath = req.files.filetoupload.path; +// console.log(req.files.filetoupload.name); +// var type = req.files.filetoupload.name.split(".")[req.files.filetoupload.name.split(".").length - 1].toLowerCase(); +// if (file_types.indexOf(type) < 0) { +// return res.status(403).render("error", { +// error: new Error("Only images and videos are allowed for upload!") +// }); +// } +// var newpath = path.join( +// __dirname, +// `../public/feeds/${req.session.user.username}_${random_id}.${type}` +// ); +// final_location = `/feeds/${req.session.user.username}_${random_id}.${type}`; + +// console.log( +// `${oldpath} - OldPath\n ${newpath} - Newpath\n ${final_location} - DiskLocation\n` +// ); +// // Finally upload the file to disk and save the feed to users profile. +// mimeType = mime.lookup(req.files.filetoupload.name).split("/")[1]; +// mv(oldpath, newpath, function(err) { +// console.log("moving files"); +// }); +// } + +// db.findOne({ id: req.session.user.id }).exec((err, u) => { +// u.posts.push({ +// _id: random_id, +// author: req.session.user.username, +// authorID: req.session.user.id, +// static_url: final_location, +// caption: req.body.caption, +// category: req.body.type, +// comments: [], +// likes: [], +// type: mimeType, +// createdAt: new Date(), +// lastEditedAt: new Date() +// }); +// u = new db(u); +// u.save((err) => { +// if (err) { +// throw err; +// } +// console.log("Post saved"); +// // Redirect back after the job is done. +// res.redirect("/"); +// }); +// }); +// }); module.exports = router; diff --git a/views/me/settings.ejs b/views/me/settings.ejs index 2a2a0aa..32a35c9 100644 --- a/views/me/settings.ejs +++ b/views/me/settings.ejs @@ -24,7 +24,7 @@ <%- include('../footer') -%>
@@ -56,7 +56,7 @@ method: 'POST', url: '/api/v1/user/set', data: { - "_id":_id, + "id":id, key: key.toLowerCase().replace(' ', ''), value } From 8fa334bf29e2c0865cc0579c2b42ffbdc7f46c87 Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 11:11:10 +0530 Subject: [PATCH 2/8] modified gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 5e89ed0..bac0d09 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ node_modules/ public/cache/ public/feeds/ .prettierrc +config/s3_config.json From d8d5239800d1f7d284387813438206add7ed1136 Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 11:17:12 +0530 Subject: [PATCH 3/8] modified AWS credential load method --- routes/api/v1/index.js | 2 +- routes/settings.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api/v1/index.js b/routes/api/v1/index.js index 41bad42..983ce66 100644 --- a/routes/api/v1/index.js +++ b/routes/api/v1/index.js @@ -1,3 +1,4 @@ +require("dotenv").config(); var express = require("express"); var router = express.Router(); var path = require("path"); @@ -11,7 +12,6 @@ var _ = require("underscore"); const multer = require("multer"); const multerS3 = require("multer-s3"); const AWS = require("aws-sdk"); -AWS.config.loadFromPath("../../../config/s3_config"); const S3 = new AWS.S3(); // Rate limiting diff --git a/routes/settings.js b/routes/settings.js index e9e0246..cb81c6c 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -1,3 +1,4 @@ +require("dotenv").config(); var express = require("express"); var router = express.Router(); var path = require("path"); @@ -11,7 +12,6 @@ const fs = require("file-system"); const multer = require("multer"); const AWS = require("aws-sdk"); const multerS3 = require("multer-s3"); -AWS.config.loadFromPath('../config/s3_config'); const s3 = new AWS.S3(); const upload = multer({ storage: multerS3({ From 589c9775ebb05cd1a09e4ff13b1fb686493ae42b Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 11:29:57 +0530 Subject: [PATCH 4/8] minor fix --- routes/settings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/settings.js b/routes/settings.js index cb81c6c..496228e 100644 --- a/routes/settings.js +++ b/routes/settings.js @@ -43,7 +43,7 @@ router.get("/settings", function(req, res, next) { }); router.get("/activity", function(req, res, next) { - db.findOne({ _id: req.session.user._id }).exec((err, user) => { + db.findOne({ id: req.session.user.id }).exec((err, user) => { res.render("me/activity", { title: req.app.conf.name, activity: user.notifications @@ -60,7 +60,7 @@ router.get("/post/:action/:query", function(req, res, next) { { db.findOne({ id: req.session.user.id }).exec((err, u) => { let id = req.params.query; - let postToDelete = _find(u.posts, (eachPost) => eachPost._id === id); + let postToDelete = _.find(u.posts, (eachPost) => eachPost._id === id); if (!postToDelete) { return res.redirect("/"); } From ef76a8f400ac612a45921b7786fd9223d338c5f1 Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 16:53:04 +0530 Subject: [PATCH 5/8] shuffling users --- routes/index.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/routes/index.js b/routes/index.js index 50f6267..19cf59d 100644 --- a/routes/index.js +++ b/routes/index.js @@ -17,15 +17,17 @@ router.get("/", function(req, res, next) { return (eachUser.id === req_user.id || req_user.chats[eachUser.id] || pearsonCorrelation([underscore.values(req_user.bigFive), underscore.values(eachUser.bigFive)], 0, 1) < 0.5); }); - let suggestedUsers = []; - let suggestedUsersGroup = underscore.groupBy(users, function iteratee(eachUser) { - return Math.floor(eachUser.similarityIndex*10); - }); + let suggestedUsers = _.shuffle(users); + // let suggestedUsersGroup = underscore.groupBy(users, function iteratee(eachUser) { + // return Math.floor(eachUser.similarityIndex*10); + // }); + + // underscore.each(suggestedUsersGroup, (value, key) => { + // suggestedUsersGroup[key] = underscore.sortBy(value, (eachUser) => eachUser.rating.value); + // suggestedUsers = underscore.union(suggestedUsers, value); + // }) - underscore.each(suggestedUsersGroup, (value, key) => { - suggestedUsersGroup[key] = underscore.sortBy(value, (eachUser) => eachUser.rating.value); - suggestedUsers = underscore.union(suggestedUsers, value); - }) + getUserTone(req_user, function (err, mood) { res.render("index", { From f54555ee5deae874f74736e99bd9c8fbd529466e Mon Sep 17 00:00:00 2001 From: AlQaholic007 Date: Fri, 27 Mar 2020 17:21:13 +0530 Subject: [PATCH 6/8] fixing modal --- routes/index.js | 15 ++++++------ views/chat/index.ejs | 2 +- views/chat/room.ejs | 55 ++------------------------------------------ views/user/list.ejs | 2 +- 4 files changed, 11 insertions(+), 63 deletions(-) diff --git a/routes/index.js b/routes/index.js index 19cf59d..3613fc5 100644 --- a/routes/index.js +++ b/routes/index.js @@ -17,15 +17,14 @@ router.get("/", function(req, res, next) { return (eachUser.id === req_user.id || req_user.chats[eachUser.id] || pearsonCorrelation([underscore.values(req_user.bigFive), underscore.values(eachUser.bigFive)], 0, 1) < 0.5); }); - let suggestedUsers = _.shuffle(users); - // let suggestedUsersGroup = underscore.groupBy(users, function iteratee(eachUser) { - // return Math.floor(eachUser.similarityIndex*10); - // }); + let suggestedUsersGroup = underscore.groupBy(users, function iteratee(eachUser) { + return Math.floor(eachUser.similarityIndex*10); + }); - // underscore.each(suggestedUsersGroup, (value, key) => { - // suggestedUsersGroup[key] = underscore.sortBy(value, (eachUser) => eachUser.rating.value); - // suggestedUsers = underscore.union(suggestedUsers, value); - // }) + underscore.each(suggestedUsersGroup, (value, key) => { + suggestedUsersGroup[key] = underscore.sortBy(value, (eachUser) => eachUser.rating.value); + suggestedUsers = underscore.union(suggestedUsers, value); + }) diff --git a/views/chat/index.ejs b/views/chat/index.ejs index a5d66d5..69564da 100644 --- a/views/chat/index.ejs +++ b/views/chat/index.ejs @@ -24,7 +24,7 @@
<% } %> - <% if(room.chats.length > 10 && room.rating.indexOf(session.id) === -1) { %> - - - - <% } %> <% for(let message of room.chats) { %> <% if(message.by && message.by.profile_picture) { %>