Skip to content

Commit

Permalink
Fix /browse query redirects
Browse files Browse the repository at this point in the history
  • Loading branch information
mjackson committed Aug 8, 2019
1 parent 8aa6197 commit a718d90
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 2 deletions.
12 changes: 12 additions & 0 deletions modules/__tests__/browseDirectory-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,16 @@ describe('A request to browse a directory', () => {
});
});
});

describe('with invalid query params', () => {
it('strips them from the query string', done => {
request(server)
.get('/browse/[email protected]/umd/?invalid')
.end((err, res) => {
expect(res.statusCode).toBe(302);
expect(res.headers.location).toEqual('/browse/[email protected]/umd/');
done();
});
});
});
});
14 changes: 14 additions & 0 deletions modules/__tests__/browseFile-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,18 @@ describe('A request to browse a file', () => {
});
});
});

describe('when the URL contains invalid query params', () => {
it('strips them from the URL', done => {
request(server)
.get('/browse/[email protected]/react.production.min.js?invalid')
.end((err, res) => {
expect(res.statusCode).toBe(302);
expect(res.headers.location).toBe(
'/browse/[email protected]/react.production.min.js'
);
done();
});
});
});
});
5 changes: 3 additions & 2 deletions modules/createServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import serveModule from './actions/serveModule.js';
import serveStats from './actions/serveStats.js';

import findEntry from './middleware/findEntry.js';
import noQuery from './middleware/noQuery.js';
import redirectLegacyURLs from './middleware/redirectLegacyURLs.js';
import requestLog from './middleware/requestLog.js';
import staticFiles from './middleware/staticFiles.js';
Expand Down Expand Up @@ -60,18 +61,18 @@ export default function createServer() {

app.get(
'*/',
noQuery(),
validatePackageURL,
validatePackageName,
validateQuery,
validateVersion,
serveDirectoryBrowser
);

app.get(
'*',
noQuery(),
validatePackageURL,
validatePackageName,
validateQuery,
validateVersion,
serveFileBrowser
);
Expand Down
14 changes: 14 additions & 0 deletions modules/middleware/noQuery.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/**
* Strips all query params from the URL to increase cache hit rates.
*/
export default function noQuery() {
return (req, res, next) => {
const keys = Object.keys(req.query);

if (keys.length) {
return res.redirect(302, req.baseUrl + req.path);
}

next();
};
}

0 comments on commit a718d90

Please sign in to comment.