verdaccio
Version:
A lightweight private npm proxy registry
144 lines (114 loc) • 4.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _utils = require("../../../lib/utils");
var _middleware = require("../../middleware");
var _constants = require("../../../lib/constants");
var _user = require("../../../utils/user");
var _logger = _interopRequireDefault(require("../../../lib/logger"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
const getOrder = (order = 'asc') => {
return order === 'asc';
};
function addPackageWebApi(route, storage, auth, config) {
const can = (0, _middleware.allow)(auth);
const checkAllow = (name, remoteUser) => new Promise((resolve, reject) => {
try {
auth.allow_access({
packageName: name
}, remoteUser, (err, allowed) => {
if (err) {
resolve(false);
} else {
resolve(allowed);
}
});
} catch (err) {
reject(err);
}
}); // Get list of all visible package
route.get('/packages', function (req, res, next) {
storage.getLocalDatabase(async function (err, packages) {
if (err) {
throw err;
}
async function processPermissionsPackages(packages = []) {
const permissions = [];
const packgesCopy = packages.slice();
for (const pkg of packgesCopy) {
const pkgCopy = _objectSpread({}, pkg);
pkgCopy.author = (0, _utils.formatAuthor)(pkg.author);
try {
if (await checkAllow(pkg.name, req.remote_user)) {
if (config.web) {
pkgCopy.author.avatar = (0, _user.generateGravatarUrl)(pkgCopy.author.email, config.web.gravatar);
}
permissions.push(pkgCopy);
}
} catch (err) {
_logger.default.logger.error({
name: pkg.name,
error: err
}, 'permission process for @{name} has failed: @{error}');
throw err;
}
}
return permissions;
}
const {
web
} = config; // $FlowFixMe
const order = config.web ? getOrder(web.sort_packages) : true;
next((0, _utils.sortByName)((await processPermissionsPackages(packages)), order));
});
}); // Get package readme
route.get('/package/readme/(@:scope/)?:package/:version?', can('access'), function (req, res, next) {
const packageName = req.params.scope ? (0, _utils.addScope)(req.params.scope, req.params.package) : req.params.package;
storage.getPackage({
name: packageName,
uplinksLook: true,
req,
callback: function (err, info) {
if (err) {
return next(err);
}
res.set(_constants.HEADER_TYPE.CONTENT_TYPE, _constants.HEADERS.TEXT_PLAIN);
next((0, _utils.parseReadme)(info.name, info.readme));
}
});
});
route.get('/sidebar/(@:scope/)?:package', function (req, res, next) {
const packageName = req.params.scope ? (0, _utils.addScope)(req.params.scope, req.params.package) : req.params.package;
storage.getPackage({
name: packageName,
uplinksLook: true,
keepUpLinkData: true,
req,
callback: function (err, info) {
if (_lodash.default.isNil(err)) {
let sideBarInfo = _lodash.default.clone(info);
sideBarInfo.versions = (0, _utils.convertDistRemoteToLocalTarballUrls)(info, req, config.url_prefix).versions;
sideBarInfo.latest = sideBarInfo.versions[info[_constants.DIST_TAGS].latest];
sideBarInfo.latest.author = (0, _utils.formatAuthor)(sideBarInfo.latest.author);
sideBarInfo = (0, _utils.deleteProperties)(['readme', '_attachments', '_rev', 'name'], sideBarInfo);
if (config.web) {
sideBarInfo = (0, _utils.addGravatarSupport)(sideBarInfo, config.web.gravatar);
} else {
sideBarInfo = (0, _utils.addGravatarSupport)(sideBarInfo);
}
next(sideBarInfo);
} else {
res.status(_constants.HTTP_STATUS.NOT_FOUND);
res.end();
}
}
});
});
}
var _default = addPackageWebApi;
exports.default = _default;