Initial commit. Experimental cross-platform frontend for yubikey programming.
/*######################################################################
### I N I T I A L I Z A T I O N
######################################################################*/
var Y = global.Y;
// Global jQuery callback queues. Used across the application to trigger actions
// on various events.
//
Y.callback = function( name, flags ) {
if ( ! Y.callbacks ) Y.callbacks = {};
// Create a new callback queue if one doesn't already exist
// for the provided +name+.
//
if ( ! Y.callbacks[name] ) {
if ( ! flags ) flags = 'unique';
Y.callbacks[name] = $.Callbacks( flags );
}
return Y.callbacks[name];
};
// Node's gui interface.
Y.gui = require( 'nw.gui' );
// Execute yubi external processes.
//
Y.yubiexec = function( cmd, args ) {
// Add the dynamic lib path for libyubi.
//
var lib = './yubi/' + process.platform + '/lib';
var env = process.env;
env[ 'DYLD_LIBRARY_PATH' ] = env[ 'DYLD_LIBRARY_PATH' ] + ':' + lib;
// FIXME: need to add linux and windows
if ( ! args ) args = [];
var binary = './yubi/' + process.platform + '/bin/' + cmd;
Y.fs.chmodSync( binary, 0755 );
var child = Y.spawn( binary, args, { env: env });
if ( ! child ) {
Y.callback( cmd + '-fatal' ).fire();
return;
}
// Send callbacks when data is received.
//
child.stdout.on( 'data', function(data) {
Y.callback( cmd ).fire( data );
});
child.stderr.on( 'data', function(data) {
Y.callback( cmd + '-error' ).fire( data );
});
// Log exit code.
//
child.on( 'close', function(code) {
console.log( cmd + ' process exited with code: ' + code);
});
};
// Callback behaviors for ykinfo execution.
//
Y.callback( 'ykinfo' ).add( function(data) {
Y.keyinfo = {};
$.each( data.toString().split("\n"), function(i, info) {
var match = info.match( /^(\w+):\s+(.+)$/ );
if ( match ) Y.keyinfo[ match[1] ] = match[2];
});
});
Y.callback( 'ykinfo-fatal' ).add( function() { Y.keyinfo = {} } );
Y.callback( 'ykinfo-error' ).add( function() { Y.keyinfo = {} } );