Решил создать модуль (C/C++ Addons) для NW.js для работы с Рутокенами и поделиться с сообществом кодом, а так же пригласить вас поучаствовать в этом Open source проекте.

Суть идеи в том, чтобы можно было использовать все возможности Рутокена в NW приложении с помощью чистого и понятного JavaScript, а также этот модуль может быть использован в Node.JS или io.js.

API RutokenJS
  • CKR initialize()
  • bool isInitialize()
  • CKR finalize()
  • object countSlot()
  • object getLibInfo()
  • object getSlotInfo(int slot)
  • object getTokenInfo(int slot)
  • object getMechanismList(int slot)
  • object getObjectList()
  • CKR login(int slot, string pin)
  • CKR loguot()
  • object random(int size)
  • CKR initToken(int slot)
  • CKR openSession()
  • CKR closeSession()
  • CKR closeAllSessions()
  • object getSessionInfo()
  • CKR getOperationState()
  • CKR setOperationState()


Пример использования:

var rutoken = require('./rutoken/rutoken');

var cntSlot = rutoken.countSlot();
console.log('cntSlot: ', cntSlot);

if(cntSlot > 0) {
    for(var i=0; i <= cntSlot-1; i++) {
        rutoken.getSlotInfo(i, function(data) {
            console.log('Slot info #' + i + "\n", data);
        });
        rutoken.getTokenInfo(i, function(data) {
            console.log('Token info #' + i + "\n", data);
        });
        rutoken.getMechanismList(i, function(data) {
            console.log('Mechanism list #' + i + "\n", data);
        });
    }
}


Проект на GitHub: https://github.com/roman-sopov/RutokenJS

Примеры Node addon: https://github.com/nodejs/node-addon-examples
Документация Node addon: https://nodejs.org/api/addons.html
Документация Рутокен SDK: http://developer.rutoken.ru/pages/viewpage.action?pageId=3178534

Комментарии (14)


  1. affka
    28.08.2015 03:45
    +6

    Загуглить, конечно, не долго было, но пару предложений о том, что такое «Рутокен» — можно было вставить.
    В репозитории у вас и исходники, и nw.js (nw.exe + всякие dll) и билд для windows… А еще примеры сишной библиотеки в app прям лежат, в билде пути C:\… и т.д… Чистить, чистить и еще раз чистить репозиторий и проект.
    Лучше nw.js вообще выкинуть из репозитория, а билды хранить в отдельной папке.

    И, я так понимаю, это все только для windows актуально? Об этом статье/репозитории стоит указать


    1. sopov
      28.08.2015 09:12

      Почищу, это мой первый такой опыт. Т.е. надо оставить только app/rutoken и выкинуть из него примеры, да?
      Пока это под Windows т.к. других ОС у меня нет, но библиотеки рутокена есть под Mac и Unix и NW.js тоже кроссплатформенный.


      1. affka
        28.08.2015 09:45

        да. Примеры можно оставить в виде ссылки в README.md на библиотеку


        1. sopov
          28.08.2015 13:00

          Репозиторий привел в порядок.


  1. DigitalSmile
    28.08.2015 09:07
    +1

    Вопрос не холивара ради: зачем к именам методов добавлять префикс «fn»? Не первый раз просто с подобным сталкиваюсь, к чему эти лишние символы и чем не угодил «getSlotInfo» и «getSlotList»?

    И еще вопрос, не пробовали с Electron запускать? Под капотом вроде тот же набор (node.js + io.js).


    1. sopov
      28.08.2015 09:14

      Да как-то привычка от ExtJS осталась, когда нужно было добавлять в объекты собственные функции. Да, вы правы это лишнее, пофикшу :)
      Про Electron не слышал, посмотрю.


    1. sopov
      28.08.2015 10:12

      Что-то не пошло…

      Uncaught Exception:
      Error: The specified module could not be found.
      C:\...\electron-v0.31.1-win32-ia32\app\rutoken\build\Release\rutoken.node
      at Error (native)
      at Object.module.(anonymous function) (ATOM_SHELL_ASAR.js:137:20)
      at Object.module.(anonymous function) [as .node] (ATOM_SHELL_ASAR.js:137:20)
      at Module.load (module.js:355:32)
      at Function.Module._load (module.js:310:12)
      at Module.require (module.js:365:17)
      at require (module.js:384:17)
      at Object. (C:\...\electron-v0.31.1-win32-ia32\app\main.js:4:15)
      at Module._compile (module.js:430:26)
      at Object.Module._extensions..js (module.js:448:10)


      1. Mithgol
        28.08.2015 11:28

        Мрачно подозреваю, что в Electron другой ABI, так что addon поневоле придётся пересобрать.


        1. sopov
          28.08.2015 11:34

          Наверно так и есть, только пока я не разобрался как под Electron собирать.


          1. DigitalSmile
            28.08.2015 11:44

            По сборке нативных модулей помочь не могу, не владею нужными знаниями, к сожалению.
            Возможно поможет ссылка на документацию по работе с нативными модулями для старта.


  1. skor
    28.08.2015 15:39
    -1

    Внимание читателям хаба cpp

    Если кто-то вдруг всё таки (всякое бывает) сначала читает комментарии, предупреждаю, про C++ тут нет ни слова.
    Страшное слово рутокен это вот статья на вики .

    NW.js, Node-Webkit даже не стал гуглить (и вам не советую), что-то про веб.


    1. sopov
      28.08.2015 16:26

      Во-первых addon пишется на С++, и чтобы это понять можно было посмотреть ссылки или код на GitHub.
      Во-вторых это для тех кто знаком с Рутокеном, NW и С++.


      1. skor
        28.08.2015 18:02
        -3

        Да мало ли проектов пишется на С++. О всех в хаб писать?


        1. sopov
          28.08.2015 19:38
          +1

          На то он и хаб тематический, чтобы в него писать.