Commit 460b5414 authored by Pedro Eduardo Trujillo's avatar Pedro Eduardo Trujillo
Browse files

Renombra Session como Auth y mejora refresh

Cambia de nombre para dejar más clara la funcionalidad real del
componente anteriormente llamado Session, ahora Auth. Se encarga de
gestionar la autenticación del usuario, su inicio, fin y renovación.

Mejora el proceso de renovación de autenticación mediante refreshToken,
omitiendo recargas innecesarias y refactorizando el código asociado.
parent 22fb85b1
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -9,7 +9,7 @@ define([
	, 'src/app/component/layout/InnerLayoutImpl'
	, 'src/app/component/layout/OuterLayoutImpl'
	, 'src/app/component/Loading'
	, 'src/app/component/session/Session'
	, 'src/app/component/auth/Auth'
	, 'src/app/component/meta/MetaTags'
	, 'src/app/component/ModuleStore'
	, 'src/app/component/Router'
@@ -33,7 +33,7 @@ define([
	, InnerLayoutImpl
	, OuterLayoutImpl
	, Loading
	, Session
	, Auth
	, MetaTags
	, ModuleStore
	, Router
@@ -162,7 +162,7 @@ define([
				globalNode: rootNode
			});

			new Session({
			new Auth({
				parentChannel: parentChannel
			});
		},
+5 −5
Original line number Diff line number Diff line
define([
	'dojo/_base/declare'
	, 'dojo/_base/lang'
	, 'src/app/component/session/_Login'
	, 'src/app/component/session/_Logout'
	, 'src/app/component/session/_Refresh'
	, 'src/app/component/auth/_Login'
	, 'src/app/component/auth/_Logout'
	, 'src/app/component/auth/_Refresh'
	, 'src/component/base/_Module'
	, 'src/component/base/_Store'
], function(
@@ -18,12 +18,12 @@ define([

	return declare([_Module, _Store, _Login, _Logout, _Refresh], {
		//	summary:
		//		Módulo para gestionar el inicio y fin de sesión del usuario, así como mantenerla activa.
		//		Módulo para gestionar la autenticación del usuario, incluyendo inicio, fin y renovación.

		constructor: function(args) {

			this.config = {
				ownChannel: 'session',
				ownChannel: 'auth',
				events: {
					USER_LOGGED_IN: 'userLoggedIn',
					USER_LOGIN_ERROR: 'userLoginError',
+9 −7
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ define([

	return declare(null, {
		//	summary:
		//		Lógica relativa al inicio de sesión del usuario.
		//		Lógica relativa al establecimiento de la autenticación del usuario.

		constructor: function(args) {

@@ -112,7 +112,7 @@ define([

			this._emitEvt('USER_LOGGED_IN', tokensData);

			this._updateUserSessionData(tokensData);
			this._updateAuthData(tokensData);
		},

		_onLoginFailure: function(errorData) {
@@ -120,21 +120,23 @@ define([
			this._emitEvt('USER_LOGIN_ERROR', errorData);
		},

		_updateUserSessionData: function(tokensData) {
		_updateAuthData: function(tokensData) {

			const oauthTokenData = tokensData[0],
				oidTokenData = tokensData[1];

			this._addUserOidData(oidTokenData);
			this._addUserOauthData(oauthTokenData);
			this._updateAuthOidData(oidTokenData);
			this._updateAuthOauthData(oauthTokenData);
		},

		_addUserOidData: function(data) {
		_updateAuthOidData: function(data) {

			this._updateAuthRefreshData(data);

			Credentials.set('oidAccessToken', data.access_token);
		},

		_addUserOauthData: function(data) {
		_updateAuthOauthData: function(data) {

			Credentials.set('accessToken', data.access_token);
		}
+5 −3
Original line number Diff line number Diff line
@@ -18,7 +18,7 @@ define([

	return declare(null, {
		//	summary:
		//		Lógica relativa al cierre de sesión del usuario.
		//		Lógica relativa a la finalización de la autenticación del usuario.

		constructor: function(args) {

@@ -121,7 +121,7 @@ define([

			this._emitEvt('USER_LOGGED_OUT', logoutData);

			this._removeUserSessionData();
			this._removeAuthData();
		},

		_onLogoutFailure: function(errorData) {
@@ -129,7 +129,9 @@ define([
			this._emitEvt('USER_LOGOUT_ERROR', errorData);
		},

		_removeUserSessionData: function() {
		_removeAuthData: function() {

			this._removeAuthRefreshData();

			Credentials.remove('oidAccessToken');
			Credentials.remove('accessToken');
+44 −26
Original line number Diff line number Diff line
@@ -14,13 +14,13 @@ define([

	return declare(null, {
		//	summary:
		//		Lógica relativa a la renovación de la sesión del usuario.
		//		Lógica relativa a la renovación de la autenticación del usuario.

		constructor: function(args) {

			this.config = {
				_refreshTarget: redmicConfig.services.refreshToken,
				_sessionCheckInterval: 10000
				_authCheckIntervalSecondsTimeout: 30
			};

			lang.mixin(this, this.config, args);
@@ -28,37 +28,60 @@ define([
			aspect.after(this, '_initialize', lang.hitch(this, this._refreshInitialize));
			aspect.before(this, '_dataAvailable', lang.hitch(this, this._refreshDataAvailable));
			aspect.before(this, '_errorAvailable', lang.hitch(this, this._refreshErrorAvailable));
			aspect.before(this, '_updateUserSessionData',
				lang.hitch(this, this._updateRefreshSessionDataOnUpdateUserSessionData));
			aspect.before(this, '_removeUserSessionData', lang.hitch(this,
				this._removeRefreshSessionDataOnRemoveUserSessionData));
		},

		_refreshInitialize: function() {

			if (this._missingAuthData()) {
				return;
			}

			this.target.push(this._refreshTarget);

			setInterval(lang.hitch(this, this._checkSessionValidity), this._sessionCheckInterval);
			this._authCheckIntervalHandler = setInterval(lang.hitch(this, this._checkAuthExpiry),
				this._authCheckIntervalSecondsTimeout * 1000);

			this._checkAuthExpiry();
		},

		_missingAuthData: function() {

			return !Credentials.get('refreshToken') || !Credentials.get('expiresAt') ||
				!Credentials.get('refreshExpiresAt');
		},

		_checkSessionValidity: function() {
		_checkAuthExpiry: function() {

			const accessTokenExpiresAt = Credentials.get('expiresAt');

			if (!accessTokenExpiresAt) {
				console.log('  missing access token expiry, omitting auth check');
				return;
			}

			const accessTokenExpiresAt = Credentials.get('expiresAt'),
				currentTime = Math.floor(Date.now() / 1000);
			const currentTimeSeconds = this._getCurrentTimeInSeconds(),
				accessTokenExpirySeconds = accessTokenExpiresAt - this._authCheckIntervalSecondsTimeout;

			if (accessTokenExpiresAt && currentTime < accessTokenExpiresAt) {
				console.log('  access token is still valid');
			if (currentTimeSeconds < accessTokenExpirySeconds) {
				console.log('  access token is still valid, omitting refresh');
				return;
			}

			const refreshTokenExpiresAt = Credentials.get('refreshExpiresAt');

			if (refreshTokenExpiresAt && currentTime < refreshTokenExpiresAt) {
			if (!refreshTokenExpiresAt) {
				console.log('  missing refresh token expiry, omitting auth check');
				return;
			}

			const refreshTokenExpirySeconds = refreshTokenExpiresAt - this._authCheckIntervalSecondsTimeout;

			if (currentTimeSeconds < refreshTokenExpirySeconds) {
				console.log('  refresh token is still valid, refreshing!!');
				this._refreshToken();
			} else {
				console.log('  refresh token is invalid, logging out!!');
				this._removeUserSessionData();
				this._removeAuthData();
			}
		},

@@ -102,7 +125,7 @@ define([

			this._emitEvt('USER_TOKEN_REFRESHED', tokenData);

			this._updateRefreshSessionData(tokenData);
			this._updateAuthOidData(tokenData);
		},

		_onRefreshFailure: function(errorData) {
@@ -110,12 +133,7 @@ define([
			this._emitEvt('USER_REFRESH_ERROR', errorData);
		},

		_updateRefreshSessionDataOnUpdateUserSessionData: function(tokensData) {

			this._updateRefreshSessionData(tokensData[1]);
		},

		_updateRefreshSessionData: function(data) {
		_updateAuthRefreshData: function(data) {

			const expiresAt = this._getExpiryDate(data.expires_in),
				refreshExpiresAt = this._getExpiryDate(data.refresh_expires_in);
@@ -125,17 +143,17 @@ define([
			Credentials.set('refreshExpiresAt', refreshExpiresAt);
		},

		_getExpiryDate: function(expiresIn) {
		_getCurrentTimeInSeconds: function() {

			return Math.floor(Date.now() / 1000) + expiresIn;
			return Math.floor(Date.now() / 1000);
		},

		_removeRefreshSessionDataOnRemoveUserSessionData: function() {
		_getExpiryDate: function(expiresIn) {

			this._removeRefreshSessionData();
			return this._getCurrentTimeInSeconds() + expiresIn;
		},

		_removeRefreshSessionData: function() {
		_removeAuthRefreshData: function() {

			Credentials.remove('expiresAt');
			Credentials.remove('refreshToken');
Loading