verdaccio
Version:
A lightweight private npm proxy registry
56 lines (55 loc) • 7.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.serveFavicon = serveFavicon;
var _debug = _interopRequireDefault(require("debug"));
var _fs = _interopRequireDefault(require("fs"));
var _lodash = _interopRequireDefault(require("lodash"));
var _path = _interopRequireDefault(require("path"));
var _url = require("@verdaccio/url");
var _constants = require("../lib/constants");
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
const debug = (0, _debug.default)('verdaccio:middleware:favicon');
function serveFavicon(config) {
return function (_req, res) {
try {
const logoConf = config?.web?.favicon;
if (logoConf === '') {
debug('favicon disabled');
res.status(404);
} else if (!_lodash.default.isEmpty(logoConf)) {
debug('custom favicon');
if ((0, _url.isURL)(logoConf, {
require_host: true,
require_valid_protocol: true
})) {
debug('redirect to %o', logoConf);
res.redirect(logoConf);
return;
} else {
const faviconPath = _path.default.normalize(logoConf);
debug('serving favicon from %o', faviconPath);
_fs.default.access(faviconPath, _fs.default.constants.R_OK, err => {
if (err) {
debug('no read permissions to read: %o, reason:', logoConf, err?.message);
return res.status(_constants.HTTP_STATUS.NOT_FOUND).end();
} else {
res.setHeader('content-type', 'image/x-icon');
_fs.default.createReadStream(faviconPath).pipe(res);
debug('rendered custom ico');
}
});
}
} else {
res.setHeader('content-type', 'image/x-icon');
_fs.default.createReadStream(_path.default.posix.join(__dirname, './web/html/favicon.ico')).pipe(res);
debug('rendered ico');
}
} catch (err) {
debug('error triggered, favicon not found %s', err?.message);
res.status(_constants.HTTP_STATUS.NOT_FOUND).end();
}
};
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9mcyIsIl9sb2Rhc2giLCJfcGF0aCIsIl91cmwiLCJfY29uc3RhbnRzIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJidWlsZERlYnVnIiwic2VydmVGYXZpY29uIiwiY29uZmlnIiwiX3JlcSIsInJlcyIsImxvZ29Db25mIiwid2ViIiwiZmF2aWNvbiIsInN0YXR1cyIsIl8iLCJpc0VtcHR5IiwiaXNVUkwiLCJyZXF1aXJlX2hvc3QiLCJyZXF1aXJlX3ZhbGlkX3Byb3RvY29sIiwicmVkaXJlY3QiLCJmYXZpY29uUGF0aCIsInBhdGgiLCJub3JtYWxpemUiLCJmcyIsImFjY2VzcyIsImNvbnN0YW50cyIsIlJfT0siLCJlcnIiLCJtZXNzYWdlIiwiSFRUUF9TVEFUVVMiLCJOT1RfRk9VTkQiLCJlbmQiLCJzZXRIZWFkZXIiLCJjcmVhdGVSZWFkU3RyZWFtIiwicGlwZSIsInBvc2l4Iiwiam9pbiIsIl9fZGlybmFtZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcGkvbWlkZGxld2FyZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IENvbmZpZyB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuaW1wb3J0IHsgaXNVUkwgfSBmcm9tICdAdmVyZGFjY2lvL3VybCc7XG5cbmltcG9ydCB7IEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgdHlwZSB7ICRSZXF1ZXN0RXh0ZW5kLCAkUmVzcG9uc2VFeHRlbmQgfSBmcm9tICcuLi90eXBlcyc7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvOm1pZGRsZXdhcmU6ZmF2aWNvbicpO1xuXG5leHBvcnQgZnVuY3Rpb24gc2VydmVGYXZpY29uKGNvbmZpZzogQ29uZmlnKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoX3JlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGxvZ29Db25mOiBzdHJpbmcgPSBjb25maWc/LndlYj8uZmF2aWNvbiBhcyBzdHJpbmc7XG4gICAgICBpZiAobG9nb0NvbmYgPT09ICcnKSB7XG4gICAgICAgIGRlYnVnKCdmYXZpY29uIGRpc2FibGVkJyk7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KTtcbiAgICAgIH0gZWxzZSBpZiAoIV8uaXNFbXB0eShsb2dvQ29uZikpIHtcbiAgICAgICAgZGVidWcoJ2N1c3RvbSBmYXZpY29uJyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpc1VSTChsb2dvQ29uZiwge1xuICAgICAgICAgICAgcmVxdWlyZV9ob3N0OiB0cnVlLFxuICAgICAgICAgICAgcmVxdWlyZV92YWxpZF9wcm90b2NvbDogdHJ1ZSxcbiAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICBkZWJ1ZygncmVkaXJlY3QgdG8gJW8nLCBsb2dvQ29uZik7XG4gICAgICAgICAgcmVzLnJlZGlyZWN0KGxvZ29Db25mKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgZmF2aWNvblBhdGggPSBwYXRoLm5vcm1hbGl6ZShsb2dvQ29uZik7XG4gICAgICAgICAgZGVidWcoJ3NlcnZpbmcgZmF2aWNvbiBmcm9tICVvJywgZmF2aWNvblBhdGgpO1xuICAgICAgICAgIGZzLmFjY2VzcyhmYXZpY29uUGF0aCwgZnMuY29uc3RhbnRzLlJfT0ssIChlcnIpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgZGVidWcoJ25vIHJlYWQgcGVybWlzc2lvbnMgdG8gcmVhZDogJW8sIHJlYXNvbjonLCBsb2dvQ29uZiwgZXJyPy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKS5lbmQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlcy5zZXRIZWFkZXIoJ2NvbnRlbnQtdHlwZScsICdpbWFnZS94LWljb24nKTtcbiAgICAgICAgICAgICAgZnMuY3JlYXRlUmVhZFN0cmVhbShmYXZpY29uUGF0aCkucGlwZShyZXMpO1xuICAgICAgICAgICAgICBkZWJ1ZygncmVuZGVyZWQgY3VzdG9tIGljbycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc2V0SGVhZGVyKCdjb250ZW50LXR5cGUnLCAnaW1hZ2UveC1pY29uJyk7XG4gICAgICAgIGZzLmNyZWF0ZVJlYWRTdHJlYW0ocGF0aC5wb3NpeC5qb2luKF9fZGlybmFtZSwgJy4vd2ViL2h0bWwvZmF2aWNvbi5pY28nKSkucGlwZShyZXMpO1xuICAgICAgICBkZWJ1ZygncmVuZGVyZWQgaWNvJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHtcbiAgICAgIGRlYnVnKCdlcnJvciB0cmlnZ2VyZWQsIGZhdmljb24gbm90IGZvdW5kICVzJywgZXJyPy5tZXNzYWdlKTtcbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuTk9UX0ZPVU5EKS5lbmQoKTtcbiAgICB9XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLEdBQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFHLEtBQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFJLElBQUEsR0FBQUosT0FBQTtB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