#6264 - renewToken #1824

Merged
jsegarra merged 36 commits from 6264-renewToken into dev 2023-12-20 09:22:29 +00:00
5 changed files with 11 additions and 76 deletions
Showing only changes of commit d364a50ec4 - Show all commits

View File

@ -29,7 +29,7 @@ module.exports = Self => {
const {accessToken: token} = ctx.req; const {accessToken: token} = ctx.req;
// Check if current token is valid // Check if current token is valid
const isValid = await Self.validateToken(token); const isValid = await validateToken(token);
jsegarra marked this conversation as resolved Outdated
Outdated
Review

El método validateToken solo se llama desde aquí en toda la aplicación, puede eliminarse y poner su código directamente aquí.

El método validateToken solo se llama desde aquí en toda la aplicación, puede eliminarse y poner su código directamente aquí.

Era la idea, pero no la seguí porque había un remoteMethod de validateToken y asumí que si existía seria por algo y había que aprovecharlo.

Consideras que deberíamos mover la lógica de ese método a este y eliminarlo?

Era la idea, pero no la seguí porque había un remoteMethod de validateToken y asumí que si existía seria por algo y había que aprovecharlo. Consideras que deberíamos mover la lógica de ese método a este y eliminarlo?

Si ves que sólo se llama desde aquí sí.

Si ves que sólo se llama desde aquí sí.
if (isValid) throw new UserError(`The renew period has not been exceeded`, 'periodNotExceeded'); if (isValid) throw new UserError(`The renew period has not been exceeded`, 'periodNotExceeded');
const {courtesyTime} = await models.AccessTokenConfig.findOne({fields: ['courtesyTime']}); const {courtesyTime} = await models.AccessTokenConfig.findOne({fields: ['courtesyTime']});
jsegarra marked this conversation as resolved Outdated
Outdated
Review

Para que se selecciona renewPeriod si luego no se utiliza?

Para que se selecciona `renewPeriod` si luego no se utiliza?

Oh, tienes razón la línea venia heredada de otro sitio

Oh, tienes razón la línea venia heredada de otro sitio
@ -43,4 +43,14 @@ module.exports = Self => {
return {id: accessToken.id, ttl: accessToken.ttl}; return {id: accessToken.id, ttl: accessToken.ttl};
}; };
async function validateToken(token) {
const accessTokenConfig = await models.AccessTokenConfig.findOne({fields: ['renewPeriod', 'courtesyTime']});
const now = Date.now();
const differenceMilliseconds = now - token.created;
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
const isValid = differenceSeconds < accessTokenConfig.renewPeriod - accessTokenConfig.courtesyTime;
return isValid;
}
}; };

View File

@ -1,43 +0,0 @@
const {models} = require('vn-loopback/server/server');
describe('Validate Token', () => {
const startingTime = Date.now();
let ctx = null;
beforeAll(async() => {
const unAuthCtx = {
req: {
headers: {},
connection: {
remoteAddress: '127.0.0.1'
},
getLocale: () => 'en'
},
args: {}
};
let login = await models.VnUser.signIn(unAuthCtx, 'salesAssistant', 'nightmare');
let accessToken = await models.AccessToken.findById(login.token);
ctx = {req: {accessToken: accessToken}};
});
beforeEach(() => {
jasmine.clock().install();
jasmine.clock().mockDate(new Date(startingTime));
});
afterEach(() => {
jasmine.clock().uninstall();
});
it('Token is not expired', async() => {
const isValid = await models.VnUser.validateToken(ctx.req.accessToken);
expect(isValid).toBeTrue();
});
it('Token is expired', async() => {
jasmine.clock().mockDate(new Date(startingTime + 21600000));
const isValid = await models.VnUser.validateToken(ctx.req.accessToken);
expect(isValid).toBeFalse();
});
});

View File

@ -1,24 +0,0 @@
const {models} = require('vn-loopback/server/server');
module.exports = Self => {
Self.remoteMethod('validateToken', {
description: 'Validates the current logged user token',
returns: {
type: 'Boolean',
root: true
},
http: {
path: `/validateToken`,
verb: 'GET'
}
});
Self.validateToken = async function(token) {
const accessTokenConfig = await models.AccessTokenConfig.findOne({fields: ['renewPeriod', 'courtesyTime']});
const now = Date.now();
const differenceMilliseconds = now - token.created;
const differenceSeconds = Math.floor(differenceMilliseconds / 1000);
const isValid = differenceSeconds < accessTokenConfig.renewPeriod - accessTokenConfig.courtesyTime;
return isValid;
};
};

View File

@ -10,7 +10,6 @@ module.exports = function(Self) {
require('../methods/vn-user/sign-in')(Self); require('../methods/vn-user/sign-in')(Self);
require('../methods/vn-user/acl')(Self); require('../methods/vn-user/acl')(Self);
require('../methods/vn-user/recover-password')(Self); require('../methods/vn-user/recover-password')(Self);
require('../methods/vn-user/validate-token')(Self);
require('../methods/vn-user/privileges')(Self); require('../methods/vn-user/privileges')(Self);
require('../methods/vn-user/validate-auth')(Self); require('../methods/vn-user/validate-auth')(Self);
require('../methods/vn-user/renew-token')(Self); require('../methods/vn-user/renew-token')(Self);

View File

@ -104,13 +104,6 @@
"permission": "ALLOW" "permission": "ALLOW"
}, },
{ {
"property": "validateToken",
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "$authenticated",
"permission": "ALLOW"
},
{
"property": "validateAuth", "property": "validateAuth",
"accessType": "EXECUTE", "accessType": "EXECUTE",
"principalType": "ROLE", "principalType": "ROLE",