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;