From 40e53df3e8da8aac305127ae8b0165e1955fd552 Mon Sep 17 00:00:00 2001 From: dorian melenotte Date: Thu, 19 Sep 2024 12:38:16 +0200 Subject: [PATCH] ADD: login and register working with the api --- back-end/api/login.js | 22 + back-end/api/register.js | 22 + back-end/bun.lockb | Bin 6342 -> 150523 bytes back-end/index.js | 65 ++- back-end/package-lock.json | 842 +++++++++++++++++++++++++++++++++++++ back-end/package.json | 12 +- 6 files changed, 939 insertions(+), 24 deletions(-) create mode 100644 back-end/api/login.js create mode 100644 back-end/api/register.js create mode 100644 back-end/package-lock.json diff --git a/back-end/api/login.js b/back-end/api/login.js new file mode 100644 index 0000000..dcbda50 --- /dev/null +++ b/back-end/api/login.js @@ -0,0 +1,22 @@ +import { PrismaClient } from "@prisma/client"; +import jwt from "jsonwebtoken"; + +const prisma = new PrismaClient(); + +export default async function login(req, res) { + const { email, pswd } = req.body; + + const user = await prisma.user.findUnique({ + where: { email }, + }); + if (user && pswd == user.pswd) { + const token = jwt.sign( + { id: user.id, email: user.email }, + process.env.JWT_SECRET, + { expiresIn: "1h" } + ); + res.status(200).json(token); + } else { + res.status(401).json({ message: "Invalid email or password" }); + } +} diff --git a/back-end/api/register.js b/back-end/api/register.js new file mode 100644 index 0000000..5d030d1 --- /dev/null +++ b/back-end/api/register.js @@ -0,0 +1,22 @@ +import { PrismaClient } from "@prisma/client"; + +const prisma = new PrismaClient(); + +export default async function register(req, res) { + const { email, pswd, username } = req.body; + + try { + const newUser = await prisma.user.create({ + data: { + username, + email, + pswd, + }, + }); + res.status(201).json(newUser); + } catch (error) { + res + .status(500) + .json({ message: "User creation failed", error: error.message }); + } +} diff --git a/back-end/bun.lockb b/back-end/bun.lockb index 4d2ea9af3495aa34d639dcf57ba91afb75358d67..3be6064296067dc6aa97c826093a9d299f1ba964 100755 GIT binary patch literal 150523 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

Uh1`5%46GXU=4%p~If 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 diff --git a/back-end/index.js b/back-end/index.js index 20ca97e..0b9a79c 100644 --- a/back-end/index.js +++ b/back-end/index.js @@ -1,29 +1,50 @@ import { PrismaClient } from "@prisma/client"; +import cors from "cors"; +import login from "./api/login"; +import register from "./api/register"; const client = new PrismaClient(); +const express = require("express"); +const app = express(); +app.use(express.json()); +app.use(cors()); client.$connect(); -console.log("conected"); -function createuser() { - client.user - .create({ - data: { - email: "exemple@gmrgerail.com", - pswd: "1234", - username: "lazlor", - }, - }) - .then(() => {}); -} -//createuser(); +app.post("/api/register", register); +app.post("/api/login", login); -async function getuser(req, res) { - const posts = await client.user.findMany({ - where: { - username: "lazlor", - }, - }); - console.log(posts); -} -getuser(); +app.listen(3000); client.$disconnect(); + +/* function verify_token(req, res, next) { + const token = req.headers["token"]; + if (token) { + jwt.verify(token, process.env.JWT_SECRET, (err, user) => { + if (err) { + res.send("ERROR") + return + } + next(); + }) + return; + } + res.status(404); + res.send("ERROR") + } */ + +/* app.use('/profile', function (req, res, next) { + const token = req.headers["authorization"]; + if (token) { + jwt.verify(token, secret, (err, user) => { + if (err) { + res.send("ERROR") + return + } + req.user = user; + next(); + }) + return; + } + res.status(404); + res.send("ERROR") + }); */ diff --git a/back-end/package-lock.json b/back-end/package-lock.json new file mode 100644 index 0000000..1107f34 --- /dev/null +++ b/back-end/package-lock.json @@ -0,0 +1,842 @@ +{ + "name": "back-end", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "back-end", + "dependencies": { + "@prisma/client": "5.19.1", + "express": "^4.21.0" + }, + "devDependencies": { + "@types/bun": "latest", + "prisma": "5.19.1" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, + "node_modules/@prisma/client": { + "version": "5.19.1", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.19.1", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "5.19.1", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.19.1", + "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", + "@prisma/fetch-engine": "5.19.1", + "@prisma/get-platform": "5.19.1" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.19.1", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.19.1", + "@prisma/engines-version": "5.19.1-2.69d742ee20b815d88e17e54db4a2a7a3b30324e3", + "@prisma/get-platform": "5.19.1" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.19.1", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.19.1" + } + }, + "node_modules/@types/bun": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/bun/-/bun-1.1.9.tgz", + "integrity": "sha512-SXJRejXpmAc3qxyN/YS4/JGWEzLf4dDBa5fLtRDipQXHqNccuMU4EUYCooXNTsylG0DmwFQsGgEDHxZF+3DqRw==", + "dev": true, + "dependencies": { + "bun-types": "1.1.27" + } + }, + "node_modules/@types/node": { + "version": "20.12.14", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.14.tgz", + "integrity": "sha512-scnD59RpYD91xngrQQLGkE+6UrHUPzeKZWhhjBSa3HSkwjbQc38+q3RoIVEwxQGRw3M+j5hpNAM+lgV3cVormg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "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==", + "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==" + }, + "node_modules/body-parser": { + "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==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "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.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/bun-types": { + "version": "1.1.27", + "resolved": "https://registry.npmjs.org/bun-types/-/bun-types-1.1.27.tgz", + "integrity": "sha512-rHXAiIDefeMS/fleNM1rRDYqolJGNRdch3+AuCRwcZWaqTa1vjGBNsahH/HVV7Y82frllYhJomCVSEiHzLzkgg==", + "dev": true, + "dependencies": { + "@types/node": "~20.12.8", + "@types/ws": "~8.5.10" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "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==", + "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", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "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" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "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==", + "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==", + "engines": { + "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==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "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==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dependencies": { + "ee-first": "1.1.1" + }, + "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==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==" + }, + "node_modules/prisma": { + "version": "5.19.1", + "devOptional": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "5.19.1" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + }, + "optionalDependencies": { + "fsevents": "2.3.3" + } + }, + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "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", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dependencies": { + "debug": "2.6.9", + "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": "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/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "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==" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "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==", + "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==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.5.4", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "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==", + "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==", + "engines": { + "node": ">= 0.8" + } + } + } +} diff --git a/back-end/package.json b/back-end/package.json index 35adb9a..4b0931a 100644 --- a/back-end/package.json +++ b/back-end/package.json @@ -10,6 +10,14 @@ "typescript": "^5.0.0" }, "dependencies": { - "@prisma/client": "5.19.1" + "@prisma/client": "5.19.1", + "@types/express": "^4.17.21", + "@types/jsonwebtoken": "^9.0.6", + "express": "^4.21.0", + "jest": "^29.7.0", + "supertest": "^7.0.0" + }, + "scripts": { + "test": "jest" } -} \ No newline at end of file +}