Skip to content

Commit ca9e24d

Browse files
committed
fix #22, fix #27
1 parent 27054c5 commit ca9e24d

File tree

4 files changed

+47
-27
lines changed

4 files changed

+47
-27
lines changed

index.js

+43-26
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ function parallel(tasks, done) {
3030
});
3131
}
3232

33+
// Retrieves all interfaces that do feature some non-internal address.
34+
// This function does NOT employ caching as to reflect the current state
35+
// of the machine accurately.
3336
lib.networkInterfaces = function () {
3437
var allAddresses = {};
3538

@@ -53,7 +56,7 @@ lib.networkInterfaces = function () {
5356
if (!address.internal) {
5457
addresses[(address.family || "").toLowerCase()] = address.address;
5558
hasAddresses = true;
56-
if (address.mac) {
59+
if (address.mac && address.mac !== '00:00:00:00:00:00') {
5760
addresses.mac = address.mac;
5861
}
5962
}
@@ -89,17 +92,42 @@ switch (os.platform()) {
8992

9093
}
9194

92-
lib.one = function (iface, callback) {
93-
if (!callback && typeof iface !== 'function') {
94-
return new Promise(function (resolve, reject) {
95-
lib.one(iface, function (err, mac) {
96-
if (err) {
97-
reject(new Error(err));
98-
return;
95+
var validIfaceRegExp = '^[a-z0-9]+$';
96+
var validIfaceRegExpObj = new RegExp(validIfaceRegExp, 'i');
97+
98+
function getMacAddress(iface, callback) {
99+
100+
if (!validIfaceRegExpObj.test(iface)) {
101+
callback(new Error([
102+
'invalid iface: \'', iface,
103+
'\' (must conform to reg exp /',
104+
validIfaceRegExp, '/)'
105+
].join('')), null);
106+
return;
107+
}
108+
109+
_getMacAddress(iface, callback);
110+
}
111+
112+
function promisify(func) {
113+
return new Promise(function (resolve, reject) {
114+
func(function (err, data) {
115+
if (err) {
116+
if (!err instanceof Error) {
117+
err = new Error(err);
99118
}
119+
reject(err);
120+
return;
121+
}
122+
resolve(data);
123+
});
124+
});
125+
}
100126

101-
resolve(mac);
102-
});
127+
lib.one = function (iface, callback) {
128+
if (!callback && typeof iface !== 'function') {
129+
return promisify(function (callback) {
130+
lib.one(iface, callback);
103131
});
104132
}
105133

@@ -133,39 +161,28 @@ lib.one = function (iface, callback) {
133161
}
134162
}
135163
if (typeof callback === 'function') {
136-
_getMacAddress(iface, callback);
164+
getMacAddress(iface, callback);
137165
}
138166
return null;
139167
};
140168

141169
lib.all = function (callback) {
142-
if (!callback) {
143-
return new Promise(function (resolve, reject) {
144-
lib.all(function (err, all) {
145-
if (err) {
146-
reject(new Error(err));
147-
return;
148-
}
149-
150-
resolve(all);
151-
});
152-
});
170+
if (typeof callback !== 'function') {
171+
return promisify(lib.all);
153172
}
154173

155174
var ifaces = lib.networkInterfaces();
156175
var resolve = {};
157176

158177
Object.keys(ifaces).forEach(function (iface) {
159178
if (!ifaces[iface].mac) {
160-
resolve[iface] = _getMacAddress.bind(null, iface);
179+
resolve[iface] = getMacAddress.bind(null, iface);
161180
}
162181
});
163182

164183
if (Object.keys(resolve).length === 0) {
165184
if (typeof callback === 'function') {
166-
process.nextTick(function(){
167-
callback(null, ifaces);
168-
});
185+
process.nextTick(callback.bind(null, ifaces));
169186
}
170187
return ifaces;
171188
}

lib/linux.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* jshint node: true */
12
var execFile = require('child_process').execFile;
23

34
module.exports = function (iface, callback) {
@@ -8,4 +9,4 @@ module.exports = function (iface, callback) {
89
}
910
callback(null, out.trim().toLowerCase());
1011
});
11-
};
12+
};

lib/unix.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* jshint node: true */
12
var execFile = require('child_process').execFile;
23

34
module.exports = function (iface, callback) {

lib/windows.js

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
/* jshint node: true */
12
var execFile = require('child_process').execFile;
23

34
var regexRegex = /[-\/\\^$*+?.()|[\]{}]/g;

0 commit comments

Comments
 (0)