UNPKG

4.32 kBJavaScriptView Raw
1/* jshint node: true */
2'use strict';
3
4var request = require('request');
5var url = require('url');
6var fs = require('fs');
7var _ = require('underscore');
8var netrc = require('netrc')();
9
10var DefaultBaseURI = 'https://api.enterprise.apigee.com';
11var DefaultAsyncLimit = 4;
12
13var DefaultDescriptor = {
14 help: {
15 name: 'Help',
16 shortOption: 'h',
17 scope: 'default',
18 toggle: true
19 },
20 username: {
21 name: 'Username',
22 shortOption: 'u',
23 scope: 'default',
24 required: true,
25 prompt: true
26 },
27 password: {
28 name: 'Password',
29 shortOption: 'p',
30 scope: 'default',
31 required: true,
32 prompt: true,
33 secure: true
34 },
35 header: {
36 name: 'Header',
37 shortOption: 'H',
38 scope: 'default',
39 required: false,
40 prompt: false,
41 multiple: true
42 },
43 token: {
44 name: 'Token',
45 shortOption: 't',
46 scope: 'default',
47 required: false,
48 prompt: false
49 },
50 netrc: {
51 name: 'netrc',
52 shortOption: 'N',
53 scope: 'default',
54 required: false,
55 toggle: true
56 },
57 organization: {
58 name: 'Organization',
59 shortOption: 'o',
60 scope: 'default',
61 required: true
62 },
63 baseuri: {
64 name: 'Base URI',
65 shortOption: 'L',
66 scope: 'default'
67 },
68 debug: {
69 name: 'Debug',
70 shortOption: 'D',
71 scope: 'default',
72 toggle: true,
73 },
74 verbose: {
75 name: 'Verbose',
76 shortOption: 'V',
77 scope: 'default',
78 toggle: true
79 },
80 json: {
81 name: 'JSON',
82 shortOption: 'j',
83 toggle: true
84 },
85 cafile: {
86 name: 'CA file',
87 shortOption: 'c',
88 scope: 'default'
89 },
90 keyfile: {
91 name: 'Key file',
92 shortOption: 'K',
93 scope: 'default'
94 },
95 certfile: {
96 name: 'Cert file',
97 shortOption: 'C',
98 scope: 'default'
99 },
100 insecure: {
101 name: 'insecure',
102 shortOption: 'k',
103 scope: 'default',
104 toggle: true
105 },
106 asynclimit: {
107 name: 'Async limit',
108 shortOption: 'a',
109 scope: 'default',
110 type: 'int'
111 }
112};
113
114module.exports.defaultDescriptor = function(opts) {
115 var o = {};
116 var n;
117 for (n in DefaultDescriptor) {
118 o[n] = DefaultDescriptor[n];
119 }
120 for (n in opts) {
121 o[n] = opts[n];
122 }
123 return o;
124};
125
126var DefaultOptions = {
127 baseuri: DefaultBaseURI,
128 asynclimit: DefaultAsyncLimit
129};
130
131module.exports.defaultOptions = function(opts) {
132 for (var n in DefaultOptions) {
133 if (!opts[n]) {
134 opts[n] = DefaultOptions[n];
135 }
136 }
137 if (!opts.organization) {
138 opts.organization = process.env['APIGEE_ORGANIZATION'];
139 }
140 if (opts.netrc) {
141 var mgmtUrl = url.parse(opts.baseuri);
142 if (netrc[mgmtUrl.hostname]) {
143 opts.username = netrc[mgmtUrl.hostname].login;
144 opts.password = netrc[mgmtUrl.hostname].password;
145 }
146 } else if (opts.token) {
147 opts.prompt = true;
148 } else {
149 if (!opts.username) {
150 opts.username = process.env['APIGEE_USERNAME'];
151 }
152 if (!opts.password) {
153 opts.password = process.env['APIGEE_PASSWORD'];
154 }
155 }
156};
157
158module.exports.defaultRequest = function(opts) {
159
160 var auth = {};
161
162 if(opts.token){
163 auth = {
164 bearer: opts.token
165 }
166 } else {
167 if(opts.username && opts.password){
168 auth = {
169 username: opts.username,
170 password: opts.password.getValue()
171 }
172 }
173 }
174
175 var hdrs = {};
176 if (opts.header) {
177 var header;
178 opts.header.forEach(element => {
179 header = element.split(":");
180 hdrs[header[0]] = header[1];
181 });
182 }
183
184 var ro = {
185 auth: auth,
186 json: true,
187 headers: hdrs,
188 agentOptions: {}
189 };
190
191 if (opts.baseuri) {
192 var pu = url.parse(opts.baseuri);
193 if ((pu.protocol === 'https:') &&
194 process.env.https_proxy) {
195 opts.proxy = process.env.https_proxy;
196
197 } else if ((pu.protocol === 'http:') &&
198 process.env.http_proxy) {
199 opts.proxy = process.env.http_proxy;
200 }
201 }
202
203
204 if (opts.cafile) {
205 var files = opts.cafile.split(','),
206 ca = [];
207
208 _.each(files, function(file) {
209 ca.push(fs.readFileSync(file))
210 });
211
212 ro.agentOptions.ca = ca;
213 }
214
215 if (opts.keyfile) {
216 ro.key = fs.readFileSync(opts.keyfile);
217 }
218
219 if (opts.certfile) {
220 ro.cert = fs.readFileSync(opts.certfile);
221 }
222
223 if (opts.insecure) {
224 ro.agentOptions.rejectUnauthorized = false;
225 // Skips certificate validation
226 ro.strictSSL = false;
227 }
228
229 return request.defaults(ro);
230};