navy
Version:
Quick and powerful development environments using Docker and Docker Compose
79 lines (78 loc) • 3.02 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 _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const handleUnauthorizedResponse = async ({
response: initialResponse,
context,
url
}) => {
const challenges = initialResponse.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');
}
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;
};
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
})
});
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;
}
};
var _default = exports.default = get;
module.exports = exports.default;