-
Notifications
You must be signed in to change notification settings - Fork 1
/
utils.js
97 lines (81 loc) · 2.34 KB
/
utils.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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
var fs = require('fs');
var extract = require('extract-zip');
function getExt(extName) {
var exts = fs.readdirSync('lib');
return exts.indexOf(extName) !== -1;
}
function addExtension(bufferedZip, appName, resCB) {
/* Makes temp zip file */
fs.writeFile('tmp/' + appName + '.zip', bufferedZip, function(err) {
if (err) {
console.log('Error in writing buffer to zip file, ', err);
}
/* Unpack zip file to individual files */
extract('tmp/' + appName + '.zip', { dir: 'lib/' }, function(err) {
if (err) {
console.log('Couldn\'t unzip file!', err);
}
/* Remove temp file */
fs.unlinkSync('tmp/' + appName + '.zip');
resCB();
});
});
}
function runCommand(transcript, auth, confirmed, cb) {
var match = transcript.match(/(?:\w+)\s(\w+)\s(\w+)(?:\s(.*))?/i);
var extName = match[1];
var cmd = match[2].toLowerCase();
var phrase = cmd + ' ' + match[3];
var ext;
var filename = './lib/' + extName + '/extension.js';
try {
ext = require(filename);
} catch(e) {
console.log(e);
cb(true, 'Sorry, I couldn\'t find this extension');
return;
}
for (var key in ext.commands) {
if (key.indexOf(cmd) === -1)
continue;
if (executeCommand(key))
return;
}
cb(true, 'Sorry, I couldn\'t find ' + cmd);
function executeCommand(key) {
var match = key.match(/\$/g);
if (match === null) {
ext.commands[key]();
return;
}
var args;
try {
args = extractArgs(key, match.length, phrase);
} catch(e) {
return false;
}
ext.commands[key](cb, auth, args, confirmed);
return true;
}
}
function extractArgs(key, numArgs, phrase) {
var regexStr = key;
for (var i = 1; i <= numArgs; i++) {
regexStr = regexStr.replace('$' + i, '(.*)');
}
var regex = new RegExp(regexStr);
match = phrase.match(regex);
var args = match.slice(1);
console.log('args =', args);
return args;
}
function runAuthenticationSequence(extension, cb) {
/* Run authentication given app name and then redirect with callback */
var auth = require('./lib/' + extension + '/auth.js');
cb();
}
module.exports.runCommand = runCommand;
module.exports.getExt = getExt;
module.exports.addExtension = addExtension;
module.exports.extractArgs = extractArgs;
module.exports.runAuthenticationSequence = runAuthenticationSequence;