-
Notifications
You must be signed in to change notification settings - Fork 3
/
cli.js
79 lines (68 loc) · 2.38 KB
/
cli.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
module.exports = function () {
"use strict";
var fs = require("fs"),
path = require("path"),
program = require("commander"),
configFile,
config = {
auth: {}
},
defaults = {
auth: {
accessToken: null,
accessSecret: null,
consumerKey: null,
consumerSecret: null
}
},
CONFIG_FILE_NAME = ".tweetserverrc";
/*
* Search for a file, starting in `dir` and continuing right up the root.
*
* Adapted from JSHint (https://github.com/jshint/jshint/blob/master/src/cli/cli.js)
*/
function findFile(name, dir) {
var directory = dir || process.cwd(),
filename = path.normalize(path.join(directory, name)),
parent = path.resolve(directory, "../../");
if (fs.existsSync(filename)) {
return filename;
}
if (directory === parent) {
return null;
}
return findFile(name, parent);
}
program
.version("0.0.1")
.option("-k, --access-token <key>", "your Twitter API access token")
.option("-a, --access-secret <secret>", "your Twitter API access token secret")
.option("-c, --consumer-key <key>", "your Twitter application consumer key")
.option("-s, --consumer-secret <secret>", "your Twitter application consumer secret")
.option("-p, --port <port>", "the port on which the server will run");
program.parse(process.argv);
// Search for a config file in any ancestor directory and the home directory
configFile = findFile(CONFIG_FILE_NAME);
if (!configFile) {
configFile = path.normalize(path.join(process.env.HOME, CONFIG_FILE_NAME));
if (!fs.existsSync(configFile)) {
configFile = null;
}
}
if (configFile) {
config = JSON.parse(fs.readFileSync(configFile, "utf8"));
}
// Command line args override config file
Object.keys(defaults.auth).forEach(function (key) {
if (program[key]) {
config.auth[key] = program[key];
}
});
if (program.port) {
config.port = program.port;
}
if (!config.auth.accessToken || !config.auth.accessSecret || !config.auth.consumerKey || !config.auth.consumerSecret) {
program.help();
}
require("./app")(config);
};