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 | 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 |
|
91 | module.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 |
|
103 | var DefaultOptions = {
|
104 | baseuri: DefaultBaseURI,
|
105 | asynclimit: DefaultAsyncLimit
|
106 | };
|
107 |
|
108 | module.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 |
|
135 | module.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 |
|
195 | ro.strictSSL = false;
|
196 | }
|
197 |
|
198 | return request.defaults(ro);
|
199 | };
|