From fed662d487cff0e9a4293bfe63ceeef41570f6a9 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Mon, 13 Jan 2025 15:07:03 -0300 Subject: [PATCH 01/16] login endpoint without cookies --- backend-dummy/app.js | 20 + backend-dummy/bin/www | 90 ++++ backend-dummy/package-lock.json | 580 +++++++++++++++++++++ backend-dummy/package.json | 14 + backend-dummy/public/index.html | 13 + backend-dummy/public/stylesheets/style.css | 8 + backend-dummy/routes/index.js | 36 ++ backend-dummy/routes/users.js | 9 + backend-dummy/users.txt | 2 + 9 files changed, 772 insertions(+) create mode 100644 backend-dummy/app.js create mode 100755 backend-dummy/bin/www create mode 100644 backend-dummy/package-lock.json create mode 100644 backend-dummy/package.json create mode 100644 backend-dummy/public/index.html create mode 100644 backend-dummy/public/stylesheets/style.css create mode 100644 backend-dummy/routes/index.js create mode 100644 backend-dummy/routes/users.js create mode 100644 backend-dummy/users.txt diff --git a/backend-dummy/app.js b/backend-dummy/app.js new file mode 100644 index 0000000..56161bf --- /dev/null +++ b/backend-dummy/app.js @@ -0,0 +1,20 @@ +var express = require("express"); +var path = require("path"); +var cookieParser = require("cookie-parser"); +var logger = require("morgan"); + +var indexRouter = require("./routes/index"); +var usersRouter = require("./routes/users"); + +var app = express(); + +app.use(logger("dev")); +app.use(express.json()); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(express.static(path.join(__dirname, "public"))); + +app.use("/", indexRouter); +app.use("/users", usersRouter); + +module.exports = app; diff --git a/backend-dummy/bin/www b/backend-dummy/bin/www new file mode 100755 index 0000000..f9a8db3 --- /dev/null +++ b/backend-dummy/bin/www @@ -0,0 +1,90 @@ +#!/usr/bin/env node + +/** + * Module dependencies. + */ + +var app = require('../app'); +var debug = require('debug')('backend-dummy:server'); +var http = require('http'); + +/** + * Get port from environment and store in Express. + */ + +var port = normalizePort(process.env.PORT || '3000'); +app.set('port', port); + +/** + * Create HTTP server. + */ + +var server = http.createServer(app); + +/** + * Listen on provided port, on all network interfaces. + */ + +server.listen(port); +server.on('error', onError); +server.on('listening', onListening); + +/** + * Normalize a port into a number, string, or false. + */ + +function normalizePort(val) { + var port = parseInt(val, 10); + + if (isNaN(port)) { + // named pipe + return val; + } + + if (port >= 0) { + // port number + return port; + } + + return false; +} + +/** + * Event listener for HTTP server "error" event. + */ + +function onError(error) { + if (error.syscall !== 'listen') { + throw error; + } + + var bind = typeof port === 'string' + ? 'Pipe ' + port + : 'Port ' + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case 'EACCES': + console.error(bind + ' requires elevated privileges'); + process.exit(1); + break; + case 'EADDRINUSE': + console.error(bind + ' is already in use'); + process.exit(1); + break; + default: + throw error; + } +} + +/** + * Event listener for HTTP server "listening" event. + */ + +function onListening() { + var addr = server.address(); + var bind = typeof addr === 'string' + ? 'pipe ' + addr + : 'port ' + addr.port; + debug('Listening on ' + bind); +} diff --git a/backend-dummy/package-lock.json b/backend-dummy/package-lock.json new file mode 100644 index 0000000..96cf937 --- /dev/null +++ b/backend-dummy/package-lock.json @@ -0,0 +1,580 @@ +{ + "name": "backend-dummy", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "backend-dummy", + "version": "0.0.0", + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "~4.16.1", + "morgan": "~1.9.1" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", + "dependencies": { + "cookie": "0.7.2", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "license": "MIT" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "license": "MIT", + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "license": "MIT" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "license": "MIT", + "dependencies": { + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "license": "ISC" + }, + "node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/backend-dummy/package.json b/backend-dummy/package.json new file mode 100644 index 0000000..73fa43b --- /dev/null +++ b/backend-dummy/package.json @@ -0,0 +1,14 @@ +{ + "name": "backend-dummy", + "version": "0.0.0", + "private": true, + "scripts": { + "start": "node ./bin/www" + }, + "dependencies": { + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "~4.16.1", + "morgan": "~1.9.1" + } +} diff --git a/backend-dummy/public/index.html b/backend-dummy/public/index.html new file mode 100644 index 0000000..ab1ad8a --- /dev/null +++ b/backend-dummy/public/index.html @@ -0,0 +1,13 @@ + + + + Express + + + + +

