custom session

This commit is contained in:
NyxiumYuuki 2021-05-28 21:01:35 +02:00
parent 99bf6e8f7c
commit dd82d15144
2 changed files with 30 additions and 27 deletions

View file

@ -1,11 +1,12 @@
const sessionJWT = require ('jsonwebtoken'); const sessionJWT = require ('jsonwebtoken');
const fs = require ('fs'); const fs = require ('fs');
// renvoie un nouveau token JWT // renvoie un nouveau token JWT
function createSessionJWT (userId) { function createSessionJWT (username) {
// ci-dessous, on met en place le cookie de session JWT : // ci-dessous, on met en place le cookie de session JWT :
// 1/ on recupere notre clef privee // 1/ on recupere notre clef privee
const RSA_PRIVATE_KEY = fs.readFileSync('./keys/jwtRS256.key'); const RSA_PRIVATE_KEY = fs.readFileSync('../keys/jwtRS256.key');
// 2/ on signe un token JWT. Le payload est l'identifiant de // 2/ on signe un token JWT. Le payload est l'identifiant de
// l'utilisateur ainsi qu'une date d'expiration à mi-parcours : // l'utilisateur ainsi qu'une date d'expiration à mi-parcours :
@ -18,7 +19,7 @@ function createSessionJWT (userId) {
// session. // session.
const jwtToken = sessionJWT.sign( const jwtToken = sessionJWT.sign(
{ {
userId: userId, username: username,
midExp: Math.floor(Date.now() / 1000) + 1800 // validité: 30mn midExp: Math.floor(Date.now() / 1000) + 1800 // validité: 30mn
}, },
RSA_PRIVATE_KEY, RSA_PRIVATE_KEY,
@ -40,14 +41,15 @@ function createSessionCookie(req, res, payload) {
// midExp, alors le cookie est encore valide et on peut le renvoyer. Sinon, // midExp, alors le cookie est encore valide et on peut le renvoyer. Sinon,
// on doit recalculer un nouveau cookie. // on doit recalculer un nouveau cookie.
let jwtToken = ''; let jwtToken = '';
if ((typeof payload.userId !== 'undefined') && if ((typeof payload.username !== 'undefined') &&
(typeof payload.midExp !== 'undefined') && (typeof payload.midExp !== 'undefined') &&
(Math.floor(Date.now() / 1000) <= payload.midExp)) { (Math.floor(Date.now() / 1000) <= payload.midExp)) {
jwtToken = req.cookies.SESSIONID; jwtToken = req.headers.cookie;
} }
else { else {
// on crée un nouveau cookie // on crée
jwtToken = createSessionJWT(payload.userId); // un nouveau cookie
jwtToken = createSessionJWT(payload.username);
} }
// on renvoie le cookie au client // on renvoie le cookie au client
@ -63,14 +65,13 @@ module.exports.createSessionCookie = createSessionCookie;
function decodeSessionCookie(req) { function decodeSessionCookie(req) {
// si l'on n'a pas de cookie de session, on renvoie une session avec vide, // si l'on n'a pas de cookie de session, on renvoie une session avec vide,
// avec juste un userId à -1 // avec juste un userId à -1
console.log(req.cookies);
if (typeof req.cookies.SESSIONID === 'undefined') {
return { userId: -1 };
}
const sessionid = req.cookies.SESSIONID;
if (typeof req.headers.cookie === 'undefined') {
return { username: -1 };
}
const sessionid = req.headers.cookie.replace('SESSIONID=','');
// on lit la clef publique // on lit la clef publique
const RSA_PUBLIC_KEY = fs.readFileSync('./keys/jwtRS256.key.pub'); const RSA_PUBLIC_KEY = fs.readFileSync('../keys/jwtRS256.key.pub');
// on récupère les données du cookie // on récupère les données du cookie
try { try {
@ -81,7 +82,7 @@ function decodeSessionCookie(req) {
return token; return token;
} }
catch (err) { catch (err) {
return {userId: -1}; return {username: err};
} }
} }
module.exports.decodeSessionCookie = decodeSessionCookie; module.exports.decodeSessionCookie = decodeSessionCookie;

View file

@ -1,11 +1,12 @@
const sessionJWT = require ('jsonwebtoken'); const sessionJWT = require ('jsonwebtoken');
const fs = require ('fs'); const fs = require ('fs');
// renvoie un nouveau token JWT // renvoie un nouveau token JWT
function createSessionJWT (userId) { function createSessionJWT (username) {
// ci-dessous, on met en place le cookie de session JWT : // ci-dessous, on met en place le cookie de session JWT :
// 1/ on recupere notre clef privee // 1/ on recupere notre clef privee
const RSA_PRIVATE_KEY = fs.readFileSync('./keys/jwtRS256.key'); const RSA_PRIVATE_KEY = fs.readFileSync('../keys/jwtRS256.key');
// 2/ on signe un token JWT. Le payload est l'identifiant de // 2/ on signe un token JWT. Le payload est l'identifiant de
// l'utilisateur ainsi qu'une date d'expiration à mi-parcours : // l'utilisateur ainsi qu'une date d'expiration à mi-parcours :
@ -18,7 +19,7 @@ function createSessionJWT (userId) {
// session. // session.
const jwtToken = sessionJWT.sign( const jwtToken = sessionJWT.sign(
{ {
userId: userId, username: username,
midExp: Math.floor(Date.now() / 1000) + 1800 // validité: 30mn midExp: Math.floor(Date.now() / 1000) + 1800 // validité: 30mn
}, },
RSA_PRIVATE_KEY, RSA_PRIVATE_KEY,
@ -40,14 +41,15 @@ function createSessionCookie(req, res, payload) {
// midExp, alors le cookie est encore valide et on peut le renvoyer. Sinon, // midExp, alors le cookie est encore valide et on peut le renvoyer. Sinon,
// on doit recalculer un nouveau cookie. // on doit recalculer un nouveau cookie.
let jwtToken = ''; let jwtToken = '';
if ((typeof payload.userId !== 'undefined') && if ((typeof payload.username !== 'undefined') &&
(typeof payload.midExp !== 'undefined') && (typeof payload.midExp !== 'undefined') &&
(Math.floor(Date.now() / 1000) <= payload.midExp)) { (Math.floor(Date.now() / 1000) <= payload.midExp)) {
jwtToken = req.cookies.SESSIONID; jwtToken = req.headers.cookie;
} }
else { else {
// on crée un nouveau cookie // on crée
jwtToken = createSessionJWT(payload.userId); // un nouveau cookie
jwtToken = createSessionJWT(payload.username);
} }
// on renvoie le cookie au client // on renvoie le cookie au client
@ -63,13 +65,13 @@ module.exports.createSessionCookie = createSessionCookie;
function decodeSessionCookie(req) { function decodeSessionCookie(req) {
// si l'on n'a pas de cookie de session, on renvoie une session avec vide, // si l'on n'a pas de cookie de session, on renvoie une session avec vide,
// avec juste un userId à -1 // avec juste un userId à -1
if (typeof req.cookies.SESSIONID === 'undefined') {
return { userId: -1 };
}
const sessionid = req.cookies.SESSIONID;
if (typeof req.headers.cookie === 'undefined') {
return { username: -1 };
}
const sessionid = req.headers.cookie.replace('SESSIONID=','');
// on lit la clef publique // on lit la clef publique
const RSA_PUBLIC_KEY = fs.readFileSync('./keys/jwtRS256.key.pub'); const RSA_PUBLIC_KEY = fs.readFileSync('../keys/jwtRS256.key.pub');
// on récupère les données du cookie // on récupère les données du cookie
try { try {
@ -80,7 +82,7 @@ function decodeSessionCookie(req) {
return token; return token;
} }
catch (err) { catch (err) {
return {userId: -1}; return {username: err};
} }
} }
module.exports.decodeSessionCookie = decodeSessionCookie; module.exports.decodeSessionCookie = decodeSessionCookie;