Merge pull request #6317 from overleaf/jpa-send-explicit-content-type
[web] send explicit content type in responses GitOrigin-RevId: d5aeaba57a7d2fc053fbf5adc2299fb46e435341
This commit is contained in:
@@ -7,12 +7,15 @@ const Settings = require('@overleaf/settings')
|
||||
const User = require('./helpers/User').promises
|
||||
|
||||
const express = require('express')
|
||||
const {
|
||||
plainTextResponse,
|
||||
} = require('../../../app/src/infrastructure/Response')
|
||||
const LinkedUrlProxy = express()
|
||||
LinkedUrlProxy.get('/', (req, res, next) => {
|
||||
if (req.query.url === 'http://example.com/foo') {
|
||||
return res.send('foo foo foo')
|
||||
return plainTextResponse(res, 'foo foo foo')
|
||||
} else if (req.query.url === 'http://example.com/bar') {
|
||||
return res.send('bar bar bar')
|
||||
return plainTextResponse(res, 'bar bar bar')
|
||||
} else {
|
||||
return res.sendStatus(404)
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ class MockChatApi extends AbstractMockApi {
|
||||
}
|
||||
|
||||
getGlobalMessages(req, res) {
|
||||
res.send(this.projects[req.params.project_id] || [])
|
||||
res.json(this.projects[req.params.project_id] || [])
|
||||
}
|
||||
|
||||
sendGlobalMessage(req, res) {
|
||||
@@ -19,7 +19,7 @@ class MockChatApi extends AbstractMockApi {
|
||||
}
|
||||
this.projects[projectId] = this.projects[projectId] || []
|
||||
this.projects[projectId].push(message)
|
||||
res.sendStatus(201).send(Object.assign({ room_id: projectId }, message))
|
||||
res.json(Object.assign({ room_id: projectId }, message))
|
||||
}
|
||||
|
||||
applyRoutes() {
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
const AbstractMockApi = require('./AbstractMockApi')
|
||||
const {
|
||||
plainTextResponse,
|
||||
} = require('../../../../app/src/infrastructure/Response')
|
||||
|
||||
class MockClsiApi extends AbstractMockApi {
|
||||
static compile(req, res) {
|
||||
res.status(200).send({
|
||||
res.json({
|
||||
compile: {
|
||||
status: 'success',
|
||||
error: null,
|
||||
@@ -36,9 +39,9 @@ class MockClsiApi extends AbstractMockApi {
|
||||
(req, res) => {
|
||||
const filename = req.params[0]
|
||||
if (filename === 'project.pdf') {
|
||||
res.status(200).send('mock-pdf')
|
||||
plainTextResponse(res, 'mock-pdf')
|
||||
} else if (filename === 'project.log') {
|
||||
res.status(200).send('mock-log')
|
||||
plainTextResponse(res, 'mock-log')
|
||||
} else {
|
||||
res.sendStatus(404)
|
||||
}
|
||||
@@ -48,12 +51,12 @@ class MockClsiApi extends AbstractMockApi {
|
||||
this.app.get(
|
||||
'/project/:project_id/user/:user_id/build/:build_id/output/:output_path',
|
||||
(req, res) => {
|
||||
res.status(200).send('hello')
|
||||
plainTextResponse(res, 'hello')
|
||||
}
|
||||
)
|
||||
|
||||
this.app.get('/project/:project_id/status', (req, res) => {
|
||||
res.status(200).send()
|
||||
res.sendStatus(200)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
const AbstractMockApi = require('./AbstractMockApi')
|
||||
const {
|
||||
plainTextResponse,
|
||||
} = require('../../../../app/src/infrastructure/Response')
|
||||
|
||||
class MockFilestoreApi extends AbstractMockApi {
|
||||
reset() {
|
||||
@@ -24,7 +27,7 @@ class MockFilestoreApi extends AbstractMockApi {
|
||||
this.app.get('/project/:projectId/file/:fileId', (req, res) => {
|
||||
const { projectId, fileId } = req.params
|
||||
const { content } = this.files[projectId][fileId]
|
||||
res.send(content)
|
||||
plainTextResponse(res, content)
|
||||
})
|
||||
|
||||
// handle file copying
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
const AbstractMockApi = require('./AbstractMockApi')
|
||||
const _ = require('lodash')
|
||||
const { ObjectId } = require('mongodb')
|
||||
const {
|
||||
plainTextResponse,
|
||||
} = require('../../../../app/src/infrastructure/Response')
|
||||
|
||||
class MockProjectHistoryApi extends AbstractMockApi {
|
||||
reset() {
|
||||
@@ -64,7 +67,7 @@ class MockProjectHistoryApi extends AbstractMockApi {
|
||||
const { projectId, version, pathname } = req.params
|
||||
const key = `${projectId}:${version}:${pathname}`
|
||||
if (this.oldFiles[key] != null) {
|
||||
res.send(this.oldFiles[key])
|
||||
plainTextResponse(res, this.oldFiles[key])
|
||||
} else {
|
||||
res.sendStatus(404)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
const AbstractMockApi = require('./AbstractMockApi')
|
||||
const SubscriptionController = require('../../../../app/src/Features/Subscription/SubscriptionController')
|
||||
const { xmlResponse } = require('../../../../app/src/infrastructure/Response')
|
||||
|
||||
class MockRecurlyApi extends AbstractMockApi {
|
||||
reset() {
|
||||
@@ -28,9 +29,11 @@ class MockRecurlyApi extends AbstractMockApi {
|
||||
this.app.get('/subscriptions/:id', (req, res) => {
|
||||
const subscription = this.getMockSubscriptionById(req.params.id)
|
||||
if (!subscription) {
|
||||
res.status(404).end()
|
||||
res.sendStatus(404)
|
||||
} else {
|
||||
res.send(`\
|
||||
xmlResponse(
|
||||
res,
|
||||
`\
|
||||
<subscription>
|
||||
<plan><plan_code>${subscription.planCode}</plan_code></plan>
|
||||
<currency>${subscription.currency}</currency>
|
||||
@@ -42,22 +45,26 @@ class MockRecurlyApi extends AbstractMockApi {
|
||||
<account href="accounts/${subscription.account.id}" />
|
||||
<trial_ends_at type="datetime">${subscription.trial_ends_at}</trial_ends_at>
|
||||
</subscription>\
|
||||
`)
|
||||
`
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
this.app.get('/accounts/:id', (req, res) => {
|
||||
const subscription = this.getMockSubscriptionByAccountId(req.params.id)
|
||||
if (!subscription) {
|
||||
res.status(404).end()
|
||||
res.sendStatus(404)
|
||||
} else {
|
||||
res.send(`\
|
||||
xmlResponse(
|
||||
res,
|
||||
`\
|
||||
<account>
|
||||
<account_code>${req.params.id}</account_code>
|
||||
<hosted_login_token>${subscription.account.hosted_login_token}</hosted_login_token>
|
||||
<email>${subscription.account.email}</email>
|
||||
</account>\
|
||||
`)
|
||||
`
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -67,15 +74,18 @@ class MockRecurlyApi extends AbstractMockApi {
|
||||
(req, res) => {
|
||||
const subscription = this.getMockSubscriptionByAccountId(req.params.id)
|
||||
if (!subscription) {
|
||||
res.status(404).end()
|
||||
res.sendStatus(404)
|
||||
} else {
|
||||
Object.assign(subscription.account, req.body.account)
|
||||
res.send(`\
|
||||
xmlResponse(
|
||||
res,
|
||||
`\
|
||||
<account>
|
||||
<account_code>${req.params.id}</account_code>
|
||||
<email>${subscription.account.email}</email>
|
||||
</account>\
|
||||
`)
|
||||
`
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
@@ -83,15 +93,18 @@ class MockRecurlyApi extends AbstractMockApi {
|
||||
this.app.get('/coupons/:code', (req, res) => {
|
||||
const coupon = this.coupons[req.params.code]
|
||||
if (!coupon) {
|
||||
res.status(404).end()
|
||||
res.sendStatus(404)
|
||||
} else {
|
||||
res.send(`\
|
||||
xmlResponse(
|
||||
res,
|
||||
`\
|
||||
<coupon>
|
||||
<coupon_code>${req.params.code}</coupon_code>
|
||||
<name>${coupon.name || ''}</name>
|
||||
<description>${coupon.description || ''}</description>
|
||||
</coupon>\
|
||||
`)
|
||||
`
|
||||
)
|
||||
}
|
||||
})
|
||||
|
||||
@@ -107,11 +120,14 @@ class MockRecurlyApi extends AbstractMockApi {
|
||||
`
|
||||
}
|
||||
|
||||
res.send(`\
|
||||
xmlResponse(
|
||||
res,
|
||||
`\
|
||||
<redemptions type="array">
|
||||
${redemptionsListXml}
|
||||
</redemptions>\
|
||||
`)
|
||||
`
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
const AbstractMockApi = require('./AbstractMockApi')
|
||||
const { EventEmitter } = require('events')
|
||||
const {
|
||||
zipAttachment,
|
||||
prepareZipAttachment,
|
||||
} = require('../../../../app/src/infrastructure/Response')
|
||||
|
||||
class MockV1HistoryApi extends AbstractMockApi {
|
||||
reset() {
|
||||
@@ -13,10 +17,10 @@ class MockV1HistoryApi extends AbstractMockApi {
|
||||
this.app.get(
|
||||
'/api/projects/:project_id/version/:version/zip',
|
||||
(req, res, next) => {
|
||||
res.header('content-disposition', 'attachment; name=project.zip')
|
||||
res.header('content-type', 'application/octet-stream')
|
||||
res.send(
|
||||
`Mock zip for ${req.params.project_id} at version ${req.params.version}`
|
||||
zipAttachment(
|
||||
res,
|
||||
`Mock zip for ${req.params.project_id} at version ${req.params.version}`,
|
||||
'project.zip'
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -27,13 +31,14 @@ class MockV1HistoryApi extends AbstractMockApi {
|
||||
if (!(this.fakeZipCall++ > 0)) {
|
||||
return res.sendStatus(404)
|
||||
}
|
||||
res.header('content-disposition', 'attachment; name=project.zip')
|
||||
res.header('content-type', 'application/octet-stream')
|
||||
if (req.params.version === '42') {
|
||||
return res.send(
|
||||
`Mock zip for ${req.params.project_id} at version ${req.params.version}`
|
||||
return zipAttachment(
|
||||
res,
|
||||
`Mock zip for ${req.params.project_id} at version ${req.params.version}`,
|
||||
'project.zip'
|
||||
)
|
||||
}
|
||||
prepareZipAttachment(res, 'project.zip')
|
||||
const writeChunk = () => {
|
||||
res.write('chunk' + this.sentChunks++)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user