Express

+

Welcome to Express

+ + + diff --git a/backend-dummy/public/stylesheets/style.css b/backend-dummy/public/stylesheets/style.css new file mode 100644 index 0000000..9453385 --- /dev/null +++ b/backend-dummy/public/stylesheets/style.css @@ -0,0 +1,8 @@ +body { + padding: 50px; + font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; +} + +a { + color: #00B7FF; +} diff --git a/backend-dummy/routes/index.js b/backend-dummy/routes/index.js new file mode 100644 index 0000000..594c32d --- /dev/null +++ b/backend-dummy/routes/index.js @@ -0,0 +1,36 @@ +var express = require("express"); +var fs = require("fs"); +var router = express.Router(); + +/* GET home page. */ +router.get("/", function (req, res, next) { + res.render("index", { title: "Express" }); +}); + +router.post("/login", function (req, res, next) { + const { email, password } = req.body; + if (!email || !password) { + return res.json({ status: "error", message: "Invalid form submission" }); + } + fs.readFile("users.txt", "utf-8", (err, data) => { + if (err) { + console.log("error: ", err); + } else { + const users = data.split("\n"); + const info = users.map((user) => { + return user.split(","); + }); + const valid = info.some((user) => { + return user[0] === email && user[1] === password; + }); + if (!valid) { + return res + .status(401) + .json({ status: "error", message: "Invalid credentials" }); + } + return res.json({ status: "success", message: "Login success" }); + } + }); //remove later +}); + +module.exports = router; diff --git a/backend-dummy/routes/users.js b/backend-dummy/routes/users.js new file mode 100644 index 0000000..623e430 --- /dev/null +++ b/backend-dummy/routes/users.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET users listing. */ +router.get('/', function(req, res, next) { + res.send('respond with a resource'); +}); + +module.exports = router; diff --git a/backend-dummy/users.txt b/backend-dummy/users.txt new file mode 100644 index 0000000..faeed5e --- /dev/null +++ b/backend-dummy/users.txt @@ -0,0 +1,2 @@ +example@email.com,let +prueba@email.com,lem From e748c48792eeaf1d1231b86fb5c3d5fef4d09837 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Tue, 14 Jan 2025 14:45:55 -0300 Subject: [PATCH 02/16] cookie in login --- .env.development.local | 1 + backend-dummy/app.js | 4 ++-- backend-dummy/routes/index.js | 27 ---------------------- backend-dummy/routes/users.js | 35 ++++++++++++++++++++++++++--- backend-dummy/users.json | 6 +++++ backend-dummy/users.txt | 2 -- src/networking/api-routes.ts | 1 + src/networking/api-service.ts | 2 +- src/networking/controllers/users.ts | 12 ++++++++++ src/networking/serializers/users.ts | 9 ++++++++ src/networking/types/user.d.ts | 4 ++++ src/pages/login/login.module.scss | 4 ++++ src/pages/login/login.tsx | 16 ++++++++++++- vite.config.ts | 8 +++++++ 14 files changed, 95 insertions(+), 36 deletions(-) create mode 100644 .env.development.local create mode 100644 backend-dummy/users.json delete mode 100644 backend-dummy/users.txt create mode 100644 src/networking/controllers/users.ts create mode 100644 src/networking/serializers/users.ts create mode 100644 src/networking/types/user.d.ts diff --git a/.env.development.local b/.env.development.local new file mode 100644 index 0000000..6892a41 --- /dev/null +++ b/.env.development.local @@ -0,0 +1 @@ +VITE_API_BASE_URL= "http://localhost:5173" diff --git a/backend-dummy/app.js b/backend-dummy/app.js index 56161bf..1ce1904 100644 --- a/backend-dummy/app.js +++ b/backend-dummy/app.js @@ -14,7 +14,7 @@ app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); -app.use("/", indexRouter); -app.use("/users", usersRouter); +app.use("/api", indexRouter); +app.use("/api/users", usersRouter); module.exports = app; diff --git a/backend-dummy/routes/index.js b/backend-dummy/routes/index.js index 594c32d..6351814 100644 --- a/backend-dummy/routes/index.js +++ b/backend-dummy/routes/index.js @@ -1,5 +1,4 @@ var express = require("express"); -var fs = require("fs"); var router = express.Router(); /* GET home page. */ @@ -7,30 +6,4 @@ router.get("/", function (req, res, next) { res.render("index", { title: "Express" }); }); -router.post("/login", function (req, res, next) { - const { email, password } = req.body; - if (!email || !password) { - return res.json({ status: "error", message: "Invalid form submission" }); - } - fs.readFile("users.txt", "utf-8", (err, data) => { - if (err) { - console.log("error: ", err); - } else { - const users = data.split("\n"); - const info = users.map((user) => { - return user.split(","); - }); - const valid = info.some((user) => { - return user[0] === email && user[1] === password; - }); - if (!valid) { - return res - .status(401) - .json({ status: "error", message: "Invalid credentials" }); - } - return res.json({ status: "success", message: "Login success" }); - } - }); //remove later -}); - module.exports = router; diff --git a/backend-dummy/routes/users.js b/backend-dummy/routes/users.js index 623e430..b716291 100644 --- a/backend-dummy/routes/users.js +++ b/backend-dummy/routes/users.js @@ -1,9 +1,38 @@ -var express = require('express'); +var express = require("express"); +var fs = require("fs"); +var cookieParser = require("cookie-parser"); +const { json } = require("stream/consumers"); +const { randomUUID } = require("crypto"); var router = express.Router(); +var users = JSON.parse(fs.readFileSync("users.json")).users; /* GET users listing. */ -router.get('/', function(req, res, next) { - res.send('respond with a resource'); +router.get("/", function (req, res, next) { + res.send("respond with a resource"); +}); + +router.post("/login", function (req, res, next) { + const { email, password } = req.body; + if (!email || !password) { + return res.json({ status: "error", message: "Invalid form submission" }); + } + const user = users.find( + (user) => user.email === email && user.password === password, + ); + if (!user) { + return res + .status(401) + .json({ status: "error", message: "Invalid credentials" }); + } + const id = randomUUID(); + user["id"] = id; + res.cookie("cookie-id", id, { + maxAge: 900000, + httpOnly: true, + secure: true, + }); + fs.writeFileSync("users.json", `{"users":${JSON.stringify(users)}}`); + return res.json({ status: "success", message: "Login success" }); }); module.exports = router; diff --git a/backend-dummy/users.json b/backend-dummy/users.json new file mode 100644 index 0000000..709fbb8 --- /dev/null +++ b/backend-dummy/users.json @@ -0,0 +1,6 @@ +{ + "users": [ + { "email": "test1@email.com", "password": "test1" }, + { "email": "test2@email.com", "password": "test2" } + ] +} diff --git a/backend-dummy/users.txt b/backend-dummy/users.txt deleted file mode 100644 index faeed5e..0000000 --- a/backend-dummy/users.txt +++ /dev/null @@ -1,2 +0,0 @@ -example@email.com,let -prueba@email.com,lem diff --git a/src/networking/api-routes.ts b/src/networking/api-routes.ts index 6dc4cb8..82bfdbc 100644 --- a/src/networking/api-routes.ts +++ b/src/networking/api-routes.ts @@ -4,6 +4,7 @@ */ const API_ROUTES = { EXAMPLE: "/example", + LOGIN: "users/login", }; export { API_ROUTES }; diff --git a/src/networking/api-service.ts b/src/networking/api-service.ts index c408dbc..58973e5 100644 --- a/src/networking/api-service.ts +++ b/src/networking/api-service.ts @@ -41,7 +41,7 @@ class ApiServiceClass { ): Promise { const updatedConfig = { ...config }; updatedConfig.headers = { ...this.addedHeaders, ...(config.headers ?? {}) }; - const fullURL = new URL(path, constants.apiBaseURL); + const fullURL = new URL(`/api/${path}`, constants.apiBaseURL); const response = await fetch(fullURL, { method, ...updatedConfig, diff --git a/src/networking/controllers/users.ts b/src/networking/controllers/users.ts new file mode 100644 index 0000000..d98122e --- /dev/null +++ b/src/networking/controllers/users.ts @@ -0,0 +1,12 @@ +import { ApiService } from "networking/api-service"; +import { API_ROUTES } from "networking/api-routes"; +import { serializeSignUp } from "networking/serializers/users"; + +const login = async (email: string, password: string) => { + const serializeCredentials = serializeSignUp(email, password); + const response = await ApiService.post(API_ROUTES.LOGIN, { + body: JSON.stringify(serializeCredentials), + }); + return response; +}; +export { login }; diff --git a/src/networking/serializers/users.ts b/src/networking/serializers/users.ts new file mode 100644 index 0000000..72761ae --- /dev/null +++ b/src/networking/serializers/users.ts @@ -0,0 +1,9 @@ +export const serializeSignUp = ( + email: string, + password: string, +): signUpCredentials => { + return { + email: email, + password: password, + }; +}; diff --git a/src/networking/types/user.d.ts b/src/networking/types/user.d.ts new file mode 100644 index 0000000..aa6a21c --- /dev/null +++ b/src/networking/types/user.d.ts @@ -0,0 +1,4 @@ +interface signUpCredentials { + email: string; + password: string; +} diff --git a/src/pages/login/login.module.scss b/src/pages/login/login.module.scss index 80cea5c..727d288 100644 --- a/src/pages/login/login.module.scss +++ b/src/pages/login/login.module.scss @@ -26,3 +26,7 @@ width: 150px; margin: 0 auto; } + +.error { + color: $primary-color-40; +} diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index 714794c..f412297 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -3,13 +3,26 @@ import { useState } from "react"; import { Button } from "common/button"; import { TextField } from "common/text-field"; import styles from "./login.module.scss"; +import { login } from "networking/controllers/users"; +import { useNavigate } from "react-router-dom"; export const Login = () => { + const navigate = useNavigate(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); + const [error, setError] = useState(false); const formValid = !!email && !!password; + const handleSignIn = async () => { + try { + await login(email, password); + navigate(`/`); + } catch (error) { + setError(true); + } + }; + return (
@@ -30,10 +43,11 @@ export const Login = () => { setPassword(e.target.value); }} /> + {error &&

Incorrect email or password.

} diff --git a/vite.config.ts b/vite.config.ts index 00b829b..c046481 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -27,4 +27,12 @@ export default defineConfig({ include: "**/*.svg", }), ], + server: { + proxy: { + "/api": { + target: "http://localhost:3000", + changeOrigin: true, + }, + }, + }, }); From 10344ac55f2cbc3783df8b29364f11ea0c5eccad Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Tue, 14 Jan 2025 15:09:07 -0300 Subject: [PATCH 03/16] add env in git ignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0d10112..a0b80d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ node_modules .env +.env.development.local .DS_Store From fc34384251b50958bb82c0913067c4f04daddd1c Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Tue, 14 Jan 2025 15:15:09 -0300 Subject: [PATCH 04/16] remove .env development local --- .env.development.local | 1 - .gitignore | 1 - 2 files changed, 2 deletions(-) delete mode 100644 .env.development.local diff --git a/.env.development.local b/.env.development.local deleted file mode 100644 index 6892a41..0000000 --- a/.env.development.local +++ /dev/null @@ -1 +0,0 @@ -VITE_API_BASE_URL= "http://localhost:5173" diff --git a/.gitignore b/.gitignore index a0b80d9..0d10112 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ node_modules .env -.env.development.local .DS_Store From 51e0f99f5a265c506f077af64e253e7985f9ca3f Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Tue, 14 Jan 2025 15:23:34 -0300 Subject: [PATCH 05/16] fix ci --- backend-dummy/bin/www | 34 ++++++++++------------ backend-dummy/public/index.html | 18 +++++------- backend-dummy/public/stylesheets/style.css | 8 +++-- 3 files changed, 29 insertions(+), 31 deletions(-) diff --git a/backend-dummy/bin/www b/backend-dummy/bin/www index f9a8db3..3c4bd8a 100755 --- a/backend-dummy/bin/www +++ b/backend-dummy/bin/www @@ -4,16 +4,16 @@ * Module dependencies. */ -var app = require('../app'); -var debug = require('debug')('backend-dummy:server'); -var http = require('http'); +var app = require("../app"); +var debug = require("debug")("backend-dummy:server"); +var http = require("http"); /** * Get port from environment and store in Express. */ -var port = normalizePort(process.env.PORT || '3000'); -app.set('port', port); +var port = normalizePort(process.env.PORT || "3000"); +app.set("port", port); /** * Create HTTP server. @@ -26,8 +26,8 @@ var server = http.createServer(app); */ server.listen(port); -server.on('error', onError); -server.on('listening', onListening); +server.on("error", onError); +server.on("listening", onListening); /** * Normalize a port into a number, string, or false. @@ -54,22 +54,20 @@ function normalizePort(val) { */ function onError(error) { - if (error.syscall !== 'listen') { + if (error.syscall !== "listen") { throw error; } - var bind = typeof port === 'string' - ? 'Pipe ' + port - : 'Port ' + port; + var bind = typeof port === "string" ? "Pipe " + port : "Port " + port; // handle specific listen errors with friendly messages switch (error.code) { - case 'EACCES': - console.error(bind + ' requires elevated privileges'); + case "EACCES": + console.error(bind + " requires elevated privileges"); process.exit(1); break; - case 'EADDRINUSE': - console.error(bind + ' is already in use'); + case "EADDRINUSE": + console.error(bind + " is already in use"); process.exit(1); break; default: @@ -83,8 +81,6 @@ function onError(error) { function onListening() { var addr = server.address(); - var bind = typeof addr === 'string' - ? 'pipe ' + addr - : 'port ' + addr.port; - debug('Listening on ' + bind); + var bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port; + debug("Listening on " + bind); } diff --git a/backend-dummy/public/index.html b/backend-dummy/public/index.html index ab1ad8a..8ef6d70 100644 --- a/backend-dummy/public/index.html +++ b/backend-dummy/public/index.html @@ -1,13 +1,11 @@ + + Express + + - - Express - - - - -

Express

-

Welcome to Express

- - + +

Express

+

Welcome to Express

+ diff --git a/backend-dummy/public/stylesheets/style.css b/backend-dummy/public/stylesheets/style.css index 9453385..d20a135 100644 --- a/backend-dummy/public/stylesheets/style.css +++ b/backend-dummy/public/stylesheets/style.css @@ -1,8 +1,12 @@ body { padding: 50px; - font: 14px "Lucida Grande", Helvetica, Arial, sans-serif; + font: + 14px "Lucida Grande", + Helvetica, + Arial, + sans-serif; } a { - color: #00B7FF; + color: #00b7ff; } From 3b1e0ae6314319f8695d51d306f954547709fb72 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 10:19:25 -0300 Subject: [PATCH 06/16] fix linter --- src/networking/serializers/users.ts | 10 ++++------ src/pages/login/login.tsx | 9 +++++++-- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/networking/serializers/users.ts b/src/networking/serializers/users.ts index 72761ae..5409a12 100644 --- a/src/networking/serializers/users.ts +++ b/src/networking/serializers/users.ts @@ -1,9 +1,7 @@ export const serializeSignUp = ( email: string, password: string, -): signUpCredentials => { - return { - email: email, - password: password, - }; -}; +): signUpCredentials => ({ + email, + password, +}); diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index f412297..575fd99 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -18,10 +18,15 @@ export const Login = () => { try { await login(email, password); navigate(`/`); - } catch (error) { + } catch (err) { setError(true); } }; + const doLogin = () => { + handleSignIn().catch(() => { + setError(true); + }); + }; return (
@@ -47,7 +52,7 @@ export const Login = () => { From 5302aec4c6efb4aff5dec91fb0e8ef0085e734e5 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 10:45:24 -0300 Subject: [PATCH 07/16] update the package json --- backend-dummy/package-lock.json | 656 ++++++++++++++++++++++++++------ backend-dummy/package.json | 2 +- 2 files changed, 541 insertions(+), 117 deletions(-) diff --git a/backend-dummy/package-lock.json b/backend-dummy/package-lock.json index 96cf937..13c3545 100644 --- a/backend-dummy/package-lock.json +++ b/backend-dummy/package-lock.json @@ -10,7 +10,7 @@ "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", - "express": "~4.16.1", + "express": "^4.21.2", "morgan": "~1.9.1" } }, @@ -46,44 +46,120 @@ } }, "node_modules/body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", "license": "MIT", "dependencies": { - "bytes": "3.0.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" }, "engines": { "node": ">= 0.8" } }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { "node": ">= 0.6" } }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -140,10 +216,28 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", - "license": "MIT" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/ee-first": { "version": "1.1.1", @@ -152,14 +246,44 @@ "license": "MIT" }, "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -176,73 +300,131 @@ } }, "node_modules/express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", "license": "MIT", "dependencies": { - "accepts": "~1.3.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", + "depd": "2.0.0", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.1", + "finalhandler": "1.3.1", "fresh": "0.5.2", - "merge-descriptors": "1.0.1", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" }, "engines": { "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/express/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, + "node_modules/express/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -261,25 +443,117 @@ "node": ">= 0.6" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", + "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "function-bind": "^1.1.2", + "get-proto": "^1.0.0", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "license": "MIT", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" } }, "node_modules/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" @@ -289,9 +563,9 @@ } }, "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "license": "ISC" }, "node_modules/ipaddr.js": { @@ -303,6 +577,15 @@ "node": ">= 0.10" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -313,10 +596,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/methods": { "version": "1.1.2", @@ -328,12 +614,15 @@ } }, "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "license": "MIT", "bin": { "mime": "cli.js" + }, + "engines": { + "node": ">=4" } }, "node_modules/mime-db": { @@ -388,6 +677,18 @@ "node": ">= 0.6" } }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -419,9 +720,9 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", "license": "MIT" }, "node_modules/proxy-addr": { @@ -438,12 +739,18 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, "engines": { "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/range-parser": { @@ -456,14 +763,14 @@ } }, "node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "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==", "license": "MIT", "dependencies": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { @@ -483,57 +790,174 @@ "license": "MIT" }, "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", "license": "MIT", "dependencies": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "depd": "2.0.0", + "destroy": "1.2.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/send/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "license": "ISC" }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "engines": { + "node": ">=0.6" } }, "node_modules/type-is": { diff --git a/backend-dummy/package.json b/backend-dummy/package.json index 73fa43b..9a38dfa 100644 --- a/backend-dummy/package.json +++ b/backend-dummy/package.json @@ -8,7 +8,7 @@ "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", - "express": "~4.16.1", + "express": "^4.21.2", "morgan": "~1.9.1" } } From 1b26c3b543abf281d3b2c6f11ecccbdc84e69922 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 11:35:37 -0300 Subject: [PATCH 08/16] exclude backend folder in the lint --- .eslintrc.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.yml b/.eslintrc.yml index 238dcfa..905dad5 100644 --- a/.eslintrc.yml +++ b/.eslintrc.yml @@ -29,6 +29,7 @@ plugins: - "check-file" ignorePatterns: - build/**/* + - backend-dummy/**/* rules: # Eslint Possible Problems array-callback-return: ["error", { allowImplicit: true }] From 6199e70ac993baa89c9e3cc47d9085ea108524cf Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 13:09:37 -0300 Subject: [PATCH 09/16] add readme --- README.md | 6 ++++++ backend-dummy/README.md | 31 +++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 backend-dummy/README.md diff --git a/README.md b/README.md index 81afd57..52a9f55 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,12 @@ You'll have to link it to the project remote manually. npm install ``` +5. Delete the dummy backend folder: + +```shell +rm -r backend-dummy +``` + And that's it! now you are ready to build on top, the commands to start, test and run storybook are listed above. ## Project structure diff --git a/backend-dummy/README.md b/backend-dummy/README.md new file mode 100644 index 0000000..ceda47a --- /dev/null +++ b/backend-dummy/README.md @@ -0,0 +1,31 @@ +## Dummy backend + +## Setup + +In the backend-dummy folder run the following commands: + +Install the required packages: + +```shell +npm install +``` + +## Starting the backend + +```shell +npm start +``` + +## Endpoints + +- [POST] /users/login + + **Description** + + Validates the provided email and password. If successful, it sets a cookie with the user's session ID. + + **Responses** + + 200 OK: Login successful. The user's session cookie is set. + 400 Bad Request: The request body is missing required fields (email or password). + 401 Unauthorized: The provided email or password does not match any existing user. From e223f4f5c893e8bc1223ebd86b3deabf97eeba85 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 13:24:24 -0300 Subject: [PATCH 10/16] changes readme --- backend-dummy/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/backend-dummy/README.md b/backend-dummy/README.md index ceda47a..2b07147 100644 --- a/backend-dummy/README.md +++ b/backend-dummy/README.md @@ -18,7 +18,7 @@ npm start ## Endpoints -- [POST] /users/login +- [POST] users/login **Description** @@ -26,6 +26,6 @@ npm start **Responses** - 200 OK: Login successful. The user's session cookie is set. - 400 Bad Request: The request body is missing required fields (email or password). - 401 Unauthorized: The provided email or password does not match any existing user. + - 200 OK: Login successful. The user's session cookie is set. + - 400 Bad Request: The request body is missing required fields (email or password). + - 401 Unauthorized: The provided email or password does not match any existing user. From 00f83b3f22c2cf35e54b48f93c99e5c71fd0cc43 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 13:31:51 -0300 Subject: [PATCH 11/16] More changes in the readme --- backend-dummy/README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/backend-dummy/README.md b/backend-dummy/README.md index 2b07147..23db1ef 100644 --- a/backend-dummy/README.md +++ b/backend-dummy/README.md @@ -4,13 +4,13 @@ In the backend-dummy folder run the following commands: -Install the required packages: +1. Install the required packages: ```shell npm install ``` -## Starting the backend +2. Starting the backend ```shell npm start @@ -26,6 +26,6 @@ npm start **Responses** - - 200 OK: Login successful. The user's session cookie is set. - - 400 Bad Request: The request body is missing required fields (email or password). - - 401 Unauthorized: The provided email or password does not match any existing user. + - **200 OK:** Login successful. The user's session cookie is set. + - **400 Bad Request:** The request body is missing required fields (email or password). + - **401 Unauthorized:** The provided email or password does not match any existing user. From 74e8ace2cdc831d36dcd9837d79251807c8e2c28 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 13:50:19 -0300 Subject: [PATCH 12/16] add status code --- backend-dummy/routes/users.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/backend-dummy/routes/users.js b/backend-dummy/routes/users.js index b716291..e6e1a96 100644 --- a/backend-dummy/routes/users.js +++ b/backend-dummy/routes/users.js @@ -14,7 +14,9 @@ router.get("/", function (req, res, next) { router.post("/login", function (req, res, next) { const { email, password } = req.body; if (!email || !password) { - return res.json({ status: "error", message: "Invalid form submission" }); + return res + .status(400) + .json({ status: "error", message: "Invalid form submission" }); } const user = users.find( (user) => user.email === email && user.password === password, From 4cb7e1047ed935c43ce4c4e813719b2d4c61813f Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 15 Jan 2025 14:10:48 -0300 Subject: [PATCH 13/16] Add how it works section --- backend-dummy/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/backend-dummy/README.md b/backend-dummy/README.md index 23db1ef..945ead5 100644 --- a/backend-dummy/README.md +++ b/backend-dummy/README.md @@ -1,4 +1,4 @@ -## Dummy backend +### Dummy backend ## Setup @@ -16,6 +16,10 @@ npm install npm start ``` +## How it works? + +This backend does not use a real database. However, there is a file named users.json that acts as a database. Refer to this file to see the available users for testing purposes. + ## Endpoints - [POST] users/login From d57296b0309950d5cc18b488a4fe1f4ea58536b0 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Thu, 16 Jan 2025 12:49:13 -0300 Subject: [PATCH 14/16] better name --- src/networking/controllers/users.ts | 4 ++-- src/networking/serializers/users.ts | 4 ++-- src/networking/types/user.d.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/networking/controllers/users.ts b/src/networking/controllers/users.ts index d98122e..40a76dd 100644 --- a/src/networking/controllers/users.ts +++ b/src/networking/controllers/users.ts @@ -1,9 +1,9 @@ import { ApiService } from "networking/api-service"; import { API_ROUTES } from "networking/api-routes"; -import { serializeSignUp } from "networking/serializers/users"; +import { serializeLogin } from "networking/serializers/users"; const login = async (email: string, password: string) => { - const serializeCredentials = serializeSignUp(email, password); + const serializeCredentials = serializeLogin(email, password); const response = await ApiService.post(API_ROUTES.LOGIN, { body: JSON.stringify(serializeCredentials), }); diff --git a/src/networking/serializers/users.ts b/src/networking/serializers/users.ts index 5409a12..f3168ef 100644 --- a/src/networking/serializers/users.ts +++ b/src/networking/serializers/users.ts @@ -1,7 +1,7 @@ -export const serializeSignUp = ( +export const serializeLogin = ( email: string, password: string, -): signUpCredentials => ({ +): loginCredentials => ({ email, password, }); diff --git a/src/networking/types/user.d.ts b/src/networking/types/user.d.ts index aa6a21c..47ad8ad 100644 --- a/src/networking/types/user.d.ts +++ b/src/networking/types/user.d.ts @@ -1,4 +1,4 @@ -interface signUpCredentials { +interface loginCredentials { email: string; password: string; } From 00ec77ccb263b50872969d526d5af6d613a533b8 Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 22 Jan 2025 16:22:32 -0300 Subject: [PATCH 15/16] PR feedback --- .env.development.local.example | 1 + backend-dummy/README.md | 4 +++- backend-dummy/app.js | 2 -- backend-dummy/public/index.html | 11 ----------- backend-dummy/public/stylesheets/style.css | 12 ------------ backend-dummy/routes/index.js | 9 --------- src/config/constants.ts | 2 ++ src/networking/api-service.ts | 5 ++++- src/pages/login/login.tsx | 6 ++++-- vite.config.ts | 2 +- 10 files changed, 15 insertions(+), 39 deletions(-) delete mode 100644 backend-dummy/public/index.html delete mode 100644 backend-dummy/public/stylesheets/style.css delete mode 100644 backend-dummy/routes/index.js diff --git a/.env.development.local.example b/.env.development.local.example index 171f635..17b2bca 100644 --- a/.env.development.local.example +++ b/.env.development.local.example @@ -1 +1,2 @@ VITE_API_BASE_URL=REPLACE +VITE_API_BASE_PATH=REPLACE diff --git a/backend-dummy/README.md b/backend-dummy/README.md index 945ead5..5d1e3d3 100644 --- a/backend-dummy/README.md +++ b/backend-dummy/README.md @@ -1,4 +1,6 @@ -### Dummy backend +# Dummy backend + +This backend is a lightweight, Express-based application designed to facilitate rapid testing of common workflows. It serves as a sandbox for developers to validate front-end integrations, prototype new features without relying on fully-fledged backend systems. ## Setup diff --git a/backend-dummy/app.js b/backend-dummy/app.js index 1ce1904..547dcf8 100644 --- a/backend-dummy/app.js +++ b/backend-dummy/app.js @@ -3,7 +3,6 @@ var path = require("path"); var cookieParser = require("cookie-parser"); var logger = require("morgan"); -var indexRouter = require("./routes/index"); var usersRouter = require("./routes/users"); var app = express(); @@ -14,7 +13,6 @@ app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, "public"))); -app.use("/api", indexRouter); app.use("/api/users", usersRouter); module.exports = app; diff --git a/backend-dummy/public/index.html b/backend-dummy/public/index.html deleted file mode 100644 index 8ef6d70..0000000 --- a/backend-dummy/public/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - Express - - - - -

