-
Notifications
You must be signed in to change notification settings - Fork 1
/
winshare.js
83 lines (65 loc) · 1.56 KB
/
winshare.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
'use strict';
var exec = require('child_process').exec,
os = require('os'),
path = require('path'),
isWindows = (os.platform() == 'win32');
var errs = {}, shares = {};
function share(name, cb) {
exec('net share ' + name, function(err, stdout, stderr) {
var lines = stdout.split(os.EOL);
if (err) {
return cb(err);
}
lines.some(function(l) {
var sharePath;
if (l.indexOf('Path') !== 0) {
return false;
}
sharePath = path.resolve(l.replace(/^Path\s+/, ''));
cb(null, sharePath);
return true;
});
});
}
// too much of a pain due to whitespace and long share names
// function allShares( cb) `{
// exec('net share', function(err, stdout, stderr) {
// var lines = stdout.split(os.EOL);
// if (err) {
// return cb(err);
// }
// // trim the fat
// lines.splice(0,4);
// lines.splice(lines.length-3);
// lines.forEach(function(l) {
// console.log(l.split(/\s{2,}/));
// });
// });
// }
function winshare(name, cb) {
if (!isWindows) {
return cb(new Error('Only useful on windows.'));
}
if (!name) {
return cb(new Error('Name is a required input.'));
}
name = name.toLowerCase();
if (shares[name]) {
return cb(null, shares[name]);
}
share(name, function(err, sharePath) {
errs[name] = err;
shares[name] = sharePath;
if (cb) {
cb(err, sharePath);
}
});
}
// winshare.all = function(cb) {
// allShares(cb);
// }
winshare.clearCache = function() {
errs = {};
shares = {};
};
module.exports = winshare;