navy
Version:
Quick and powerful development environments using Docker and Docker Compose
113 lines (88 loc) • 3.7 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var R = _interopRequireWildcard(require("ramda"));
var _https = _interopRequireDefault(require("https"));
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
var _getToken = _interopRequireDefault(require("./get-token"));
var _ociApiSpecification = require("../../domain/oci-api-specification");
var _getCredentials = _interopRequireDefault(require("./get-credentials"));
var _helpers = require("./helpers");
var _parsers = _interopRequireDefault(require("www-authenticate/lib/parsers"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
const handleUnauthorizedResponse = async ({
response,
context,
url
}) => {
const challenges = response.headers.get('WWW-Authenticate');
const {
scheme,
parms
} = new _parsers.default.WWW_Authenticate(challenges);
if (scheme === 'Basic') {
throw new Error('Invalid authentication');
}
if (scheme !== 'Bearer') {
throw new Error('Invalid authentication');
}
try {
const token = await (0, _getToken.default)(parms, context);
const options = R.mergeDeepRight(context, {
headers: {
'Authorization': `Bearer ${token}`
}
});
const response = await (0, _nodeFetch.default)(url, options);
if (response.status === 401) {
throw new Error('Access denied');
}
return response;
} catch (exception) {
throw exception;
}
};
const get = async ({
allowUnauthorizedRequest = false,
endpoint,
registry,
options = {}
}) => {
const url = _ociApiSpecification.restSpecification.operation(registry, endpoint);
const credentials = await (0, _getCredentials.default)(registry);
const context = R.mergeDeepLeft(options, {
headers: R.reject(R.isNil, {
'Authorization': (0, _helpers.basicAuthentication)(credentials)
}),
agent: new _https.default.Agent({
rejectUnauthorized: !allowUnauthorizedRequest
})
});
try {
const response = await (0, _nodeFetch.default)(url, context);
switch (response.status) {
case 401:
return handleUnauthorizedResponse({
response,
context,
url
});
case 404:
throw new Error('Operation not found', {
status: 404,
body: await response.json()
});
default:
return response;
}
} catch (exception) {
throw exception;
}
};
var _default = get;
exports.default = _default;
module.exports = exports.default;