UNPKG

3.72 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 toggle: true
18 },
19 username: {
20 name: 'Username',
21 shortOption: 'u',
22 required: true,
23 prompt: true
24 },
25 password: {
26 name: 'Password',
27 shortOption: 'p',
28 required: true,
29 prompt: true,
30 secure: true
31 },
32 header: {
33 name: 'Header',
34 shortOption: 'H',
35 required: false,
36 prompt: false,
37 multiple: true
38 },
39 token: {
40 name: 'Token',
41 shortOption: 't',
42 required: true,
43 prompt: false
44 },
45 netrc: {
46 name: 'netrc',
47 shortOption: 'N',
48 required: false,
49 toggle: true
50 },
51 organization: {
52 name: 'Organization',
53 shortOption: 'o',
54 required: true
55 },
56 baseuri: {
57 name: 'Base URI',
58 shortOption: 'L'
59 },
60 debug: {
61 name: 'Debug',
62 shortOption: 'D',
63 toggle: true
64 },
65 verbose: {
66 name: 'Verbose',
67 shortOption: 'V',
68 toggle: true
69 },
70 json: {
71 name: 'JSON',
72 shortOption: 'j',
73 toggle: true
74 },
75 cafile: {
76 name: 'CA file',
77 shortOption: 'c'
78 },
79 insecure: {
80 name: 'insecure',
81 shortOption: 'k',
82 toggle: true
83 },
84 asynclimit: {
85 name: 'Async limit',
86 shortOption: 'a',
87 type: 'int'
88 }
89};
90
91module.exports.defaultDescriptor = function(opts) {
92 var o = {};
93 var n;
94 for (n in DefaultDescriptor) {
95 o[n] = DefaultDescriptor[n];
96 }
97 for (n in opts) {
98 o[n] = opts[n];
99 }
100 return o;
101};
102
103var DefaultOptions = {
104 baseuri: DefaultBaseURI,
105 asynclimit: DefaultAsyncLimit
106};
107
108module.exports.defaultOptions = function(opts) {
109 for (var n in DefaultOptions) {
110 if (!opts[n]) {
111 opts[n] = DefaultOptions[n];
112 }
113 }
114 if (!opts.organization) {
115 opts.organization = process.env['APIGEE_ORGANIZATION'];
116 }
117 if (opts.netrc) {
118 var mgmtUrl = url.parse(opts.baseuri);
119 if (netrc[mgmtUrl.hostname]) {
120 opts.username = netrc[mgmtUrl.hostname].login;
121 opts.password = netrc[mgmtUrl.hostname].password;
122 }
123 } else if (opts.token) {
124 opts.prompt = true;
125 } else {
126 if (!opts.username) {
127 opts.username = process.env['APIGEE_USERNAME'];
128 }
129 if (!opts.password) {
130 opts.password = process.env['APIGEE_PASSWORD'];
131 }
132 }
133};
134
135module.exports.defaultRequest = function(opts) {
136
137 var auth = {};
138
139 if(opts.token){
140 auth = {
141 bearer: opts.token
142 }
143 } else {
144 if(opts.username && opts.password){
145 auth = {
146 username: opts.username,
147 password: opts.password.getValue()
148 }
149 }
150 }
151
152 var hdrs = {};
153 if (opts.header) {
154 var header;
155 opts.header.forEach(element => {
156 header = element.split(":");
157 hdrs[header[0]] = header[1];
158 });
159 }
160
161 var ro = {
162 auth: auth,
163 json: true,
164 headers: hdrs,
165 agentOptions: {}
166 };
167
168 if (opts.baseuri) {
169 var pu = url.parse(opts.baseuri);
170 if ((pu.protocol === 'https:') &&
171 process.env.https_proxy) {
172 opts.proxy = process.env.https_proxy;
173
174 } else if ((pu.protocol === 'http:') &&
175 process.env.http_proxy) {
176 opts.proxy = process.env.http_proxy;
177 }
178 }
179
180
181 if (opts.cafile) {
182 var files = opts.cafile.split(','),
183 ca = [];
184
185 _.each(files, function(file) {
186 ca.push(fs.readFileSync(file))
187 });
188
189 ro.agentOptions.ca = ca;
190 }
191
192 if (opts.insecure) {
193 ro.agentOptions.rejectUnauthorized = false;
194 // Skips certificate validation
195 ro.strictSSL = false;
196 }
197
198 return request.defaults(ro);
199};