Операции с данными в памяти устройств

Существует два типа хранимых объектов:

  1. Общедоступные объекты.
    • Чтение или получение информации такого объекта доступно всем пользователям без предъявления PIN (любое состояние аутентификации).
    • Изменение, запись или удаление требует предъявления PIN-кода пользователя (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).
  2. Защищённые объекты.
    • Чтение или получение информации такого объекта доступно только пользователям, предъявившим PIN (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).
    • Изменение, запись или удаление требует предъявления PIN-кода пользователя (состояние аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded).

Запись данных в память устройства

Для записи данных в память устройства используются команды:

  • storeBinaryData - запись данных в общедоступную или защищенную области памяти;
  • modifyBinaryObject - изменения объекта двоичных данных.

Пример записи общедоступного и защищенного объектов

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: 'my pin'
   }
});

// Записать данные в защищённую область памяти
var privateData = 'my private data',
    privateDataLabel = 'Private data';

var privateDataID = JCWebClient2.storeBinaryData({
   args: {
      data: $utf8.encode(privateData),
      label: privateDataLabel,
      isPrivate: true
   }
});

// Записать данные в общедоступную область памяти
var data = 'my data',
    dataLabel = 'Data';

var dataID = JCWebClient2.storeBinaryData({
   args: {
      data: $utf8.encode(data),
      label: dataLabel,
      isPrivate: false
   }
});

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

Получение списка всех объектов, хранящихся на устройстве

Для получения списка всех хранящихся на устройстве объектов используется команда getBinaryObjectList. Команда возвращает разный набор данных, в зависимости от того какие данные хранятся на устройстве (общедоступные или *защищенные) и текущего состояния аутентификации.

Пример получения данных при состоянии аутентификации JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;

// Для примера проверим если было выполнено предъявление PIN-кода, отменить авторизацию
if (JCWebClient2.getLoggedInState().state != JCWebClient2.Vars.AuthState.notBinded) {
    JCWebClient2.unbindToken();
}

// Получить список всех объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
   args: {
      tokenID: tokenID
   }
});

// Проверка наличия защищенного объекта в полученном списке
var privateDataFound = dataObjects.find(function(element) {
   return element.label == privateDataLabel && element.isPrivate == true;
});

// Проверка наличия общедоступного объекта в полученном списке
var dataFound = dataObjects.find(function(element) {
   return element.label == dataLabel && element.isPrivate == false;
});

console.log('privateDataFound: ' + privateDataFound);
console.log('dataFound: ' + dataFound);

// ----- Результат -----
// privateDataFound: false
// dataFound: true

Пример получения данных при состоянии аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: 'my pin'
   }
});

// Получить список всех объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
   args: {
      tokenID: tokenID
   }
});

// Проверка наличия защищенного объекта в полученном списке
var privateDataFound = dataObjects.find(function(element) {
   return element.label == privateDataLabel && element.isPrivate == true;
});

// Проверка наличия общедоступного объекта в полученном списке
var dataFound = dataObjects.find(function(element) {
   return element.label == dataLabel && element.isPrivate == false;
});

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

console.log('privateDataFound: ' + privateDataFound);
console.log('dataFound: ' + dataFound);

// ----- Результат -----
// privateDataFound: true
// dataFound: true

Считывание данных из памяти устройства

Для считывания данных используется команда readBinaryObject.

Пример считывания данных при состоянии аутентификации JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;

// Для примера проверим если было выполнено предъявление PIN-кода, отменить авторизацию
if (JCWebClient2.getLoggedInState().state != JCWebClient2.Vars.AuthState.notBinded) {
    JCWebClient2.unbindToken();
}

// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
   args: {
      tokenID: tokenID
   }
});

// Считать данные из объекта из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
   var binData = JCWebClient2.readBinaryObject({
      args: {
         tokenID: tokenID,
         objectID: element.id
      }
   });

   console.log(element.label + ': ' + $utf8.decode(binData));
});

// ----- Результат -----
// Data: my data

Пример считывания данных при состоянии аутентификации выше, чем JCWebClient2.Vars.AuthState.notBinded

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: 'my pin'
   }
});

// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
   args: {
      tokenID: tokenID
   }
});

// Считать данные из объекта из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
   var binData = JCWebClient2.readBinaryObject({
      args: {
         tokenID: tokenID,
         objectID: element.id
      }
   });

   console.log(element.label + ': ' + $utf8.decode(binData));
});

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

// ----- Результат -----
// Private data: my private data
// Data: my data

Удаление данных из памяти устройства

Для удаления объекта данных из памяти устройства используется команда deleteBinaryObject.

Пример удаления всех объектов, хранящихся на устройстве

// Идентификатор токена
var tokenID = 0;

// Предъявить PIN-код
JCWebClient2.bindToken({
   args: {
      tokenID: tokenID,
      pin: 'my pin'
   }
});

// Получить список объектов данных
var dataObjects = JCWebClient2.getBinaryObjectList({
   args: {
      tokenID: tokenID
   }
});

// Удалить объект из списка, полученного из getBinaryObjectList
dataObjects.forEach(function(element) {
   JCWebClient2.deleteBinaryObject({
      args: {
         objectID: element.id
      }
   });

   console.log(element.label + ' was deleted');
});

// Отменить ввод PIN-кода
JCWebClient2.unbindToken();

// ----- Результат -----
// Private data was deleted
// Data was deleted