diff --git a/backend/index.js b/backend/index.js index 86fdfed9604fa04e36d6266c71d48efe2ba2f426..e383d9b561edf2ae80ae298f531cba2425d6b3ec 100644 --- a/backend/index.js +++ b/backend/index.js @@ -4,15 +4,19 @@ const cors = require('cors') require('dotenv').config() const Routes = require('./routes/routes') const { errorHandler, notFound } = require('./middlewares/errorMiddleware') +const checkUserExists = require('./middlewares/MulterMiddleware') + const app = express() -//Convert data correctly app.use(express.json()) app.use(express.static("public")) -//Cors is used to connect to the database with react without issues app.use(cors()) +app.use(Routes) +app.use(notFound) +app.use(errorHandler) + const PORT = process.env.PORT || 5000 @@ -29,13 +33,7 @@ mongoose.connect(process.env.MONGODB_URI) .catch(err => console.log(err)) -//Routes -app.use(Routes) - -//Error functions -app.use(notFound) -app.use(errorHandler) diff --git a/backend/middlewares/MulterMiddleware.js b/backend/middlewares/MulterMiddleware.js index b026a7577c81e7c0afde091bf9458735f1fc8d8f..98d75a81f601d157e2b6eed02b2e54991efdda93 100644 --- a/backend/middlewares/MulterMiddleware.js +++ b/backend/middlewares/MulterMiddleware.js @@ -1,6 +1,10 @@ const multer = require("multer") const {v4: uuidv4} = require("uuid") const path = require("path") +const userModel = require('../models/user') + + + const storage = multer.diskStorage({ diff --git a/backend/node_modules/.package-lock.json b/backend/node_modules/.package-lock.json index 3657e0a8658ae0504f0d87c505ab31d262d83d90..86ead2fa8e89270267556825a4365176c38b2687 100644 --- a/backend/node_modules/.package-lock.json +++ b/backend/node_modules/.package-lock.json @@ -242,12 +242,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -255,7 +255,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -590,6 +590,43 @@ "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1527,9 +1564,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", diff --git a/backend/node_modules/body-parser/HISTORY.md b/backend/node_modules/body-parser/HISTORY.md index fb212b3605b390a153fa6e6fb4cac44a015a87c4..b89249198a83f852a4d16db733697385317f929a 100644 --- a/backend/node_modules/body-parser/HISTORY.md +++ b/backend/node_modules/body-parser/HISTORY.md @@ -1,3 +1,11 @@ +1.20.2 / 2023-02-21 +=================== + + * Fix strict json error message on Node.js 19+ + * deps: content-type@~1.0.5 + - perf: skip value escaping when unnecessary + * deps: raw-body@2.5.2 + 1.20.1 / 2022-10-06 =================== diff --git a/backend/node_modules/body-parser/README.md b/backend/node_modules/body-parser/README.md index c507cbb035ccde628e13062b668f18045368e8c9..38553bf7987866e7d9d872acb0e4ceec9c826c4e 100644 --- a/backend/node_modules/body-parser/README.md +++ b/backend/node_modules/body-parser/README.md @@ -1,8 +1,8 @@ # body-parser -[![NPM Version][npm-image]][npm-url] -[![NPM Downloads][downloads-image]][downloads-url] -[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Build Status][ci-image]][ci-url] [![Test Coverage][coveralls-image]][coveralls-url] Node.js body parsing middleware. @@ -454,11 +454,12 @@ app.use(bodyParser.text({ type: 'text/html' })) [MIT](LICENSE) -[npm-image]: https://img.shields.io/npm/v/body-parser.svg -[npm-url]: https://npmjs.org/package/body-parser -[coveralls-image]: https://img.shields.io/coveralls/expressjs/body-parser/master.svg +[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci +[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master [coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master -[downloads-image]: https://img.shields.io/npm/dm/body-parser.svg -[downloads-url]: https://npmjs.org/package/body-parser -[github-actions-ci-image]: https://img.shields.io/github/workflow/status/expressjs/body-parser/ci/master?label=ci -[github-actions-ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/body-parser +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/body-parser +[npm-url]: https://npmjs.org/package/body-parser +[npm-version-image]: https://badgen.net/npm/v/body-parser diff --git a/backend/node_modules/body-parser/lib/types/json.js b/backend/node_modules/body-parser/lib/types/json.js index c2745be3a33fe16e30174e508c695b082852c8f7..59f3f7e28f2416cac957b5e35dc78839a5019e0d 100644 --- a/backend/node_modules/body-parser/lib/types/json.js +++ b/backend/node_modules/body-parser/lib/types/json.js @@ -39,6 +39,9 @@ module.exports = json var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex +var JSON_SYNTAX_CHAR = '#' +var JSON_SYNTAX_REGEXP = /#+/g + /** * Create a middleware to parse JSON bodies. * @@ -152,15 +155,23 @@ function json (options) { function createStrictSyntaxError (str, char) { var index = str.indexOf(char) - var partial = index !== -1 - ? str.substring(0, index) + '#' - : '' + var partial = '' + + if (index !== -1) { + partial = str.substring(0, index) + JSON_SYNTAX_CHAR + + for (var i = index + 1; i < str.length; i++) { + partial += JSON_SYNTAX_CHAR + } + } try { JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') } catch (e) { return normalizeJsonSyntaxError(e, { - message: e.message.replace('#', char), + message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) { + return str.substring(index, index + placeholder.length) + }), stack: e.stack }) } diff --git a/backend/node_modules/body-parser/package.json b/backend/node_modules/body-parser/package.json index 9cd2ccbbae4b4bbdf349d827ab4fafd54288b515..4637304389c5dc7a0a52974c120ea164b85e7c22 100644 --- a/backend/node_modules/body-parser/package.json +++ b/backend/node_modules/body-parser/package.json @@ -1,7 +1,7 @@ { "name": "body-parser", "description": "Node.js body parsing middleware", - "version": "1.20.1", + "version": "1.20.2", "contributors": [ "Douglas Christopher Wilson <doug@somethingdoug.com>", "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)" @@ -10,7 +10,7 @@ "repository": "expressjs/body-parser", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -18,23 +18,23 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, "devDependencies": { - "eslint": "8.24.0", + "eslint": "8.34.0", "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.26.0", + "eslint-plugin-import": "2.27.5", "eslint-plugin-markdown": "3.0.0", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "6.0.1", + "eslint-plugin-promise": "6.1.1", "eslint-plugin-standard": "4.1.0", "methods": "1.1.2", - "mocha": "10.0.0", + "mocha": "10.2.0", "nyc": "15.1.0", "safe-buffer": "5.2.1", - "supertest": "6.3.0" + "supertest": "6.3.3" }, "files": [ "lib/", diff --git a/backend/node_modules/raw-body/HISTORY.md b/backend/node_modules/raw-body/HISTORY.md index 0b6b8373991e73d09e70788fa987f9571ef879ed..baf0e2d889a10d66ced544f78a4eb5ffa4a24ae6 100644 --- a/backend/node_modules/raw-body/HISTORY.md +++ b/backend/node_modules/raw-body/HISTORY.md @@ -1,3 +1,8 @@ +2.5.2 / 2023-02-21 +================== + + * Fix error message for non-stream argument + 2.5.1 / 2022-02-28 ================== diff --git a/backend/node_modules/raw-body/README.md b/backend/node_modules/raw-body/README.md index 695c6607369db5909403329f7f480afdc11e458f..d9b36d611830efeaae613bd8dff4082d7fd55971 100644 --- a/backend/node_modules/raw-body/README.md +++ b/backend/node_modules/raw-body/README.md @@ -219,5 +219,5 @@ server.listen(3000); [coveralls-url]: https://coveralls.io/r/stream-utils/raw-body?branch=master [downloads-image]: https://img.shields.io/npm/dm/raw-body.svg [downloads-url]: https://npmjs.org/package/raw-body -[github-actions-ci-image]: https://img.shields.io/github/workflow/status/stream-utils/raw-body/ci/master?label=ci +[github-actions-ci-image]: https://img.shields.io/github/actions/workflow/status/stream-utils/raw-body/ci.yml?branch=master&label=ci [github-actions-ci-url]: https://github.com/jshttp/stream-utils/raw-body?query=workflow%3Aci diff --git a/backend/node_modules/raw-body/index.js b/backend/node_modules/raw-body/index.js index a8f537f38b62bf97dfd73d672898be3589b42359..9cdcd12217303cdbbf1c2524978db7ba3379555e 100644 --- a/backend/node_modules/raw-body/index.js +++ b/backend/node_modules/raw-body/index.js @@ -69,6 +69,13 @@ function getRawBody (stream, options, callback) { var done = callback var opts = options || {} + // light validation + if (stream === undefined) { + throw new TypeError('argument stream is required') + } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') { + throw new TypeError('argument stream must be a stream') + } + if (options === true || typeof options === 'string') { // short cut for encoding opts = { diff --git a/backend/node_modules/raw-body/package.json b/backend/node_modules/raw-body/package.json index 50fc90ad4135ee618546821bc3a3ad8f1b88a63d..aabb1c368d95562e18fbbae384868303ae4bd590 100644 --- a/backend/node_modules/raw-body/package.json +++ b/backend/node_modules/raw-body/package.json @@ -1,7 +1,7 @@ { "name": "raw-body", "description": "Get and validate the raw body of a readable stream.", - "version": "2.5.1", + "version": "2.5.2", "author": "Jonathan Ong <me@jongleberry.com> (http://jongleberry.com)", "contributors": [ "Douglas Christopher Wilson <doug@somethingdoug.com>", @@ -17,14 +17,14 @@ }, "devDependencies": { "bluebird": "3.7.2", - "eslint": "7.32.0", - "eslint-config-standard": "14.1.1", - "eslint-plugin-import": "2.25.4", - "eslint-plugin-markdown": "2.2.1", + "eslint": "8.34.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-markdown": "3.0.0", "eslint-plugin-node": "11.1.0", - "eslint-plugin-promise": "5.2.0", + "eslint-plugin-promise": "6.1.1", "eslint-plugin-standard": "4.1.0", - "mocha": "9.2.1", + "mocha": "10.2.0", "nyc": "15.1.0", "readable-stream": "2.3.7", "safe-buffer": "5.2.1" diff --git a/backend/package-lock.json b/backend/package-lock.json index d436636c1fee4e3803e1bad38620e53488edcfdf..b336c78ed49b6038f3c40917ef869711af8c2bd1 100644 --- a/backend/package-lock.json +++ b/backend/package-lock.json @@ -10,6 +10,7 @@ "license": "ISC", "dependencies": { "bcrypt": "^5.1.0", + "body-parser": "^1.20.2", "config": "^3.3.9", "cors": "^2.8.5", "dotenv": "^16.0.3", @@ -261,12 +262,12 @@ } }, "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "dependencies": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -274,7 +275,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" }, @@ -609,6 +610,43 @@ "resolved": "https://registry.npmjs.org/express-async-handler/-/express-async-handler-1.2.0.tgz", "integrity": "sha512-rCSVtPXRmQSW8rmik/AIb2P0op6l7r1fMW538yyvTMltCO4xQEWMmobfrIxN2V1/mVrgxB8Az3reYF6yUZw37w==" }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1559,9 +1597,9 @@ } }, "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -2220,12 +2258,12 @@ "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "requires": { "bytes": "3.1.2", - "content-type": "~1.0.4", + "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -2233,7 +2271,7 @@ "iconv-lite": "0.4.24", "on-finished": "2.4.1", "qs": "6.11.0", - "raw-body": "2.5.1", + "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" } @@ -2485,6 +2523,38 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + } + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } } }, "express-async-handler": { @@ -3190,9 +3260,9 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", "requires": { "bytes": "3.1.2", "http-errors": "2.0.0", diff --git a/backend/package.json b/backend/package.json index 4e140c7913aaa1e4c55e50611897f46f9309136a..1566d0c0b8b8d5e7041f505629c18728e3dfd9a9 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,6 +11,7 @@ "license": "ISC", "dependencies": { "bcrypt": "^5.1.0", + "body-parser": "^1.20.2", "config": "^3.3.9", "cors": "^2.8.5", "dotenv": "^16.0.3", diff --git a/backend/public/uploads/8d95b2c8-587c-4a23-9dbf-2f6d2429b309_.jpg b/backend/public/uploads/81976f69-cdcb-4376-820b-7db0bf090af8_.jpg similarity index 100% rename from backend/public/uploads/8d95b2c8-587c-4a23-9dbf-2f6d2429b309_.jpg rename to backend/public/uploads/81976f69-cdcb-4376-820b-7db0bf090af8_.jpg diff --git a/backend/public/uploads/c504c974-e8dd-4dbd-8441-270a85e608a3_.jpg b/backend/public/uploads/c504c974-e8dd-4dbd-8441-270a85e608a3_.jpg deleted file mode 100644 index 226c1aea2c2a8c5e933f2716ed83fd90977326e1..0000000000000000000000000000000000000000 Binary files a/backend/public/uploads/c504c974-e8dd-4dbd-8441-270a85e608a3_.jpg and /dev/null differ diff --git a/backend/public/uploads/c777c56e-9637-437a-a832-ddca6a72d4d1_.jpg b/backend/public/uploads/c777c56e-9637-437a-a832-ddca6a72d4d1_.jpg deleted file mode 100644 index 226c1aea2c2a8c5e933f2716ed83fd90977326e1..0000000000000000000000000000000000000000 Binary files a/backend/public/uploads/c777c56e-9637-437a-a832-ddca6a72d4d1_.jpg and /dev/null differ diff --git a/backend/public/uploads/9f36fed7-bc98-4dc4-a1ee-8b477451bc52_.jpg b/backend/public/uploads/d2e9f7c7-6d6a-4973-b989-7838ed629eb7_.jpg similarity index 100% rename from backend/public/uploads/9f36fed7-bc98-4dc4-a1ee-8b477451bc52_.jpg rename to backend/public/uploads/d2e9f7c7-6d6a-4973-b989-7838ed629eb7_.jpg diff --git a/backend/routes/routes.js b/backend/routes/routes.js index 05df3e7e77f1e6f68e3862782eab3e8e201ec57b..40c1a44fc6d5636eeaed415283eca30a173e5f7e 100644 --- a/backend/routes/routes.js +++ b/backend/routes/routes.js @@ -68,6 +68,8 @@ router.post("/register", uploadMiddleware.single("photo"),asyncHandler(async (re const password = req.body.password const photo = req.file.filename + console.log({email}) + const userExists = await userModel.findOne({email}) if(userExists){ diff --git a/backend/utils/generateToken.js b/backend/utils/generateToken.js index 4458b494c9516acae66b08b082aa223ff5f7d7db..f1cb867caaae577d93413d789afb0440ba84a84b 100644 --- a/backend/utils/generateToken.js +++ b/backend/utils/generateToken.js @@ -3,7 +3,7 @@ require('dotenv').config() const generateToken = (id) => { return jwt.sign({userId: id}, process.env.JWT_SECRET,{ - expiresIn: '1d', + expiresIn: '10s', }) } diff --git a/frontend/src/components/Landing.js b/frontend/src/components/Landing.js index 630750db785baf49534a4e64e5c1ecfd8b084fc3..80f8e25edc206cd00131fe6ae14e3731046c0da1 100644 --- a/frontend/src/components/Landing.js +++ b/frontend/src/components/Landing.js @@ -22,16 +22,17 @@ const Landing = () => { <li className={styles.item}>Creating Posts ✅ </li> <li className={styles.item}>Account Sign Up ✅ </li> <li className={styles.item}>Logging In ✅</li> - <li className={styles.item}>Authentication Checking </li> + <li className={styles.item}>Authentication Checking ✅</li> + <li className={styles.item}>Post filtering and priority</li> </ul> </div> <div className={styles.card}> <h1>PagesðŸº</h1> <ul className={styles.list}> <li className={styles.item}>Home </li> - <li className={styles.item}>About </li> + <li className={styles.item}>Profile ✅</li> <li className={styles.item}>Discover </li> - <li className={styles.item}>Log In and Sign Up </li> + <li className={styles.item}>Log In and Sign Up ✅</li> <li className={styles.item}>Crate Post ✅</li> </ul> </div> diff --git a/frontend/src/components/SignUp.js b/frontend/src/components/SignUp.js index b52a66076cab7810eb82730f865dc9f011f35a65..a9ec34076496141d1b37d0666526b134709884ea 100644 --- a/frontend/src/components/SignUp.js +++ b/frontend/src/components/SignUp.js @@ -2,6 +2,7 @@ import React from 'react' import { useState } from 'react' import axios from 'axios' import styles from '../styles/login.module.css' +import { useNavigate } from "react-router-dom"; const SignUp = () => { @@ -9,7 +10,9 @@ const SignUp = () => { const [password, setPassword] = useState("") const [email, setEmail] = useState("") const [imageData,setImageData] = useState("") + const navigate = useNavigate() + const handleSignup = () => { @@ -30,6 +33,7 @@ const SignUp = () => { console.log(res.data) }) + navigate('/login') } return ( diff --git a/frontend/src/index.css b/frontend/src/index.css index 5f9eb929e7e85cf71181dd8045c7e2d369a96eeb..08a0f535f7bee181f870a436ff14a965a27a9b0c 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -21,6 +21,12 @@ h1{ font-family: 'Inter', sans-serif; font-weight: bold; } +p{ + font-family: 'Poppins', sans-serif; +} +h2{ + font-family: 'Poppins', sans-serif; +} code { font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', diff --git a/frontend/src/pages/Profile.js b/frontend/src/pages/Profile.js index 7a5fa3b6d670b3afae334103dc88e3afa3dc4fae..fd499581c5d368930ed46585c59a427a15a9d981 100644 --- a/frontend/src/pages/Profile.js +++ b/frontend/src/pages/Profile.js @@ -2,7 +2,7 @@ import React from 'react' import { useEffect, useState } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; - +import styles from '../styles/profile.module.css' const Profile = () => { const [profileData, setProfileData] = useState() @@ -12,66 +12,87 @@ const Profile = () => { const navigate = useNavigate(); const checkLoggedIn = async () => { - - const token = localStorage.getItem('token'); - if (!token) { - setIsLoggedIn(false); - navigate('/login'); - return; - } - const response = await axios.get('http://localhost:5000/profile', { - headers: { Authorization: `Bearer ${token}` }, - }).then((res) => { - setIsLoggedIn(true); - }).catch(err => { - localStorage.removeItem("token") - setIsLoggedIn(false) - navigate('/login') - }) + + const token = localStorage.getItem('token'); + if (!token) { + setIsLoggedIn(false); + navigate('/login'); + return; + } + const response = await axios.get('http://localhost:5000/profile', { + headers: { Authorization: `Bearer ${token}` }, + }).then((res) => { + setIsLoggedIn(true); + }).catch(err => { + localStorage.removeItem("token") + setIsLoggedIn(false) + navigate('/login') + }) } const fetchProfile = async () => { setLoading(true) - - const token = localStorage.getItem('token'); - console.log(token) - - axios.get('http://localhost:5000/profile', { - headers: { - Authorization: `Bearer ${token}` - } - }).then((res) => { - setProfileData(res.data); - console.log(profileData) - }).catch(err => console.log(err)) - - setLoading(false) - - + + const token = localStorage.getItem('token'); + console.log(token) + + axios.get('http://localhost:5000/profile', { + headers: { + Authorization: `Bearer ${token}` + } + }).then((res) => { + setProfileData(res.data); + console.log(profileData) + }).catch(err => console.log(err)) + + setLoading(false) + + } useEffect(() => { checkLoggedIn() fetchProfile() - - + + }, []) - if(!profileData){ - return( + if (!profileData) { + return ( <div>Loading...</div> ) - }else if(profileData){ + } else if (profileData) { return ( - <div> - <h1>{profileData.username}</h1> - <h1>{profileData.email}</h1> - <img src={`http://localhost:5000/uploads/${profileData.photo}`}/> - </div> - ) + <> + <div className={styles.header}> + <h1>Welcome to your profile page</h1> + <h3>Redirect through these links ðŸ‘</h3> + + <div className={styles.text_container}> + <h3>Discover</h3> + <h3>|</h3> + <h3>Settings</h3> + <h3>|</h3> + <h3>Log out</h3> + </div> + </div> + <div className={styles.profile}> + <img className={styles.picture} src={`http://localhost:5000/uploads/${profileData.photo}`} /> + <h2>{profileData.username}</h2> + <h3>{profileData.email}</h3> + <div className={styles.text_container}> + <h3>Posts: 0</h3> + <h3>Upvotes: 0</h3> + </div> + </div> + <div> + <h1>Your Posts:</h1> + </div> + </> + ) } - + } diff --git a/frontend/src/styles/profile.module.css b/frontend/src/styles/profile.module.css new file mode 100644 index 0000000000000000000000000000000000000000..dddb89da5e45551a8b01bb23289355809e09d216 --- /dev/null +++ b/frontend/src/styles/profile.module.css @@ -0,0 +1,53 @@ +body{ + text-align: center; + +} +h1{ + color: rgb(255, 240, 153); + font-size: 300%; + font-weight: 900; +} +h2{ + margin: 0; +} +h3{ + margin: 20px; +} + +.picture { + width: 150px; + height: 150px; + border-radius: 50%; + object-fit: cover; + display: block; + overflow: hidden; + margin: 20px auto; + +} +.profile{ + background: rgb(49, 117, 121); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + border-radius: 10px; + border: 2px solid rgba(169, 173, 173, 0.2); + box-shadow: 0 8px 23px 0 rgba(37, 37, 37, 0.562); + text-align: center; + width: 40vw; + margin: 100px auto; + min-height: 50vh; +} +.header{ + max-width: 100vw; + min-height: 10vh; + margin: 0; + background-color: rgb(49, 117, 121); + box-sizing: border-box; + +} +.text_container{ + display: flex; + flex-direction: row; + justify-content: center; + text-align: center; + +} \ No newline at end of file diff --git a/frontend/src/styles/styles.module.css b/frontend/src/styles/styles.module.css index 43bb6cc8be4e2999a2cfc646095d6441fac7fff0..7e1e6eaa9e63279f5c9a815e98ed2b34189b5d9a 100644 --- a/frontend/src/styles/styles.module.css +++ b/frontend/src/styles/styles.module.css @@ -75,19 +75,17 @@ object-fit: cover; } .Header2{ - height: 60vh; + height: 70vh; display: flex; justify-content: center; - align-items: center; background: rgb(49, 117, 121); flex-wrap: wrap; /* Add flex-wrap property to allow text to wrap */ } .card { - flex: 1; - margin: 0 45px; - max-width: 400px; - aspect-ratio: 1/1; /* Set aspect ratio to 1:1 */ + margin: 40px; + width: 500px; + height: 500px; background: rgb(62, 121, 124); border-radius: 10px; box-shadow: 0 8px 13px 0 rgba(41, 41, 43, 0.548);