1 |
|
2 | 'use strict';
|
3 |
|
4 | var request = require('request');
|
5 | var url = require('url');
|
6 | var fs = require('fs');
|
7 | var _ = require('underscore');
|
8 | var netrc = require('netrc')();
|
9 |
|
10 | var DefaultBaseURI = 'https://api.enterprise.apigee.com';
|
11 | var DefaultAsyncLimit = 4;
|
12 |
|
13 | var 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 |
|
114 | module.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 |
|
126 | var DefaultOptions = {
|
127 | baseuri: DefaultBaseURI,
|
128 | asynclimit: DefaultAsyncLimit
|
129 | };
|
130 |
|
131 | module.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 |
|
158 | module.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 |
|
226 | ro.strictSSL = false;
|
227 | }
|
228 |
|
229 | return request.defaults(ro);
|
230 | };
|