-
Notifications
You must be signed in to change notification settings - Fork 28
/
Copy pathbasic-auth-request.js
45 lines (36 loc) · 1.22 KB
/
basic-auth-request.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
'use strict';
const request = require('request');
const buildError = (body) => {
const err = new Error(body.message);
err.statusCode = body.code;
return err;
};
async function getTokenFromBasicAuth (settings) {
return new Promise((resolve, reject) => {
const authUrl = `${settings.url}/oauth/authorize?response_type=token&client_id=openshift-challenging-client`;
const credentials = `${settings.user}:${settings.password}`;
const auth = `Basic ${Buffer.from(credentials).toString('base64')}`;
const req = {
method: 'GET',
url: authUrl,
headers: {
'Authorization': auth
},
strictSSL: 'insecureSkipTlsVerify' in settings ? !settings.insecureSkipTlsVerify : true
};
request(req, (err, resp, body) => {
if (err) return reject(buildError(err));
if (resp.statusCode === 401) {
return reject(new Error(`401 Unable to authenticate user ${settings.user}`));
}
const hash = resp.request.uri.hash;
const startIndex = hash.indexOf('=') + 1;
const stopIndex = hash.indexOf('&');
const accessToken = hash.slice(startIndex, stopIndex);
return resolve(accessToken);
});
});
}
module.exports = {
getTokenFromBasicAuth
};