diff --git a/lib/index-web.js b/lib/index-web.js index 255c7fa06..4a3a101af 100644 --- a/lib/index-web.js +++ b/lib/index-web.js @@ -45,8 +45,7 @@ module.exports = function(config, auth, storage) { template = Handlebars.compile(fs.readFileSync(require.resolve('./GUI/index.hbs'), 'utf8')); } app.get('/', function(req, res, next) { - let proto = req.get('X-Forwarded-Proto') || req.protocol; - let base = Utils.combineBaseUrl(proto, req.get('host'), config.url_prefix); + let base = Utils.combineBaseUrl(Utils.getWebProtocol(req), req.get('host'), config.url_prefix); res.setHeader('Content-Type', 'text/html'); storage.get_local(function(err, packages) { @@ -111,17 +110,13 @@ module.exports = function(config, auth, storage) { res.cookies.set('token', auth.aes_encrypt(str).toString('base64')); } - let base = config.url_prefix - ? config.url_prefix.replace(/\/$/, '') - : req.protocol + '://' + req.get('host'); + let base = Utils.combineBaseUrl(Utils.getWebProtocol(req), req.get('host'), config.url_prefix); res.redirect(base); }); }); app.post('/-/logout', function(req, res, next) { - let base = config.url_prefix - ? config.url_prefix.replace(/\/$/, '') - : req.protocol + '://' + req.get('host'); + let base = Utils.combineBaseUrl(Utils.getWebProtocol(req), req.get('host'), config.url_prefix); res.cookies.set('token', ''); res.redirect(base); }); diff --git a/lib/utils.js b/lib/utils.js index 8565f7c67..4c80a4b58 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -120,7 +120,7 @@ function filter_tarball_urls(pkg, req, config) { return _url; } const filename = URL.parse(_url).pathname.replace(/^.*\//, ''); - const base = combineBaseUrl(req.protocol, req.headers.host, config.url_prefix); + const base = combineBaseUrl(getWebProtocol(req), req.headers.host, config.url_prefix); return `${base}/${pkg.name.replace(/\//g, '%2f')}/-/${filename}`; }; @@ -314,6 +314,15 @@ function parseInterval(interval) { return result; } +/** + * Detect running protocol (http or https) + * @param {*} req + * @return {String} + */ +function getWebProtocol(req) { + return req.get('X-Forwarded-Proto') || req.protocol; +} + module.exports.parseInterval = parseInterval; module.exports.semver_sort = semverSort; module.exports.parse_address = parse_address; @@ -326,3 +335,4 @@ module.exports.validate_metadata = validate_metadata; module.exports.is_object = isObject; module.exports.validate_name = validate_name; module.exports.validate_package = validate_package; +module.exports.getWebProtocol = getWebProtocol;