Skip to content
This repository has been archived by the owner on Apr 5, 2024. It is now read-only.

Commit

Permalink
Parse URLs using stdlib
Browse files Browse the repository at this point in the history
  • Loading branch information
lotas committed May 2, 2022
1 parent aa5e09e commit 62c61d9
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 13 deletions.
18 changes: 8 additions & 10 deletions lib/utils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

const Boom = require('@hapi/boom');
const Url = require('url');


const internals = {};
Expand All @@ -17,12 +18,6 @@ exports.limits = {
};


// Extract host and port from request

// $1 $2
internals.hostHeaderRegex = /^(?:(?:\r\n)?\s)*((?:[^:]+)|(?:\[[^\]]+\]))(?::(\d+))?(?:(?:\r\n)?\s)*$/; // (IPv4, hostname)|(IPv6)


exports.parseHost = function (req, hostHeaderName) {

hostHeaderName = (hostHeaderName ? hostHeaderName.toLowerCase() : 'host');
Expand All @@ -35,14 +30,17 @@ exports.parseHost = function (req, hostHeaderName) {
return null;
}

const hostParts = hostHeader.match(internals.hostHeaderRegex);
if (!hostParts) {
let uri;
try {
uri = new Url.URL('http://' + hostHeader);
}
catch (err) {
return null;
}

return {
name: hostParts[1],
port: (hostParts[2] ? hostParts[2] : (req.connection && req.connection.encrypted ? 443 : 80))
name: uri.hostname,
port: (uri.port ? uri.port : (req.connection && req.connection.encrypted ? 443 : 80))
};
};

Expand Down
6 changes: 3 additions & 3 deletions test/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ describe('Utils', () => {
method: 'POST',
url: '/resource/4?filter=a',
headers: {
host: '[123:123:123]',
host: '[123:123::123]',
'content-type': 'text/plain;x=y'
},
connection: {
Expand All @@ -72,7 +72,7 @@ describe('Utils', () => {
method: 'POST',
url: '/resource/4?filter=a',
headers: {
host: '[123:123:123]:8000',
host: '[123:123::123]:8000',
'content-type': 'text/plain;x=y'
},
connection: {
Expand All @@ -82,7 +82,7 @@ describe('Utils', () => {

const host = Hawk.utils.parseHost(req, 'Host');
expect(host.port).to.equal('8000');
expect(host.name).to.equal('[123:123:123]');
expect(host.name).to.equal('[123:123::123]');
});

it('errors on header too long', () => {
Expand Down

0 comments on commit 62c61d9

Please sign in to comment.