From 9af55a11f7df74f9fc6c91a964a975917074c6e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timoth=C3=A9e=20Alby?= Date: Wed, 27 Nov 2019 18:27:19 +0530 Subject: [PATCH] Merge pull request #2381 from overleaf/ho-template-error-handling Template error handling & blog routes removal GitOrigin-RevId: 849423e19bbb5291ef25ed9612f49bdc67dae330 --- .../app/src/Features/Blog/BlogController.js | 96 ---------------- services/web/app/src/router.js | 6 - .../test/unit/src/Blog/BlogControllerTests.js | 106 ------------------ 3 files changed, 208 deletions(-) delete mode 100644 services/web/app/src/Features/Blog/BlogController.js delete mode 100644 services/web/test/unit/src/Blog/BlogControllerTests.js diff --git a/services/web/app/src/Features/Blog/BlogController.js b/services/web/app/src/Features/Blog/BlogController.js deleted file mode 100644 index 3d7bb02f81..0000000000 --- a/services/web/app/src/Features/Blog/BlogController.js +++ /dev/null @@ -1,96 +0,0 @@ -/* eslint-disable - max-len, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * DS103: Rewrite code to no longer use __guard__ - * DS207: Consider shorter variations of null checks - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ -let BlogController -const request = require('request') -const settings = require('settings-sharelatex') -const logger = require('logger-sharelatex') -const _ = require('underscore') -const ErrorController = require('../Errors/ErrorController') - -module.exports = BlogController = { - getPage(req, res, next) { - const url = req.url != null ? req.url.toLowerCase() : undefined - const blogUrl = `${settings.apis.blog.url}${url}` - - const extensionsToProxy = [ - '.png', - '.xml', - '.jpeg', - '.jpg', - '.json', - '.zip', - '.eps', - '.gif' - ] - - const shouldProxy = _.find( - extensionsToProxy, - extension => url.indexOf(extension) !== -1 - ) - - if (shouldProxy) { - return BlogController._directProxy(blogUrl, res) - } - - return request.get(blogUrl, function(err, r, data) { - if ( - (r != null ? r.statusCode : undefined) === 404 || - (r != null ? r.statusCode : undefined) === 403 - ) { - return ErrorController.notFound(req, res, next) - } - if (err != null) { - return res.send(500) - } - data = data.trim() - try { - data = JSON.parse(data) - if (settings.cdn && settings.cdn.web && settings.cdn.web.host) { - if (data != null) { - data.content = __guard__( - data != null ? data.content : undefined, - x1 => - x1.replace( - /src="(\/[^"]+)"/g, - `src='${settings.cdn.web.host}$1'` - ) - ) - } - } - } catch (error) { - err = error - logger.err({ err, data }, 'error parsing data from data') - } - return res.render('blog/blog_holder', data) - }) - }, - - getIndexPage(req, res) { - req.url = '/blog/index.html' - return BlogController.getPage(req, res) - }, - - _directProxy(originUrl, res) { - const upstream = request.get(originUrl) - upstream.on('error', error => - logger.error({ err: error }, 'blog proxy error') - ) - return upstream.pipe(res) - } -} - -function __guard__(value, transform) { - return typeof value !== 'undefined' && value !== null - ? transform(value) - : undefined -} diff --git a/services/web/app/src/router.js b/services/web/app/src/router.js index c864f3802f..03b41ccb3d 100644 --- a/services/web/app/src/router.js +++ b/services/web/app/src/router.js @@ -32,7 +32,6 @@ const ExportsController = require('./Features/Exports/ExportsController') const PasswordResetRouter = require('./Features/PasswordReset/PasswordResetRouter') const StaticPagesRouter = require('./Features/StaticPages/StaticPagesRouter') const ChatController = require('./Features/Chat/ChatController') -const BlogController = require('./Features/Blog/BlogController') const Modules = require('./infrastructure/Modules') const RateLimiterMiddleware = require('./Features/Security/RateLimiterMiddleware') const InactiveProjectController = require('./Features/InactiveData/InactiveProjectController') @@ -107,11 +106,6 @@ function initialize(webRouter, privateApiRouter, publicApiRouter) { ) } - if (Settings.overleaf == null) { - webRouter.get('/blog', BlogController.getIndexPage) - webRouter.get('/blog/*', BlogController.getPage) - } - webRouter.get('/user/activate', UserPagesController.activateAccountPage) AuthenticationController.addEndpointToLoginWhitelist('/user/activate') diff --git a/services/web/test/unit/src/Blog/BlogControllerTests.js b/services/web/test/unit/src/Blog/BlogControllerTests.js deleted file mode 100644 index a5c128b253..0000000000 --- a/services/web/test/unit/src/Blog/BlogControllerTests.js +++ /dev/null @@ -1,106 +0,0 @@ -/* eslint-disable - max-len, - no-return-assign, - no-unused-vars, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ -const should = require('chai').should() -const SandboxedModule = require('sandboxed-module') -const assert = require('assert') -const path = require('path') -const sinon = require('sinon') -const modulePath = path.join( - __dirname, - '../../../../app/src/Features/Blog/BlogController' -) -const { expect } = require('chai') - -describe('BlogController', function() { - beforeEach(function() { - this.settings = { - apis: { - blog: { - url: 'http://blog.sharelatex.env' - } - }, - cdn: { web: { host: null } } - } - this.request = { get: sinon.stub() } - this.ErrorController = {} - this.BlogController = SandboxedModule.require(modulePath, { - globals: { - console: console - }, - requires: { - 'settings-sharelatex': this.settings, - 'logger-sharelatex': { - log() {} - }, - '../Errors/ErrorController': this.ErrorController, - request: this.request - } - }) - - this.req = {} - return (this.res = {}) - }) - - describe('getPage', function() { - it('should get the data from the blog api', function(done) { - this.req.url = '/blog/something.html' - const body = { stuff: 'here' } - - this.request.get.callsArgWith(1, null, null, JSON.stringify(body)) - this.res.render = (view, data) => { - this.request.get.calledWith( - `${this.settings.apis.blog.url}${this.req.url}` - ) - view.should.equal('blog/blog_holder') - assert.deepEqual(body, data) - return done() - } - - return this.BlogController.getPage(this.req, this.res) - }) - - it('should send to the error controller if the blog responds 404', function(done) { - this.req.url = '/blog/something.html' - this.request.get.callsArgWith(1, null, { statusCode: 404 }) - - this.ErrorController.notFound = (req, res) => { - assert.deepEqual(req, this.req) - assert.deepEqual(res, this.res) - return done() - } - - return this.BlogController.getPage(this.req, this.res) - }) - - it('should proxy the image urls', function(done) { - this.BlogController._directProxy = sinon.stub() - this.req.url = '/something.png' - this.BlogController.getPage(this.req, this.res) - this.BlogController._directProxy - .calledWith(`${this.settings.apis.blog.url}${this.req.url}`, this.res) - .should.equal(true) - return done() - }) - }) - - describe('getIndexPage', function() { - it('should change the url and send it to getPage', function(done) { - this.req.url = '/blog' - this.BlogController.getPage = function(req, res) { - req.url.should.equal('/blog/index.html') - return done() - } - return this.BlogController.getIndexPage(this.req, this.res) - }) - }) -})