diff options
| author | Bobby <[email protected]> | 2022-06-03 17:22:43 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2022-06-03 17:22:43 +0530 |
| commit | 93640b6ec08bb25e24841b9084e954d7c6521611 (patch) | |
| tree | c2e55dc0bab93bc1baf82999d781fd6420d37ea7 | |
| parent | 692eecf32e4d569a55de2c4b5abb6a6897c88abe (diff) | |
| download | thatcomputerscientist-93640b6ec08bb25e24841b9084e954d7c6521611.tar.xz thatcomputerscientist-93640b6ec08bb25e24841b9084e954d7c6521611.zip | |
update account details
| -rw-r--r-- | package-lock.json | 57 | ||||
| -rw-r--r-- | package.json | 1 | ||||
| -rw-r--r-- | routes/account.routes.js | 41 | ||||
| -rw-r--r-- | views/account.ejs | 16 |
4 files changed, 110 insertions, 5 deletions
diff --git a/package-lock.json b/package-lock.json index e7379cf0..ea8d92f4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20,6 +20,7 @@ "express": "^4.18.1", "express-session": "^1.17.3", "jsonwebtoken": "^8.5.1", + "md5": "^2.3.0", "mysql2": "^2.3.3", "node-fetch": "^3.2.5" }, @@ -333,6 +334,14 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -497,6 +506,14 @@ "node": ">= 0.10" } }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -1080,6 +1097,11 @@ "node": ">=8" } }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -1367,6 +1389,16 @@ "semver": "bin/semver.js" } }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2595,6 +2627,11 @@ "supports-color": "^7.1.0" } }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==" + }, "chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -2717,6 +2754,11 @@ "vary": "^1" } }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==" + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -3160,6 +3202,11 @@ "binary-extensions": "^2.0.0" } }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, "is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", @@ -3390,6 +3437,16 @@ } } }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", diff --git a/package.json b/package.json index 625c1555..2ac6944c 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "express": "^4.18.1", "express-session": "^1.17.3", "jsonwebtoken": "^8.5.1", + "md5": "^2.3.0", "mysql2": "^2.3.3", "node-fetch": "^3.2.5" }, diff --git a/routes/account.routes.js b/routes/account.routes.js index 7b5660b4..8a6a0b21 100644 --- a/routes/account.routes.js +++ b/routes/account.routes.js @@ -3,6 +3,7 @@ const { renderRoute } = require("../functions/render"); const mysql = require("mysql2"); const jwt = require("jsonwebtoken"); const connectionString = process.env.DATABASE_URL; +const md5 = require("md5"); router.get('/', (req, res) => { const username = jwt.decode(req.cookies.token).username; @@ -18,7 +19,10 @@ router.get('/', (req, res) => { if (results.length > 0) { const user = results[0]; renderRoute(req, res, 'account', 'My Account', true, { - user: user + user: { + ...user, + avatar: md5(user.email || '') + } }); } else { renderRoute(req, res, 'account', 'My Account', true, { @@ -30,5 +34,40 @@ router.get('/', (req, res) => { connection.end(); }); +router.post('/updateAccount', (req, res) => { + jwt.verify(req.cookies.token, process.env.AUTHORIZATION_STRING, (err, decoded) => { + if (err) { + renderRoute(req, res, 'error', 'Error', false) + } else { + const username = decoded.username; + const firstname = req.body.firstname; + const lastname = req.body.lastname; + const email = req.body.email; + const location = req.body.location; + const bio = req.body.bio; + const public = req.body.isPublic; + const connection = mysql.createPool(connectionString); + connection.getConnection((err, connection) => { + if (err) { + renderRoute(req, res, 'error', 'Error', false, { + error: err.message + }); + } else { + const sql = "UPDATE Profiles SET firstname = ?, lastname = ?, email = ?, location = ?, bio = ?, public = ? WHERE username = ?"; + connection.query(sql, [firstname, lastname, email, location, bio, public, username], (err, results, fields) => { + if (err) { + req.flash('updateaccerror', err.message); + res.redirect(req.get('referer')); + } else { + req.flash('updateaccsuccess', 'Account updated successfully'); + res.redirect(req.get('referer')); + } + }); + } + }); + } + }); +}); + module.exports = router; diff --git a/views/account.ejs b/views/account.ejs index f3bc3359..8fa8154c 100644 --- a/views/account.ejs +++ b/views/account.ejs @@ -41,8 +41,10 @@ </form> </div> <div class="ac-main"> - <p>Account URL: <a href="/profile/<%= user.username %>"><span id="accountURL"></span></a></p> - <form method="post" onsubmit="event.preventDefault();"> + <% if (user.public == 1) { %> + <p>Account URL: <a href="/profile/<%= user.username %>"><span id="accountURL"></span></a></p> + <% } %> + <form method="post" action="/account/updateAccount"> <fieldset> <legend>Account Details</legend> <label for="firstname">First Name</label> @@ -57,10 +59,16 @@ <textarea name="bio" id="bio" placeholder="Bio"><%= user.bio %></textarea> <label for="isPublic">Account Visibility</label> <select name="isPublic" id="isPublic"> - <option value="0" <% if (user.isPublic == 0) { %>selected="selected"<% } %>>Private</option> - <option value="1" <% if (user.isPublic == 1) { %>selected="selected"<% } %>>Public</option> + <option value="0" <% if (user.public == 0) { %>selected="selected"<% } %>>Private</option> + <option value="1" <% if (user.public == 1) { %>selected="selected"<% } %>>Public</option> </select> <input type="submit" value="Update Account" /> + <% if (locals.messages.updateaccsuccess) { %> + <p class="success"><%= messages.updateaccsuccess %></p> + <% } %> + <% if (locals.messages.updateaccerror) { %> + <p class="error"><%= messages.updateaccerror %></p> + <% } %> </fieldset> </form> </div> |
