github.com/emc-advanced-dev/unik@v0.0.0-20190717152701-a58d3e8e33b7/containers/compilers/rump/nodejs/node-wrapper/node_modules/macaddress/index.js (about) 1 var os = require('os'); 2 3 var lib = {}; 4 5 function parallel(tasks, done) { 6 var results = []; 7 var errs = []; 8 var length = 0; 9 var doneLength = 0; 10 function doneIt(ix, err, result) { 11 if (err) { 12 errs[ix] = err; 13 } else { 14 results[ix] = result; 15 } 16 doneLength += 1; 17 if (doneLength >= length) { 18 done(errs.length > 0 ? errs : errs, results); 19 } 20 } 21 Object.keys(tasks).forEach(function (key) { 22 length += 1; 23 var task = tasks[key]; 24 (global.setImmediate || global.setTimeout)(function () { 25 task(doneIt.bind(null, key), 1); 26 }); 27 }); 28 } 29 30 lib.networkInterfaces = function () { 31 var ifaces = os.networkInterfaces(); 32 var allAddresses = {}; 33 Object.keys(ifaces).forEach(function (iface) { 34 addresses = {}; 35 var hasAddresses = false; 36 ifaces[iface].forEach(function (address) { 37 if (!address.internal) { 38 addresses[(address.family || "").toLowerCase()] = address.address; 39 hasAddresses = true; 40 if (address.mac) { 41 addresses.mac = address.mac; 42 } 43 } 44 }); 45 if (hasAddresses) { 46 allAddresses[iface] = addresses; 47 } 48 }); 49 return allAddresses; 50 }; 51 52 var _getMacAddress; 53 switch (os.platform()) { 54 55 case 'win32': 56 _getMacAddress = require('./lib/windows.js'); 57 break; 58 59 case 'linux': 60 _getMacAddress = require('./lib/linux.js'); 61 break; 62 63 case 'darwin': 64 case 'sunos': 65 _getMacAddress = require('./lib/unix.js'); 66 break; 67 68 default: 69 console.warn("node-macaddress: Unkown os.platform(), defaulting to `unix'."); 70 _getMacAddress = require('./lib/unix.js'); 71 break; 72 73 } 74 75 lib.one = function (iface, callback) { 76 if (typeof iface === 'function') { 77 callback = iface; 78 79 var ifaces = lib.networkInterfaces(); 80 var alleged = [ 'eth0', 'eth1', 'en0', 'en1' ]; 81 iface = Object.keys(ifaces)[0]; 82 for (var i = 0; i < alleged.length; i++) { 83 if (ifaces[alleged[i]]) { 84 iface = alleged[i]; 85 break; 86 } 87 } 88 if (!ifaces[iface]) { 89 if (typeof callback === 'function') { 90 callback("no interfaces found", null); 91 } 92 return null; 93 } 94 if (ifaces[iface].mac) { 95 if (typeof callback === 'function') { 96 callback(null, ifaces[iface].mac); 97 } 98 return ifaces[iface].mac; 99 } 100 } 101 if (typeof callback === 'function') { 102 _getMacAddress(iface, callback); 103 } 104 return null; 105 }; 106 107 lib.all = function (callback) { 108 109 var ifaces = lib.networkInterfaces(); 110 var resolve = {}; 111 112 Object.keys(ifaces).forEach(function (iface) { 113 if (!ifaces[iface].mac) { 114 resolve[iface] = _getMacAddress.bind(null, iface); 115 } 116 }); 117 118 if (Object.keys(resolve).length === 0) { 119 if (typeof callback === 'function') { 120 callback(null, ifaces); 121 } 122 return ifaces; 123 } 124 125 parallel(resolve, function (err, result) { 126 Object.keys(result).forEach(function (iface) { 127 ifaces[iface].mac = result[iface]; 128 }); 129 if (typeof callback === 'function') { 130 callback(null, ifaces); 131 } 132 }); 133 return null; 134 }; 135 136 module.exports = lib;