...
Expand | ||
---|---|---|
| ||
// ПРИМЕР ДЛЯ CHROME Так как все функции Плагина выполняются в отдельных потоках, не заставляя браузер ждать выполнения операций, его интерфейс постороен на промисах. Промисы - это способ организации асинхронного кода. Все функции Плагина возвращают промисы, хотя текущая документация еще не содержит это. Универсальный метод добавления обработчиков: promise.then(onFulfilled, onRejected) onFulfilled – функция, которая будет вызвана с результатом при успешном выполнении асинхронной функции. onRejected – функция, которая будет вызвана с ошибкой при ошибке выполнения асинхроннной функции. // ПРИМЕР ПОДПИСАНИЯ ДАННЫХ С ИСПОЛЬЗУЮЯ РУТОКЕН ПЛАГИН Для запуска примера в настройках Адаптера Рутокен Плагин надо поставить флажок "Разрешить открывать локальные файлы по ссылкам" plugin; = function () { rutoken.ready Проверка установки расширение 'Адаптера Рутокен Плагина' в Chrome .then( function () { if (window.chrome || typeof InstallTrigger !== 'undefined') { return rutoken.isExtensionInstalled(); } else { return Promise.resolve(true); } }) Проверка установки Рутокен Плагина .then( function (result) { if (result) { return rutoken.isPluginInstalled(); } else { return Promise.reject("Не удаётся найти расширение 'Адаптер Рутокен Плагина'"); } }) Загрузка плагина .then( function (result) { if (result) { return rutoken.loadPlugin(); } else { return Promise.reject("Не удаётся найти Плагин"); } }) начинать работать с плагином .then( function (result) { if (!result) { return Promise.reject("Не удаётся загрузить Плагин"); } else { plugin = result; return Promise.resolve(); } }) () { document.getElementById("pluginStatus").innerHTML = "<pre>Плагин загрузился</pre>"; }, function (msg) { document.getElementById("pluginStatus").innerHTML = "<pre>" + msg + "</pre>"; }); // Фунцкия обратоки ошибок от Плагина Загрузите нужную версию документации по ссылке https://dev.rutoken.ru/display/PUB/RutokenPluginDoc В разделе CLASS: ERRORCODES описаны все возможные ошибки handleError(reason) { var errorCodes = plugin.errorCodes; if (!isErrCode) { { case errorCodes.PIN_INCORRECT:
PIN");
default:
ошибка"); } rutokenHandle, certHandle; = function () { // Получение текста для подписи var textToSign = document.getElementById("textToSign").value; if (textToSign.length == 0) { alert("Не хватает текста для подписи"); return; } Перебор подключенных Рутокенов plugin.enumerateDevices() function (devices) { if (devices.length > 0) { return Promise.resolve(devices[0]); } else { return Promise.reject("Рутокен не обнаружен"); } }) Проверка залогиненности .then( function (firstDevice) { rutokenHandle = firstDevice; return plugin.getDeviceInfo(rutokenHandle, plugin.TOKEN_INFO_IS_LOGGED_IN); }) Логин на первый токен в списке устройств PIN-кодом по умолчанию.then( function (isLoggedIn) { if (isLoggedIn) { return токен в списке устройств PIN-кодо// ПРИМЕР ДЛЯ GOOGLE CHROME // ПРИМЕР ПОДПИСАНИЯ ДАННЫХ С ИСПОЛЬЗУЮЯ РУТОКЕН ПЛАГИН // Фунцкия обратоки ошибок от Плагина } else { return plugin.login(rutokenHandle, "12345678"); } }) Перебор пользовательских сертификатов на токене .then( function () { return plugin.enumerateCertificates(rutokenHandle, plugin.CERT_CATEGORY_USER); }) Подписание данных из текстового поля на первом найденом сертификате .then( function (certs) { if (certs.length > 0) { certHandle = certs[0]; return plugin.sign(rutokenHandle, certHandle, textToSign, false, {}); } else { return Promise.reject("Сертификат на Рутокен не обнаружен"); } }) Отображение подписанных данных в формате CMS .then( function (cms) { alert(cms); }) Закрытие сессии .then( function () { plugin.logout(rutokenHandle); }, handleError); |
Expand | ||
---|---|---|
| ||
var rutoken = (function (my) { function isFunction (obj) { function proxyMember (target, member) { function returnPromise (promise) { function initialize () { function initializeExtension() { if (result) { return true; my.ready = readyPromise; function initializeWithoutPlugin () { function loadPlugin () { // onload callback must be set before type attribute in IE earlier than 11. document.body.appendChild(obj); var promise = new Promise(function (resolve, reject) { return promise; function loadChromePlugin () { function onPluginLoaded (plugin, error) { var callback = loadCallbacks.shift(); function resolveObject (obj) { for (var m in obj) { if (promises.length == 0) { function wrapNewPluginWithOldInterface () { for (var m in this) { return new Promise(function (resolve) { function wrapOldPluginWithOldInterface () { return new Promise(function (resolve) { function wrapOldPluginWithNewInterface (plugin) { for (var m in plugin) { return new Promise(function (resolve) { if (extension) { return my; if (typeof module !== 'undefined') {
|
...