Express

-

Welcome to Express

- - diff --git a/backend-dummy/public/stylesheets/style.css b/backend-dummy/public/stylesheets/style.css deleted file mode 100644 index d20a135..0000000 --- a/backend-dummy/public/stylesheets/style.css +++ /dev/null @@ -1,12 +0,0 @@ -body { - padding: 50px; - font: - 14px "Lucida Grande", - Helvetica, - Arial, - sans-serif; -} - -a { - color: #00b7ff; -} diff --git a/backend-dummy/routes/index.js b/backend-dummy/routes/index.js deleted file mode 100644 index 6351814..0000000 --- a/backend-dummy/routes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require("express"); -var router = express.Router(); - -/* GET home page. */ -router.get("/", function (req, res, next) { - res.render("index", { title: "Express" }); -}); - -module.exports = router; diff --git a/src/config/constants.ts b/src/config/constants.ts index 8022461..b513f27 100644 --- a/src/config/constants.ts +++ b/src/config/constants.ts @@ -16,5 +16,7 @@ export const constants = { logLevel: fetchVariable("VITE_LOG_LEVEL", "info"), + apiBasePath: fetchVariable("VITE_API_BASE_PATH", "/api"), + environment, }; diff --git a/src/networking/api-service.ts b/src/networking/api-service.ts index 58973e5..75eb112 100644 --- a/src/networking/api-service.ts +++ b/src/networking/api-service.ts @@ -41,7 +41,10 @@ class ApiServiceClass { ): Promise { const updatedConfig = { ...config }; updatedConfig.headers = { ...this.addedHeaders, ...(config.headers ?? {}) }; - const fullURL = new URL(`/api/${path}`, constants.apiBaseURL); + const fullURL = new URL( + constants.apiBasePath + "/" + path, + constants.apiBaseURL, + ); const response = await fetch(fullURL, { method, ...updatedConfig, diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index 575fd99..2d17a37 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -5,9 +5,11 @@ import { TextField } from "common/text-field"; import styles from "./login.module.scss"; import { login } from "networking/controllers/users"; import { useNavigate } from "react-router-dom"; +import { useGoToPage } from "hooks/use-go-to-page"; +import { RouteName } from "routes"; export const Login = () => { - const navigate = useNavigate(); + const goToPage = useGoToPage(); const [email, setEmail] = useState(""); const [password, setPassword] = useState(""); const [error, setError] = useState(false); @@ -17,7 +19,7 @@ export const Login = () => { const handleSignIn = async () => { try { await login(email, password); - navigate(`/`); + goToPage(RouteName.Home); } catch (err) { setError(true); } diff --git a/vite.config.ts b/vite.config.ts index c046481..f7e3022 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -29,7 +29,7 @@ export default defineConfig({ ], server: { proxy: { - "/api": { + [process.env.VITE_API_BASE_PATH || "/api"]: { target: "http://localhost:3000", changeOrigin: true, }, From 70109f645648b3acc5d897aefb3b08987f980c0b Mon Sep 17 00:00:00 2001 From: FabianGurevich Date: Wed, 22 Jan 2025 16:52:09 -0300 Subject: [PATCH 16/16] fix lint --- src/networking/api-service.ts | 2 +- src/pages/login/login.tsx | 1 - vite.config.ts | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/networking/api-service.ts b/src/networking/api-service.ts index 75eb112..16bf5a0 100644 --- a/src/networking/api-service.ts +++ b/src/networking/api-service.ts @@ -42,7 +42,7 @@ class ApiServiceClass { const updatedConfig = { ...config }; updatedConfig.headers = { ...this.addedHeaders, ...(config.headers ?? {}) }; const fullURL = new URL( - constants.apiBasePath + "/" + path, + `${constants.apiBasePath}/${path}`, constants.apiBaseURL, ); const response = await fetch(fullURL, { diff --git a/src/pages/login/login.tsx b/src/pages/login/login.tsx index 2d17a37..ba4184e 100644 --- a/src/pages/login/login.tsx +++ b/src/pages/login/login.tsx @@ -4,7 +4,6 @@ import { Button } from "common/button"; import { TextField } from "common/text-field"; import styles from "./login.module.scss"; import { login } from "networking/controllers/users"; -import { useNavigate } from "react-router-dom"; import { useGoToPage } from "hooks/use-go-to-page"; import { RouteName } from "routes"; diff --git a/vite.config.ts b/vite.config.ts index f7e3022..543280a 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -29,7 +29,7 @@ export default defineConfig({ ], server: { proxy: { - [process.env.VITE_API_BASE_PATH || "/api"]: { + [process.env.VITE_API_BASE_PATH ?? "/api"]: { target: "http://localhost:3000", changeOrigin: true, },