/** * @class Identity идентификационная информация (удостоверение) пользователя. * Описывает пользователя и способ его аутентификации в системе. Данный * класс является заглушкой, описывающей интерфейс, а также может * использоваться для создания идентификацинной информации вручную. */ define([ "dojo/_base/declare", "implab/safe", "./SecData" ], function (declare, safe, SecData) { let identity = declare(null, { _user : null, _isAnonymous : null, _secData : null, constructor : function(user, opts) { this._user = user; safe.mixin(this, opts, { isAnonymous : '_isAnonymous', secData : '_secData' }); }, getUser : function() { return this._user; }, getSecData : function() { return this._secData; }, /** * Проводит раунд аутентификации, изменяет текущее состояние. Делегирует * выполнение процедуры объекту SecData. * * @param challenge * {*} - данные для аутентификации, зависит от реализации, * например, пароль. * @retuns authResult {Object} - результат аутентификации { challenge : * 'response data', code : AUTH_* }. * @throws {Error} * в случае ошибки или если модуль аутентификации не задан. */ doAuth : function(challenge) { if (this._secData) return this._secData.doAuth(challenge); throw new Error("Authentication is not available for this object"); }, getAuthType : function() { if (this._secData) return this._secData.getAuthType(); return null; }, getIsAuthenticated : function() { if (this._secData) { return this._secData.getAuthSate() == SecData.AUTH_SUCCESS; } return false; }, getIsAnonymous : function() { return this._isAnonymous; }, getAuthState : function() { if (this._secData) return this._secData.getAuthState(); throw new Error("Authentication is not available for this object"); } }); return identity; });