diff --git a/app.js b/app.js index dd8d160a7e..c6eba9ba56 100644 --- a/app.js +++ b/app.js @@ -70,7 +70,7 @@ if (!nconf.get('setup') && nconf.get('base_url')) { config['ROOT_DIRECTORY'] = __dirname; templates.init([ - 'header', 'footer', 'logout', 'admin/header', 'admin/footer', 'admin/index', + 'header', 'footer', 'logout', 'outgoing', 'admin/header', 'admin/footer', 'admin/index', 'emails/reset', 'emails/reset_plaintext', 'emails/email_confirm', 'emails/email_confirm_plaintext', 'emails/header', 'emails/footer', 'install/header', 'install/footer', 'install/redis', diff --git a/public/templates/outgoing.tpl b/public/templates/outgoing.tpl new file mode 100644 index 0000000000..c4c6a065ae --- /dev/null +++ b/public/templates/outgoing.tpl @@ -0,0 +1,11 @@ +
+

Now Leaving NodeBB

+

+ You are now leaving NodeBB. +

+
+

+ + +

+
\ No newline at end of file diff --git a/src/postTools.js b/src/postTools.js index c8a982bbc6..2850b666bf 100644 --- a/src/postTools.js +++ b/src/postTools.js @@ -148,9 +148,19 @@ var RDB = require('./redis.js'), if (md.length > 0) { var parsedContentDOM = cheerio.load(marked(md)); - parsedContentDOM('a').attr('rel', 'nofollow').attr('target', '_blank'); + parsedContentDOM('a').attr('rel', 'nofollow'); + + var href = parsedContentDOM('a').attr('href'), + domain = global.nconf.get('url'); + + if (href && !href.match(domain)) { + parsedContentDOM('a').attr('href', domain + 'outgoing?' + href); + } + html = parsedContentDOM.html(); - } else html = '

'; + } else { + html = '

'; + } return html; } diff --git a/src/webserver.js b/src/webserver.js index 1733afaea5..fae657791f 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -278,6 +278,20 @@ var express = require('express'), }); }); + app.get('/outgoing', function(req, res) { + var url = req.url.split('?'); + + if (url[1]) { + res.send(app.build_header(res) + templates['outgoing'].parse({ + url: url[1], + home: global.nconf.get('url') + }) + templates['footer']); + } else { + res.status(404); + res.redirect(global.nconf.get('relative_path') + '/404'); + } + }); + }); // These functions are called via ajax once the initial page is loaded to populate templates with data