diff --git a/modules/actions/serveFile.js b/modules/actions/serveFile.js index 1c7569d..b509d42 100644 --- a/modules/actions/serveFile.js +++ b/modules/actions/serveFile.js @@ -1,13 +1,13 @@ import serveAutoIndexPage from './serveAutoIndexPage'; -import serveHTMLModule from './serveHTMLModule'; -import serveJavaScriptModule from './serveJavaScriptModule'; import serveMetadata from './serveMetadata'; +import serveModule from './serveModule'; import serveStaticFile from './serveStaticFile'; /** * Send the file, JSON metadata, or HTML directory listing. */ export default function serveFile(req, res) { + // Deprecated. if (req.query.meta != null) { return serveMetadata(req, res); } @@ -16,19 +16,9 @@ export default function serveFile(req, res) { return serveAutoIndexPage(req, res); } + // Deprecated. if (req.query.module != null) { - if (req.entry.contentType === 'application/javascript') { - return serveJavaScriptModule(req, res); - } - - if (req.entry.contentType === 'text/html') { - return serveHTMLModule(req, res); - } - - return res - .status(403) - .type('text') - .send('?module mode is available only for JavaScript and HTML files'); + return serveModule(req, res); } serveStaticFile(req, res); diff --git a/modules/actions/serveModule.js b/modules/actions/serveModule.js new file mode 100644 index 0000000..fb408a7 --- /dev/null +++ b/modules/actions/serveModule.js @@ -0,0 +1,17 @@ +import serveHTMLModule from './serveHTMLModule'; +import serveJavaScriptModule from './serveJavaScriptModule'; + +export default function serveModule(req, res) { + if (req.entry.contentType === 'application/javascript') { + return serveJavaScriptModule(req, res); + } + + if (req.entry.contentType === 'text/html') { + return serveHTMLModule(req, res); + } + + res + .status(403) + .type('text') + .send('module mode is available only for JavaScript and HTML files'); +} diff --git a/modules/middleware/redirectLegacyURLs.js b/modules/middleware/redirectLegacyURLs.js index 7a2fb12..03f46f9 100644 --- a/modules/middleware/redirectLegacyURLs.js +++ b/modules/middleware/redirectLegacyURLs.js @@ -1,20 +1,15 @@ -import createSearch from '../utils/createSearch'; - /** * Redirect old URLs that we no longer support. */ export default function redirectLegacyURLs(req, res, next) { - // Permanently redirect /_meta/path to /path?meta. + // Permanently redirect /_meta/path to /_metadata/path if (req.path.match(/^\/_meta\//)) { - req.query.meta = ''; - return res.redirect(301, req.path.substr(6) + createSearch(req.query)); + return res.redirect(301, '/_metadata' + req.path.substr(6)); } // Permanently redirect /path?json => /path?meta if (req.query.json != null) { - delete req.query.json; - req.query.meta = ''; - return res.redirect(301, req.path + createSearch(req.query)); + return res.redirect(301, '/_metadata' + req.path); } next(); diff --git a/modules/middleware/validateQuery.js b/modules/middleware/validateQuery.js index 4d2d185..1616cad 100644 --- a/modules/middleware/validateQuery.js +++ b/modules/middleware/validateQuery.js @@ -2,8 +2,8 @@ import createSearch from '../utils/createSearch'; const knownQueryParams = { main: true, // Deprecated, see #63 - meta: true, - module: true + meta: true, // Deprecated + module: true // Deprecated }; function isKnownQueryParam(param) { diff --git a/modules/server.js b/modules/server.js index 7fceed0..0b47df4 100644 --- a/modules/server.js +++ b/modules/server.js @@ -3,6 +3,8 @@ import express from 'express'; // import serveAuth from './actions/serveAuth'; import serveFile from './actions/serveFile'; import serveMainPage from './actions/serveMainPage'; +import serveMetadata from './actions/serveMetadata'; +import serveModule from './actions/serveModule'; import servePublicKey from './actions/servePublicKey'; import serveStats from './actions/serveStats'; @@ -49,6 +51,36 @@ app.use( }) ); +app.use( + '/_metadata', + createRouter(app => { + app.get( + '*', + validatePackageURL, + validatePackageName, + validateQuery, + fetchPackage, + findFile, + serveMetadata + ); + }) +); + +app.use( + '/_module', + createRouter(app => { + app.get( + '*', + validatePackageURL, + validatePackageName, + validateQuery, + fetchPackage, + findFile, + serveModule + ); + }) +); + app.get( '*', validatePackageURL,