-
Notifications
You must be signed in to change notification settings - Fork 0
/
CreateHookCommand.js
91 lines (81 loc) · 3.38 KB
/
CreateHookCommand.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
const BarracksCommand = require('../BarracksCommand');
const Validator = require('../../utils/Validator');
const ObjectReader = require('../../utils/ObjectReader');
function getHookType(program) {
if (program.web) {
return 'web';
} else if (program.googleAnalytics) {
return 'google_analytics';
} else if (program.bigquery) {
return 'bigquery';
}
}
function getEventType(program) {
if (program.ping) {
return 'PING';
}
if (program.enrollment) {
return 'ENROLLMENT';
}
if(program.deviceDataChange) {
return 'DEVICE_DATA_CHANGE';
}
if(program.devicePackageChange) {
return 'DEVICE_PACKAGE_CHANGE';
}
}
function getGoogleClientSecret(program) {
return ObjectReader.readObjectFromFile(program.googleClientSecret);
}
function hasValidEventType(program) {
return (!program.ping && program.enrollment && !program.deviceDataChange && !program.devicePackageChange ||
program.ping && !program.enrollment && !program.deviceDataChange && !program.devicePackageChange ||
!program.ping && !program.enrollment && program.deviceDataChange && !program.devicePackageChange ||
!program.ping && !program.enrollment && !program.deviceDataChange && program.devicePackageChange);
}
function hasValidHookTypeAndArguments(program) {
return (program.web && !program.googleAnalytics && !program.bigquery && program.url && program.url !== true ||
!program.web && program.googleAnalytics && !program.bigquery && program.gaTrackingId && program.gaTrackingId !== true ||
!program.web && !program.googleAnalytics && program.bigquery && program.googleClientSecret && Validator.fileExists(program.googleClientSecret));
}
class CreateHookCommand extends BarracksCommand {
configureCommand(program) {
return program
.option('--ping', 'To create a hook triggered by the ping of a device.')
.option('--enrollment', 'To create a hook for the first ping of a device.')
.option('--deviceDataChange', 'To create a hook triggered when a device pings with new custom client data.')
.option('--devicePackageChange', 'To create a hook triggered when a device pings with new packages.')
.option('--web', 'To create a web hook')
.option('--googleAnalytics', 'To create a Google Analytics hook')
.option('--bigquery', 'To create a BigQuery hook')
.option('--name [value]', 'The unique name of the webhook')
.option('--gaTrackingId [value]', 'The trackingId for the Google Analytics account')
.option('--googleClientSecret [path/to/file]', 'The path to the file with the Google client secret json used to authenticate to BigQuery.')
.option('--url [value]', 'The URL for this webhook');
}
validateCommand(program) {
return !!(hasValidEventType(program) &&
hasValidHookTypeAndArguments(program) &&
program.name && program.name !== true
);
}
execute(program) {
let token;
return this.getAuthenticationToken().then(authToken => {
token = authToken;
if (program.googleClientSecret) {
return getGoogleClientSecret(program);
}
}).then(secret => {
return this.barracks.createHook(token, {
type: getHookType(program),
name: program.name,
eventType: getEventType(program),
url: program.url,
gaTrackingId: program.gaTrackingId,
googleClientSecret: secret
});
});
}
}
module.exports = CreateHookCommand;