##// END OF EJS Templates
the build script is updated
the build script is updated

File last commit:

r0:7110eac54b19 v1.0.0 default
r2:b698f0e8883c default
Show More
Session.js
100 lines | 5.1 KiB | application/javascript | JavascriptLexer
/**
* Created by andrei on 08.04.16.
*/
define([
"dojo/_base/declare",
"dojo/_base/lang",
"dojo/when",
"implab/safe",
"../ForbiddenException"],
function (declare, lang, when, safe, ForbiddenException) {
return declare(null, {
_container: null,
_sessionData: null,
/**
* Создавать анонимную сессию. Если прозрачная аутентификация не
* проводилась, и текущей сессии нет, то может быть создана сессия
* для анонимного пользователя. Это сделано опцией, поскольку не во
* всех системах требуется, отслеживать активность анонимных
* пользователей (это не бесплатно).
*/
_createAnonymousSession: false,
/**
* Регистрировать пользователей, полученных из внешнего источника
* аутентификации.
*/
_autoRegisterUsers: false,
constructor: function (options) {
safe.argumentNotNull(options, "options");
safe.argumentNotNull(options.container, "options.container");
this._container = options.container;
this._createAnonymousSession = options.createAnonymousSession || this._createAnonymousSession;
this._autoRegisterUsers = options.autoRegisterUsers || this._autoRegisterUsers;
this._sessionData = this._initSession();
},
getSessionData: function () {
return this._sessionData;
},
/**
* @remarks Сосздание/восстановление сессии происходит в несколько
* этапов 1. Получаем текущую сессию. 2. Если упешно, то
* выходим. 3. Получаем идентификатор пользователя,
* используя identityProvider 4. Если успешно 5. Создаем
* новую сессию для полученного пользователя, выходим 6.
* Иначе если установлен параметр _createAnonymousSession 7.
* Создаем новую анонимную сессию. 8. Иначе, выходим
*/
_initSession: function () {
let me = this;
let securityAuthority = me._container.getService("securityAuthority");
let securityProvider = me._container.getService("securityProvider");
let identityProvider = me._container.getService("identityProvider");
if (!securityAuthority)
throw new Error("Sessions are not supported, no security authority is supplied");
// пытаемся получить текущую сессию
return when(securityAuthority.getSession(), function (session) {
if (session)
return session;
// пытаемся создать сессию с использованием
// пользователя из внешнего
// источника аутентификации
if (identityProvider) {
return when(identityProvider.getUserLogin(), function (login) {
if (login) {
return when(securityProvider.createUserIdentity(login, false, {
createUser: me._autoRegisterUsers
}), function (uid) {
return securityAuthority.initSession(uid);
}, function (err) {
console.log("Failed to create session for '" + login + "' ", err);
throw new ForbiddenException();
});
} else if (me._createAnonymousSession) {
return when(securityProvider.getAnonymousIdentity(), function (uid) {
return securityAuthority.initSession(uid);
});
} else {
throw new ForbiddenException();
}
});
} else if (me._createAnonymousSession) {
return when(securityProvider.getAnonymousIdentity(), function (uid) {
return securityAuthority.initSession(uid);
});
}
throw new ForbiddenException();
});
}
});
});