UNPKG

verdaccio

Version:

A lightweight private npm proxy registry

144 lines (114 loc) 4.94 kB
"use strict"; 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;