Skip to content

Instantly share code, notes, and snippets.

@rvagg
Last active September 1, 2015 02:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rvagg/c9ef9dfc9dbe23ac0f7e to your computer and use it in GitHub Desktop.
Save rvagg/c9ef9dfc9dbe23ac0f7e to your computer and use it in GitHub Desktop.
blog.nodejs.org -> nodejs.org/en/blog reidrects
const hyperquest = require('hyperquest')
, map = require('map-async')
, bl = require('bl')
, once = require('once')
, fs = require('fs')
, path = require('path')
, url = require('url')
, urls = unique(fs.readFileSync(process.argv[2], 'utf8').split('\n').filter(Boolean))
, newslugs = unique(fs.readFileSync(process.argv[3], 'utf8').split('\n').filter(Boolean))
, manualMappings = {
'node-leaders-are-building-an-open-foundation': 'node-leaders-building-open-neutral-foundation'
, 'the-nodejs-foundation-benefits-all': 'foundation-benefits-all'
, 'cve-2013-4450-http-server-pipeline-flood-dos': 'http-server-pipeline-flood-dos'
, 'porting-node-to-windows-with-microsoft%e2%80%99s-help': 'porting-node-to-windows-with-microsofts-help'
, 'openssl-and-breaking-utf-8-change': 'openssl-and-utf8'
, 'npm-post-mortem': '2013-outage-postmortem'
}
checkOldNew()
// or:
//mapOldNew()
function mapOldNew () {
var newurls = urls.map(function (u) {
var m = u.match(/\/\d+\/\d+\/\d+\/(?:node-v(?:ersion-)?|version-)(\d+)[-\.](\d+)[-\.](\d+)/)
basename = m ? `v${m[1]}.${m[2]}.${m[3]}` : path.basename(u)
basename = manualMappings[basename] || basename
var f = newslugs.filter(function (s) {
return path.basename(s) == basename
})
if (f.length > 1)
console.log(`Error: more than 1 newslug for ${basename}`)
return { old: u, 'new': f[0] }
})
var badurls = newurls.map(function (u) {
if (!u['new'])
return u.old
if (!/^release\//.test(u['new']))
console.log(`rewrite ^${u.old}\$ https://nodejs.org/en/blog/${u['new']}/ permanent;`)
return false
}).filter(Boolean)
console.log('Couldn\'t find mappings for:')
console.log(badurls.join('\n'))
}
function checkOldNew () {
map(urls, checkurl, afterMap)
}
function unique (a) {
return a.reduce(function (p, c) {
if (p.indexOf(c) == -1)
p.push(c)
return p
}, [])
}
function checkurl (url, callback) {
var newurl = `http://blog.nodejs.org${url}`
callback = once(callback)
hyperquest.get(newurl)
.on('response', function (r) {
checknew({ old: url, redirect: r.headers.location }, callback)
})
.pipe(bl(function (err, data) {
if (err)
return callback(err)
}))
}
function checknew (links, callback) {
//var newurl = url.parse(links.redirect)
//newurl.host = 'nodejs.org'
//links.testurl = newurl.format()
hyperquest.get(links.redirect)
.on('response', function (r) {
links.statusCode = r.statusCode
callback(null, links)
})
.pipe(bl(function (err, data) {
if (err)
return callback(err)
//console.log(data.toString())
}))
}
function afterMap (err, list) {
if (err)
throw err
list.filter(function (l) {
return l.statusCode != 200 || l.redirect == 'https://nodejs.org/en/blog/'
}).forEach(function (l) {
console.log(`(${l.statusCode}) ${l.old} -> ${l.redirect}`)
})
}
vulnerability/http-server-pipeline-flood-dos
vulnerability/v8-memory-corruption-stack-overflow
vulnerability/http-server-security-vulnerability-please-upgrade-to-0-6-17
vulnerability/openssl-and-utf8
nodejs-road-ahead
advisory-board/listening-to-the-community
advisory-board/advisory-board-update
feature/streams2
npm/2013-outage-postmortem
npm/managing-node-js-dependencies-with-shrinkwrap
npm/peer-dependencies
npm/npm-1-0-the-new-ls
npm/npm-1-0-released
npm/npm-1-0-link
npm/npm-1-0-global-vs-local-installation
weekly-updates/weekly-update.2015-04-17
weekly-updates/weekly-update.2015-06-05
weekly-updates/weekly-update.2015-06-26
weekly-updates/weekly-update.2015-07-31
weekly-updates/weekly-update.2015-05-29
weekly-updates/weekly-update.2015-02-13
weekly-updates/weekly-update.2015-05-22
weekly-updates/weekly-update.2015-02-20
weekly-updates/weekly-update.2015-03-13
weekly-updates/weekly-update.2015-07-03
weekly-updates/weekly-update.2015-08-07
weekly-updates/weekly-update.2015-08-14
weekly-updates/weekly-update.2015-04-24
weekly-updates/weekly-update.2015-06-19
weekly-updates/weekly-update.2015-03-20
weekly-updates/weekly-update.2015-03-27
weekly-updates/weekly-update.2015-02-06
weekly-updates/weekly-update.2015-07-10
weekly-updates/weekly-update.2015-07-24
weekly-updates/weekly-update.2015-02-27
weekly-updates/weekly-update.2015-05-08
weekly-updates/weekly-update.2015-07-17
weekly-updates/weekly-update.2015-05-15
weekly-updates/weekly-update.2015-05-01
weekly-updates/weekly-update.2015-04-03
weekly-updates/weekly-update.2015-04-10
weekly-updates/weekly-update.2015-03-06
weekly-updates/weekly-update.2015-06-12
community/next-chapter
community/building-nodejs-together
community/foundation-benefits-all
community/node-leaders-building-open-neutral-foundation
community/transitions
module/multi-server-continuous-deployment-with-fleet
module/service-logging-in-json-with-bunyan
uncategorized/office-hours
uncategorized/jobs-nodejs-org
uncategorized/the-videos-from-node-meetup
uncategorized/an-easy-way-to-build-scalable-network-programs
uncategorized/node-meetup-this-thursday
uncategorized/evolving-the-node-js-brand
uncategorized/version-0-6
uncategorized/trademark
uncategorized/notes-from-the-road
uncategorized/tj-fontaine-new-node-lead
uncategorized/libuv-status-report
uncategorized/growing-up
uncategorized/development-environment
uncategorized/ldapjs-a-reprise-of-ldap
uncategorized/some-new-node-projects
uncategorized/profiling-node-js
uncategorized/porting-node-to-windows-with-microsofts-help
uncategorized/node-office-hours-cut-short
uncategorized/bnoordhuis-departure
release/v0.8.19
release/v0.11.0
release/v0.11.14
release/v0.11.16
release/v0.8.2
release/v0.11.3
release/v0.10.28
release/v0.10.2
release/v0.6.18
release/v0.7.2
release/v0.10.26
release/v0.8.24
release/v0.10.15
release/v0.10.17
release/v0.8.12
release/v0.7.7
release/v0.8.14
release/v0.8.25
release/v0.5.9
release/v0.11.4
release/v0.10.24
release/v0.11.2
release/v0.6.0
release/v0.7.10
release/v0.9.11
release/v0.4.4
release/v0.10.29
release/v0.10.13
release/v0.9.5
release/v0.10.5
release/v0.4.3
release/v0.7.9
release/v0.12.7
release/v0.6.20
release/v0.5.5
release/v0.7.5
release/v0.8.5
release/v0.10.36
release/v0.10.38
release/v0.8.26
release/v0.11.1
release/v0.6.3
release/v0.11.9
release/v0.5.10
release/v0.10.33
release/v0.6.19
release/v0.6.6
release/v0.4.5
release/v0.10.8
release/v0.11.15
release/v0.12.3
release/v0.8.4
release/v0.6.14
release/v0.8.17
release/v0.8.7
release/v0.10.23
release/v0.10.9
release/v0.10.0
release/v0.4.9
release/v0.6.9
release/v0.10.18
release/v0.11.8
release/v0.11.10
release/v0.5.1
release/v0.10.6
release/v0.6.15
release/v0.10.4
release/v0.8.27
release/v0.6.7
release/v0.4.10
release/v0.10.32
release/v0.11.6
release/v0.5.8
release/v0.7.8
release/v0.10.7
release/v0.8.18
release/v0.8.28
release/v0.8.20
release/v0.7.3
release/v0.8.13
release/v0.4.11
release/v0.7.6
release/v0.10.27
release/v0.8.10
release/v0.8.3
release/v0.10.31
release/v0.9.6
release/v0.6.8
release/v0.6.4
release/v0.7.12
release/v0.6.11
release/v0.9.10
release/v0.4.12
release/v0.9.2
release/v0.5.6
release/v0.10.12
release/v0.12.6
release/v0.10.14
release/v0.11.11
release/v0.10.40
release/v0.11.5
release/v0.10.30
release/v0.10.21
release/v0.9.12
release/v0.12.0
release/v0.5.3
release/v0.5.0
release/v0.9.4
release/v0.10.34
release/v0.5.7
release/v0.6.21
release/v0.6.10
release/v0.7.1
release/v0.12.2
release/v0.6.12
release/v0.7.0
release/v0.5.4
release/v0.8.8
release/v0.10.39
release/v0.8.9
release/v0.8.11
release/v0.4.7
release/v0.10.3
release/v0.6.1
release/v0.8.15
release/v0.6.16
release/v0.5.2
release/v0.12.1
release/v0.8.23
release/v0.8.1
release/v0.10.35
release/v0.4.8
release/v0.8.21
release/v0.9.7
release/v0.6.2
release/v0.7.11
release/v0.8.0
release/v0.4.6
release/v0.10.11
release/v0.11.12
release/v0.12.5
release/v0.8.22
release/v0.6.13
release/v0.10.22
release/v0.10.20
release/v0.7.4
release/v0.12.4
release/v0.10.25
release/v0.6.5
release/v0.8.16
release/v0.10.37
release/v0.10.16
release/v0.9.3
release/v0.10.19
release/v0.10.1
release/v0.9.1
release/v0.11.7
release/v0.6.17
release/v0.8.6
release/v0.10.10
release/v0.9.8
release/v0.9.0
video/welcome-to-the-node-blog
video/bryan-cantrill-instrumenting-the-real-time-web
video/bert-belder-libuv-lxjs-2012
/2015/07/10/node-v0-12-7-stable/
/2015/07/09/node-v0-10-40-maintenance/
/2015/07/04/node-v0-12-6-stable/
/2015/06/22/node-v0-12-5-stable/
/2015/07/10/node-v0-12-7-stable/
/2015/07/09/node-v0-10-40-maintenance/
/2015/07/04/node-v0-12-6-stable/
/2015/06/22/node-v0-12-5-stable/
/2015/06/22/node-v0-10-39-maintenance/
/2015/05/23/node-v0-12-4-stable/
/2015/05/16/node-leaders-are-building-an-open-foundation/
/2015/05/16/the-nodejs-foundation-benefits-all/
/2014/01/23/node-v0-10-25-stable/
/2014/01/17/nodejs-road-ahead/
/2014/01/15/the-next-phase-of-node-js/
/2014/01/01/node-v0-11-10-unstable/
/2013/12/19/node-v0-10-24-stable/
/2013/12/12/node-v0-10-23-stable/
/2013/12/03/bnoordhuis-departure/
/2013/11/26/npm-post-mortem/
/2013/11/21/node-v0-11-9-unstable/
/2013/11/12/node-v0-10-22-stable/
/2013/10/30/node-v0-11-8-unstable/
/2013/10/22/cve-2013-4450-http-server-pipeline-flood-dos/
/2013/10/19/node-v0-10-21-stable/
/2013/10/18/node-v0-8-26-maintenance/
/2013/10/01/node-v0-10-20-stable/
/2013/09/25/node-v0-10-19-stable/
/2013/09/05/node-v0-11-7-unstable/
/2013/09/04/node-v0-10-18-stable/
/2013/08/22/node-v0-10-17-stable/
/2013/08/21/node-v0-11-6-unstable/
/2013/08/16/node-v0-10-16-stable/
/2013/08/07/node-v0-11-5-unstable/
/2013/07/26/node-v0-10-15-stable/
/2013/07/25/node-v0-10-14-stable/
/2013/07/12/node-v0-11-4-unstable/
/2013/07/09/node-v0-10-13-stable/
/2013/06/27/node-v0-11-3-unstable/
/2013/06/18/node-v0-10-12-stable/
/2013/06/13/node-v0-8-25-maintenance/
/2013/06/13/node-v0-10-11-stable/
/2013/06/04/node-v0-10-10-stable/
/2013/06/04/node-v0-8-24-maintenance/
/2013/05/30/node-v0-10-9-stable/
/2013/05/25/node-v0-10-8-stable/
/2013/05/17/node-v0-10-7-stable/
/2013/05/14/node-v0-10-6-stable/
/2013/05/14/node-v0-11-2-unstable/
/2013/04/23/node-v0-10-5-stable/
/2013/04/19/node-v0-11-1-unstable/
/2013/04/11/node-v0-10-4-stable/
/2015/05/14/node-v0-12-3-0.12.3/
/2015/05/08/transitions/
/2015/05/08/next-chapter/
/2015/04/01/node-v0-12-2-stable/
/2013/04/09/node-v0-8-23-legacy/
/2013/04/03/node-v0-10-3-stable/
/2013/03/28/node-v0-11-0-stable/
/2013/03/28/node-v0-10-2-stable/
/2013/03/21/node-v0-10-1-stable/
/2013/03/11/node-v0-10-0-stable/
/2013/03/07/node-v0-8-22-stable/
/2013/03/06/node-v0-9-12-unstable/
/2013/03/01/node-v0-9-11-unstable/
/2013/02/25/node-v0-8-21-stable/
/2013/02/19/node-v0-9-10-unstable/
/2013/02/15/node-v0-8-20-stable/
/2013/02/08/peer-dependencies/
/2013/02/07/node-v0-9-9-unstable/
/2013/02/06/node-v0-8-19-stable/
/2013/01/24/node-v0-9-8-unstable/
/2013/01/18/node-v0-8-18-stable/
/2013/01/18/node-v0-9-7-unstable/
/2013/01/11/node-v0-9-6-unstable/
/2013/01/10/node-v0-8-17-stable/
/2012/12/30/node-v0-9-5-unstable/
/2012/12/21/node-v0-9-4-unstable/
/2012/12/21/streams2/
/2012/12/13/node-v0-8-16/
/2012/11/26/node-v0-8-15/
/2012/10/25/node-v0.8.14/
/2012/10/25/node-v0.8.13/
/2012/10/24/node-v0.9.3/
/2012/10/12/node-v0.8.12/
/2012/09/30/bert-belder-libuv-lxjs-2012/
/2012/09/27/node-v0.8.11/
/2012/09/26/node-v0-8-10-stable/
/2012/09/18/node-v0-9-2-unstable/
/2012/09/11/node-v0-8-9-stable/
/2012/08/29/node-v0-9-1-unstable/
/2012/08/22/node-v0-8-8-stable/
/2012/08/16/node-v0-8-7-stable/
/2012/08/07/node-v0-8-6-stable/
/2012/08/03/node-v0-6-21-maintenance/
/2012/08/03/node-v0-8-5-stable/
/2015/03/24/node-v0-12-1-stable/
/2015/03/23/node-v0-10-38-maintenance/
/2015/03/14/node-v0-10-37-stable/
/2015/02/06/node-v0-12-0-stable/
/2012/07/25/node-v0-8-4-stable/
/2012/07/20/version-0-9-0-unstable/
/2012/07/19/node-v0-8-3-stable/
/2012/07/10/node-v0-6-20-maintenance/
/2012/07/09/node-v0-8-2-stable/
/2012/06/29/node-v0-8-1-stable/
/2012/06/25/node-v0-8-0/
/2012/06/20/version-0-7-12/
/2012/06/15/version-0-7-11-unstable/
/2012/06/11/version-0-7-10-unstable/
/2012/06/06/node-version-0-6-19-stable/
/2012/05/29/node-version-0-7-9-unstable/
/2012/05/15/version-0-6-18-stable/
/2012/05/08/bryan-cantrill-instrumenting-the-real-time-web/
/2012/05/07/http-server-security-vulnerability-please-upgrade-to-0-6-17/
/2012/05/04/version-0-6-17-stable/
/2012/05/02/multi-server-continuous-deployment-with-fleet/
/2012/04/30/version-0-6-16-stable/
/2012/04/25/profiling-node-js/
/2012/04/18/version-0-7-8-unstable/
/2012/04/09/version-0-6-15-stable/
/2012/03/30/version-0-7-7-unstable/
/2012/03/28/service-logging-in-json-with-bunyan/
/2012/03/23/version-0-6-14-stable/
/2012/03/15/version-0-6-13-stable/
/2012/03/13/version-0-7-6-unstable/
/2012/03/02/version-0-6-12-stable/
/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
/2012/02/23/version-0-7-5-unstable/
/2012/02/17/version-0-6-11-stable/
/2012/02/15/version-0-7-4-unstable/
/2012/02/08/node-v0-7-3/
/2012/02/03/node-v0-6-10/
/2012/02/01/node-v0-7-2-unstable/
/2012/01/28/node-v0-6-9/
/2012/01/24/node-v0-7-1/
/2012/01/20/node-v0-6-8/
/2012/01/17/node-v0-7-0-unstable/
/2012/01/07/node-v0-6-7/
/2011/12/15/growing-up/
/2015/01/30/node-v0-11-16-unstable/
/2015/01/26/node-v0-10-36-stable/
/2015/01/21/node-v0-11-15-unstable/
/2014/12/24/node-v0-10-35-stable/
/2011/12/15/node-v0-6-6/
/2011/12/04/node-v0-6-5/
/2011/12/02/node-v0-6-4/
/2011/11/25/node-v0-6-3/
/2011/11/19/node-v0-6-2/
/2011/11/12/node-v0-6-1/
/2011/11/05/node-v0-6-0/
/2011/10/26/version-0-6/
/2011/10/22/node-v0-5-10/
/2011/10/11/node-v0-5-9/
/2011/10/05/an-easy-way-to-build-scalable-network-programs/
/2011/10/01/node-v0-5-8/
/2011/09/23/libuv-status-report/
/2011/09/17/node-v0-5-7-unstable/
/2011/09/16/node-v0-4-12/
/2011/09/10/node-v0-5-6/
/2011/09/08/ldapjs-a-reprise-of-ldap/
/2011/08/29/some-new-node-projects/
/2011/08/27/node-v0-5-5/
/2011/08/18/node-v0-4-11/
/2011/08/12/node-v0-5-4/
/2011/08/12/the-videos-from-node-meetup/
/2011/08/03/node-meetup-this-thursday/
/2011/08/02/node-v0-5-3/
/2011/07/22/node-v0-5-2/
/2011/07/20/node-v0-4-10/
/2011/07/15/node-v0-5-1/
/2011/07/11/evolving-the-node-js-brand/
/2011/07/06/node-v0-5-0-unstable/
/2011/06/29/node-v0-4-9/
/2011/06/24/porting-node-to-windows-with-microsoft%e2%80%99s-help/
/2011/05/21/node-v0-4-8/
/2011/05/01/npm-1-0-released/
/2011/04/29/trademark/
/2011/04/28/node-office-hours-cut-short/
/2011/04/23/node-v0-4-7/
/2011/04/14/node-v0-4-6/
/2011/04/07/npm-1-0-link/
/2011/04/05/development-environment/
/2011/04/02/node-v0-4-5/
/2014/12/17/node-v0-10-34-stable/
/2014/12/05/listening-to-the-community/
/2014/12/03/advisory-board-update/
/2014/10/23/node-v0-10-33-stable/
/2011/03/26/node-v0-4-4/
/2011/03/25/jobs-nodejs-org/
/2011/03/24/npm-1-0-global-vs-local-installation/
/2011/03/24/office-hours/
/2011/03/19/node-v0-4-3/
/2011/03/18/npm-1-0-the-new-ls/
/2011/03/18/welcome-to-the-node-blog/
/2014/09/25/node-v0-11-14-unstable/
/2014/09/17/node-v0-10-32-stable/
/2014/08/20/node-v0-10-31-stable/
/2014/07/31/v8-memory-corruption-stack-overflow/
/2014/07/31/node-v0-8-28-maintenance/
/2014/07/31/node-v0-10-30-stable/
/2014/07/29/building-nodejs-together/
/2014/06/16/openssl-and-breaking-utf-8-change/
/2014/06/16/node-v0-8-27-/
/2014/06/16/node-v0-10-29-stable/
/2014/06/11/notes-from-the-road/
/2014/05/02/node-v0-10-28-stable/
/2014/05/02/node-v0-10-27-stable/
/2014/03/12/node-v0-11-12-unstable/
/2014/02/19/node-v0-10-26-stable/
/2014/01/29/node-v0-11-11-unstable/
/2013/07/16/download-statistics/
/2015/05/16/node-leaders-are-building-an-open-foundation/
/2015/05/16/the-nodejs-foundation-benefits-all/
/2015/05/08/transitions/
/2015/05/08/next-chapter/
/2012/12/21/streams2/
/2012/05/02/multi-server-continuous-deployment-with-fleet/
/2012/03/28/service-logging-in-json-with-bunyan/
/2013/11/26/npm-post-mortem/
/2013/02/08/peer-dependencies/
/2012/02/27/managing-node-js-dependencies-with-shrinkwrap/
/2011/05/01/npm-1-0-released/
/2015/07/09/node-v0-10-40-maintenance/
/2015/06/22/node-v0-10-39-maintenance/
/2015/03/23/node-v0-10-38-maintenance/
/2015/03/14/node-v0-10-37-stable/
/2015/07/10/node-v0-12-7-stable/
/2015/07/04/node-v0-12-6-stable/
/2015/06/22/node-v0-12-5-stable/
/2015/05/23/node-v0-12-4-stable/
/2011/09/16/node-v0-4-12/
/2011/08/18/node-v0-4-11/
/2011/07/20/node-v0-4-10/
/2011/06/29/node-v0-4-9/
/2012/08/03/node-v0-6-21-maintenance/
/2012/07/10/node-v0-6-20-maintenance/
/2012/06/06/node-version-0-6-19-stable/
/2012/05/15/version-0-6-18-stable/
/2014/07/31/node-v0-8-28-maintenance/
/2014/06/16/node-v0-8-27-/
/2013/10/18/node-v0-8-26-maintenance/
/2013/06/13/node-v0-8-25-maintenance/
/2015/07/10/node-v0-12-7-stable/
/2015/07/09/node-v0-10-40-maintenance/
/2015/07/04/node-v0-12-6-stable/
/2015/06/22/node-v0-12-5-stable/
/2014/06/11/notes-from-the-road/
/2012/04/25/profiling-node-js/
/2011/12/15/growing-up/
/2011/10/26/version-0-6/
/2012/09/30/bert-belder-libuv-lxjs-2012/
/2012/05/08/bryan-cantrill-instrumenting-the-real-time-web/
/2011/03/18/welcome-to-the-node-blog/
/2014/07/31/v8-memory-corruption-stack-overflow/
/2014/06/16/openssl-and-breaking-utf-8-change/
/2013/10/22/cve-2013-4450-http-server-pipeline-flood-dos/
/2012/05/07/http-server-security-vulnerability-please-upgrade-to-0-6-17/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment