From 486d0aab41b90dc72ac291e52c7057124096b836 Mon Sep 17 00:00:00 2001 From: Valentin <valentin.henriques@etu.univ-amu.fr> Date: Sun, 10 Dec 2023 23:47:51 +0100 Subject: [PATCH] mise en place du refresh token --- db/database.db | Bin 24576 -> 32768 bytes index.js | 3 +++ migrations/001-db.sql | 9 +++++++++ src/DAO/MonkeyDbDAO.js | 19 +++++++++++++++++++ src/DAO/SpeciesDbDAO.js | 16 ++++++++++++++++ src/routes/auth/authLogin.js | 19 ++++++++++--------- src/routes/auth/authRefresh.js | 24 ++++++++++++++++++++++++ 7 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 src/routes/auth/authRefresh.js diff --git a/db/database.db b/db/database.db index ef9e61a81ab022667b3de14a2853a19442bd0565..af371cd4f8279233c3047cf40934b337b4147fe3 100644 GIT binary patch delta 681 zcmZoTz}V2hG(lRBnSp_Ug8>29Ch8bVGc)KFE#hThU|{EVXW)<I>*uZIdCfD0dnUL0 z#>TT;^#SZ`;@aAbktK;qIjO~kIhiG?@x`fyrKx$z=v)rxAXmo_SA`HqCm&Y@G_@Le ziMgpd#i@mwjTLO{;+mR_&Dvlyi&E2yQj0U<OY*Z*^NLY<?9P(NMxsbgKENkmuizLO z;_vC_9OUZj>KCHJ%cY>8pio+zS`?p|qTuNl;_B`i1Qi9FuMpxI5u)JdAEMwF>f-~I zNv$ZzEUJu8Ni0cK2=VlF4GwYi4M11q<{#wh>F%fC?HZ{8wLnurJjm6}HOSS^*)<q! zYq3UViY70Y=H@9ph0Ls+^$eW#8yibGIeO|C*%<_9ux^f(;$)t@Lz<U&(0N4)hgYn5 zxi%-sMjDxV_&SDFr4{5l>7^&SB~=yX8Ks-2rFxqu7Wt%Gy5;DFrR1mOS7bQ)6i51* ixf+(5_@$c%PyXO9!o(o3S<qlM|HKLLY@mdOlM4X9J;rzd delta 327 zcmZo@U}`wPI6+#Fg@J*AjR65zC+ZlBvoPotE#hThU|{8$!oVNN*Uwwa^O|SMW<dox zp3PHu3Yl5CLK(P1H#T~6@pNl2vNH%yiEOM-Nt)~^AF%nh<W{E5X|kb4rUfC{Rr;Ql z<)J1P&MBVhQJFb`mQkr86(vTIX{CXt0i|xak)COKW-dWVrr9n*c_rz|mEn^=_=~VH z@~1NJr*0Nhh~}?vlwf3TGEc4a%1Clg&h*dp@(iu=H1x~#EcVO`GEH{&H1o_ZhzN7` zveZkh^fF8~3aj+YDlqrV&B^x6%CAfdF3(I1cQf$J%CGRNa;)^t3N-M|axM39_R2~1 zaLn}2ay9mK@vQW7NjC8fakA7iDK88T&oVMg4ag~v&`ptv_bv2y^(Z&13=P&z^ogj- QHqA{oO;7O;2#L%G0I$+wEC2ui diff --git a/index.js b/index.js index 5ef99e5..9760286 100644 --- a/index.js +++ b/index.js @@ -25,6 +25,8 @@ import authSignup from './src/routes/auth/authSignup.js'; import authLogin from './src/routes/auth/authLogin.js'; import authMiddleware from './src/routes/auth/authMiddleware.js'; import authDisconnect from './src/routes/auth/authDisconnect.js'; +import authRefresh from './src/routes/auth/authRefresh.js'; + async function createDb() { if(fs.existsSync('./db/database.db') == false){ const db = await open({ @@ -66,6 +68,7 @@ api.use(express.json()); api.use('/auth/signup',authSignup); api.use('/auth/login',authLogin); api.use('/auth/disconnect', authDisconnect); +api.use('/auth/refresh', authRefresh); api.use('/hello',authMiddleware,helloRoute); api.use('/monkey/deleteAll',monkeyDeletteAll); diff --git a/migrations/001-db.sql b/migrations/001-db.sql index 2424d4e..ea7a174 100644 --- a/migrations/001-db.sql +++ b/migrations/001-db.sql @@ -31,6 +31,15 @@ CREATE TABLE invalid_token ( token TEXT ); +CREATE TABLE refresh_tokens ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + user_id INTEGER, + token TEXT NOT NULL, + expiry_date TIMESTAMP NOT NULL, + FOREIGN KEY(user_id) REFERENCES users(id) +); + + -- Insertion des données dans la table 'user' INSERT INTO user (id, username, password) VALUES (1, 'admin', 'admin'); diff --git a/src/DAO/MonkeyDbDAO.js b/src/DAO/MonkeyDbDAO.js index 9b5d1e7..a0f2d22 100644 --- a/src/DAO/MonkeyDbDAO.js +++ b/src/DAO/MonkeyDbDAO.js @@ -21,6 +21,25 @@ class MonkeyDbDAO extends IMonkeyDAO{ filename: './db/database.db', driver: sqlite3.Database }); + const dataMonkey = await this.db.get('SELECT * FROM monkey WHERE id = ?', [monkey.id]); + if(monkey.name == null){ + monkey.name = dataMonkey.name; + } + if(monkey.speciesId == null){ + monkey.speciesId = dataMonkey.speciesId; + } + if(monkey.sex == null){ + monkey.sex = dataMonkey.sex + } + if(monkey.age == null){ + monkey.age = dataMonkey.age; + } + if(monkey.birthLoc == null){ + monkey.birthLoc = dataMonkey.birthLoc; + } + if(monkey.liveLoc == null){ + monkey.liveLoc = dataMonkey.liveLoc; + } await this.db.run('UPDATE monkey SET name = ?, speciesId = ?, sex=?, age = ?, birthLoc = ?, liveLoc = ? WHERE id = ?',[monkey.name, monkey.speciesId, monkey.sex, monkey.age, monkey.birthLoc, monkey.liveLoc, monkey.id]); } async delete(id){ diff --git a/src/DAO/SpeciesDbDAO.js b/src/DAO/SpeciesDbDAO.js index 83db1c0..4bc5890 100644 --- a/src/DAO/SpeciesDbDAO.js +++ b/src/DAO/SpeciesDbDAO.js @@ -19,6 +19,22 @@ class SpeciesDbDAO extends ISpeciesDAO{ filename: './db/database.db', driver: sqlite3.Database }); + const dataSpecies = await this.db.get('SELECT * FROM species WHERE id = ?', [species.id]); + if(species.name == null){ + species.name = dataSpecies.name; + } + if(species.habitat == null){ + species.habitat = dataSpecies.habitat; + } + if(species.height == null){ + species.height = dataSpecies.height; + } + if(species.weight == null){ + species.weight = dataSpecies.weight; + } + if(species.diet == null){ + species.diet = dataSpecies.diet; + } await this.db.run('UPDATE species SET name = ?, habitat = ?, height = ?, weight = ?, diet = ? WHERE id = ?', [species.name, species.habitat, species.height, species.weight, species.diet, species.id]); } diff --git a/src/routes/auth/authLogin.js b/src/routes/auth/authLogin.js index df8cc48..4c0437b 100644 --- a/src/routes/auth/authLogin.js +++ b/src/routes/auth/authLogin.js @@ -29,19 +29,20 @@ router.post('/', async (req, res) => { } }; - jwt.sign( - payload, - process.env.JWT_SECRET, - { expiresIn: 3600 }, - (err, token) => { - if (err) throw err; - res.json({ token }); - } - ); + const accessToken = jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: '15m' }); + const refreshToken = jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: '7d' }); + + // Stockez le refresh token dans la base de données + //db.prepare('INSERT INTO refresh_tokens (user_id, token, expiry_date) VALUES (?, ?, datetime("now", "+7 day"))').run(user.id, refreshToken); + + + res.json({ accessToken, refreshToken }); } catch (err) { console.error(err.message); res.status(500).send('Erreur du serveur'); } }); + + export default router; diff --git a/src/routes/auth/authRefresh.js b/src/routes/auth/authRefresh.js new file mode 100644 index 0000000..3154343 --- /dev/null +++ b/src/routes/auth/authRefresh.js @@ -0,0 +1,24 @@ +import express from 'express'; +import bcrypt, { compare } from 'bcrypt'; +import jwt from 'jsonwebtoken'; +import sqlite from 'better-sqlite3'; +import dotenv from 'dotenv'; +dotenv.config(); + +const router = express.Router(); + +router.post('/refresh', (req, res) => { + const refreshToken = req.body.token; + + // Vérifiez si le refresh token est valide + + jwt.verify(refreshToken, process.env.JWT_SECRET, (err, user) => { + if (err) return res.sendStatus(403); + + const accessToken = jwt.sign({ id: user.id }, process.env.JWT_SECRET, { expiresIn: '15m' }); + + res.json({ accessToken }); + }); +}); + +export default router; \ No newline at end of file -- GitLab