Skip to content

Commit dce6e7d

Browse files
committed
udpate middleware to read redirects from top-level redirects.json in archival repo
1 parent 4c052c2 commit dce6e7d

2 files changed

Lines changed: 25 additions & 9 deletions

File tree

lib/enterprise-server-releases.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ const nextDeprecationDate = dates[oldestSupported].deprecationDate
4747
const isOldestReleaseDeprecated = new Date() > new Date(nextDeprecationDate)
4848
const deprecatedOnNewSite = deprecated.filter(version => versionSatisfiesRange(version, '>=2.13'))
4949
const firstVersionDeprecatedOnNewSite = '2.13'
50-
// starting from 2.18, we updated the archival script to create stubbed HTML redirect files
51-
const lastVersionWithoutStubbedRedirectFiles = '2.17'
50+
// starting from 2.18, we updated the archival script to create a redirects.json top-level file in the archived repo
51+
const lastVersionWithoutArchivedRedirectsFile = '2.17'
5252
// last version using paths like /enterprise/<release>/<user>/<product>/<category>/<article>
5353
// instead of /enterprise-server@<release>/<product>/<category>/<article>
5454
const lastReleaseWithLegacyFormat = '2.18'
@@ -68,7 +68,7 @@ module.exports = {
6868
deprecatedOnNewSite,
6969
dates,
7070
firstVersionDeprecatedOnNewSite,
71-
lastVersionWithoutStubbedRedirectFiles,
71+
lastVersionWithoutArchivedRedirectsFile,
7272
lastReleaseWithLegacyFormat,
7373
deprecatedReleasesWithLegacyFormat,
7474
deprecatedReleasesWithNewFormat,

middleware/archived-enterprise-versions.js

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
const path = require('path')
22
const slash = require('slash')
3-
const { firstVersionDeprecatedOnNewSite, lastVersionWithoutStubbedRedirectFiles } = require('../lib/enterprise-server-releases')
3+
const { firstVersionDeprecatedOnNewSite, lastVersionWithoutArchivedRedirectsFile } = require('../lib/enterprise-server-releases')
44
const patterns = require('../lib/patterns')
55
const versionSatisfiesRange = require('../lib/version-satisfies-range')
66
const isArchivedVersion = require('../lib/is-archived-version')
@@ -25,21 +25,37 @@ module.exports = async (req, res, next) => {
2525
}
2626

2727
// find redirects for versions between 2.13 and 2.17
28-
// starting with 2.18, we updated the archival script to create stubbed HTML redirect files
28+
// starting with 2.18, we updated the archival script to create a redirects.json file
2929
if (versionSatisfiesRange(requestedVersion, `>=${firstVersionDeprecatedOnNewSite}`) &&
30-
versionSatisfiesRange(requestedVersion, `<=${lastVersionWithoutStubbedRedirectFiles}`)) {
30+
versionSatisfiesRange(requestedVersion, `<=${lastVersionWithoutArchivedRedirectsFile}`)) {
3131
const redirect = archvivedRedirects[req.path]
3232
if (redirect && redirect !== req.path) {
3333
return res.redirect(301, redirect)
3434
}
3535
}
3636

37+
let reqPath = req.path
38+
let isRedirect = false
39+
if (versionSatisfiesRange(requestedVersion, `>${lastVersionWithoutArchivedRedirectsFile}`)) {
40+
const redirectJson = await got(getProxyPath('redirects.json', requestedVersion))
41+
if (redirectJson[req.path]) {
42+
isRedirect = true
43+
}
44+
reqPath = redirectJson[req.path] || req.path
45+
}
46+
3747
try {
38-
const r = await got(getProxyPath(req.path, requestedVersion))
48+
const r = await got(getProxyPath(reqPath, requestedVersion))
3949
res.set('content-type', r.headers['content-type'])
4050
res.set('x-robots-tag', 'noindex')
4151

42-
// make the stubbed redirect files added in >=2.18 return 301 instead of 200
52+
// make redirects found via redirects.json return 301 instead of 200
53+
if (isRedirect) {
54+
res.status(301)
55+
res.set('location', reqPath)
56+
}
57+
58+
// make stubbed redirect files (which exist in versions <2.13) return 301 instead of 200
4359
const staticRedirect = r.body.match(patterns.staticRedirect)
4460
if (staticRedirect) {
4561
res.status(301)
@@ -73,7 +89,7 @@ function getProxyPath (reqPath, requestedVersion) {
7389
// this workaround finds potentially relevant frontmatter redirects in currently supported pages
7490
function getFallbackRedirects (req, requestedVersion) {
7591
if (versionSatisfiesRange(requestedVersion, `<${firstVersionDeprecatedOnNewSite}`)) return
76-
if (versionSatisfiesRange(requestedVersion, `>${lastVersionWithoutStubbedRedirectFiles}`)) return
92+
if (versionSatisfiesRange(requestedVersion, `>${lastVersionWithoutArchivedRedirectsFile}`)) return
7793

7894
return archivedFrontmatterFallbacks.find(arrayOfFallbacks => arrayOfFallbacks.includes(req.path))
7995
}

0 commit comments

Comments
 (0)