From 066729f17c5c8c1628bc358aae4e8f2050d9786b Mon Sep 17 00:00:00 2001 From: MICHAEL JACKSON Date: Sat, 19 Aug 2017 11:44:01 -0700 Subject: [PATCH] Re-organize package URL parsing --- server/IngestLogsWorker.js | 4 ++-- server/createApp.js | 4 ++-- server/middleware/fetchFile.js | 6 +++--- .../{parsePackageURL.js => packageURL.js} | 8 ++++---- server/utils/createPackageURL.js | 16 +++++++++++++++ .../parsePackageURL.js} | 20 +------------------ .../parsePackageURL.test.js} | 2 +- 7 files changed, 29 insertions(+), 31 deletions(-) rename server/middleware/{parsePackageURL.js => packageURL.js} (92%) create mode 100644 server/utils/createPackageURL.js rename server/{PackageURL.js => utils/parsePackageURL.js} (73%) rename server/{PackageURL.test.js => utils/parsePackageURL.test.js} (97%) diff --git a/server/IngestLogsWorker.js b/server/IngestLogsWorker.js index c4aa37e..dd7b58d 100644 --- a/server/IngestLogsWorker.js +++ b/server/IngestLogsWorker.js @@ -2,7 +2,7 @@ const parseURL = require('url').parse const startOfDay = require('date-fns/start_of_day') const addDays = require('date-fns/add_days') const validateNPMPackageName = require('validate-npm-package-name') -const PackageURL = require('./PackageURL') +const parsePackageURL = require('./utils/parsePackageURL') const cf = require('./CloudflareAPI') const db = require('./RedisClient') const { @@ -66,7 +66,7 @@ function computeCounters(stream) { if (edgeResponse.status === 200) { // Q: How many requests do we serve for a package per day? // Q: How many bytes do we serve for a package per day? - const url = PackageURL.parse(parseURL(clientRequest.uri).pathname) + const url = parsePackageURL(parseURL(clientRequest.uri).pathname) const packageName = url && url.packageName if (packageName && validateNPMPackageName(packageName).errors == null) { diff --git a/server/createApp.js b/server/createApp.js index d010318..340aca6 100644 --- a/server/createApp.js +++ b/server/createApp.js @@ -7,7 +7,7 @@ const morgan = require('morgan') const { fetchStats } = require('./cloudflare') const checkBlacklist = require('./middleware/checkBlacklist') -const parsePackageURL = require('./middleware/parsePackageURL') +const packageURL = require('./middleware/packageURL') const fetchFile = require('./middleware/fetchFile') const serveFile = require('./middleware/serveFile') @@ -75,7 +75,7 @@ function createApp() { })) app.use('/', - parsePackageURL, + packageURL, checkBlacklist(PackageBlacklist), fetchFile, serveFile diff --git a/server/middleware/fetchFile.js b/server/middleware/fetchFile.js index 6f35eac..8bb49fd 100644 --- a/server/middleware/fetchFile.js +++ b/server/middleware/fetchFile.js @@ -1,9 +1,9 @@ const fs = require('fs') const path = require('path') const semver = require('semver') +const createPackageURL = require('../utils/createPackageURL') const getPackage = require('./utils/getPackage') const getPackageInfo = require('./utils/getPackageInfo') -const PackageURL = require('../PackageURL') const FindExtensions = [ '', '.js', '.json' ] @@ -137,7 +137,7 @@ function fetchFile(req, res, next) { res.set({ 'Cache-Control': 'public, max-age=60', 'Cache-Tag': 'redirect' - }).redirect(PackageURL.create(req.packageName, tags[req.packageVersion], req.filename, req.search)) + }).redirect(createPackageURL(req.packageName, tags[req.packageVersion], req.filename, req.search)) } else { const maxVersion = semver.maxSatisfying(Object.keys(versions), req.packageVersion) @@ -146,7 +146,7 @@ function fetchFile(req, res, next) { res.set({ 'Cache-Control': 'public, max-age=60', 'Cache-Tag': 'redirect' - }).redirect(PackageURL.create(req.packageName, maxVersion, req.filename, req.search)) + }).redirect(createPackageURL(req.packageName, maxVersion, req.filename, req.search)) } else { res.status(404).type('text').send(`Cannot find package ${req.packageSpec}`) } diff --git a/server/middleware/parsePackageURL.js b/server/middleware/packageURL.js similarity index 92% rename from server/middleware/parsePackageURL.js rename to server/middleware/packageURL.js index 8327c29..912afdb 100644 --- a/server/middleware/parsePackageURL.js +++ b/server/middleware/packageURL.js @@ -1,5 +1,5 @@ const validateNPMPackageName = require('validate-npm-package-name') -const PackageURL = require('../PackageURL') +const parsePackageURL = require('../utils/parsePackageURL') const KnownQueryParams = { expand: true, @@ -45,7 +45,7 @@ function createSearch(query) { /** * Parse and validate the URL. */ -function parsePackageURL(req, res, next) { +function packageURL(req, res, next) { // Redirect /_meta/pkg to /pkg?meta. if (req.path.match(/^\/_meta\//)) { delete req.query.json @@ -53,7 +53,7 @@ function parsePackageURL(req, res, next) { return res.redirect(req.path.substr(6) + createSearch(req.query)) } - const url = PackageURL.parse(req.url) + const url = parsePackageURL(req.url) // Do not allow invalid URLs. if (url == null) @@ -82,4 +82,4 @@ function parsePackageURL(req, res, next) { next() } -module.exports = parsePackageURL +module.exports = packageURL diff --git a/server/utils/createPackageURL.js b/server/utils/createPackageURL.js new file mode 100644 index 0000000..8456579 --- /dev/null +++ b/server/utils/createPackageURL.js @@ -0,0 +1,16 @@ +function createPackageURL(packageName, version, filename, search) { + let pathname = `/${packageName}` + + if (version != null) + pathname += `@${version}` + + if (filename) + pathname += filename + + if (search) + pathname += search + + return pathname +} + +module.exports = createPackageURL diff --git a/server/PackageURL.js b/server/utils/parsePackageURL.js similarity index 73% rename from server/PackageURL.js rename to server/utils/parsePackageURL.js index 417dc63..34324ea 100644 --- a/server/PackageURL.js +++ b/server/utils/parsePackageURL.js @@ -36,22 +36,4 @@ function parsePackageURL(packageURL) { } } -function createPackageURL(packageName, version, filename, search) { - let pathname = `/${packageName}` - - if (version != null) - pathname += `@${version}` - - if (filename) - pathname += filename - - if (search) - pathname += search - - return pathname -} - -module.exports = { - parse: parsePackageURL, - create: createPackageURL -} +module.exports = parsePackageURL diff --git a/server/PackageURL.test.js b/server/utils/parsePackageURL.test.js similarity index 97% rename from server/PackageURL.test.js rename to server/utils/parsePackageURL.test.js index 75becf4..7999f66 100644 --- a/server/PackageURL.test.js +++ b/server/utils/parsePackageURL.test.js @@ -1,4 +1,4 @@ -const parsePackageURL = require('./PackageURL').parse +const parsePackageURL = require('./parsePackageURL') describe('parsePackageURL', () => { it('parses plain packages', () => {