2019-05-29 05:21:06 -04:00
|
|
|
/* eslint-disable
|
|
|
|
max-len,
|
|
|
|
no-return-assign,
|
|
|
|
*/
|
|
|
|
// TODO: This file was created by bulk-decaffeinate.
|
|
|
|
// Fix any style issues and re-enable lint.
|
|
|
|
/*
|
|
|
|
* decaffeinate suggestions:
|
|
|
|
* DS101: Remove unnecessary use of Array.from
|
|
|
|
* 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 MockV1Api
|
|
|
|
const express = require('express')
|
|
|
|
const app = express()
|
|
|
|
const bodyParser = require('body-parser')
|
|
|
|
const sinon = require('sinon')
|
|
|
|
|
|
|
|
app.use(bodyParser.json())
|
|
|
|
|
|
|
|
let v1Id = 1000
|
|
|
|
|
|
|
|
module.exports = MockV1Api = {
|
|
|
|
nextV1Id() {
|
|
|
|
return v1Id++
|
|
|
|
},
|
|
|
|
|
|
|
|
users: {},
|
|
|
|
|
|
|
|
setUser(id, user) {
|
|
|
|
return (this.users[id] = user)
|
|
|
|
},
|
|
|
|
|
|
|
|
exportId: null,
|
|
|
|
|
|
|
|
exportParams: null,
|
|
|
|
|
|
|
|
setExportId(id) {
|
|
|
|
return (this.exportId = id)
|
|
|
|
},
|
|
|
|
|
|
|
|
getLastExportParams() {
|
|
|
|
return this.exportParams
|
|
|
|
},
|
|
|
|
|
|
|
|
clearExportParams() {
|
|
|
|
return (this.exportParams = null)
|
|
|
|
},
|
|
|
|
|
|
|
|
syncUserFeatures: sinon.stub(),
|
|
|
|
|
|
|
|
affiliations: [],
|
|
|
|
|
|
|
|
updateEmail: sinon.stub(),
|
|
|
|
|
|
|
|
existingEmails: [],
|
|
|
|
|
|
|
|
brands: {},
|
|
|
|
|
|
|
|
brand_variations: {},
|
|
|
|
|
|
|
|
validation_clients: {},
|
|
|
|
|
|
|
|
setAffiliations(affiliations) {
|
|
|
|
return (this.affiliations = affiliations)
|
|
|
|
},
|
|
|
|
|
|
|
|
doc_exported: {},
|
|
|
|
|
|
|
|
setDocExported(token, info) {
|
|
|
|
return (this.doc_exported[token] = info)
|
|
|
|
},
|
|
|
|
|
|
|
|
run() {
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/users/:v1_user_id/plan_code',
|
|
|
|
(req, res, next) => {
|
|
|
|
const user = this.users[req.params.v1_user_id]
|
|
|
|
if (user) {
|
|
|
|
return res.json(user)
|
|
|
|
} else {
|
|
|
|
return res.sendStatus(404)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/users/:v1_user_id/subscriptions',
|
|
|
|
(req, res, next) => {
|
|
|
|
const user = this.users[req.params.v1_user_id]
|
|
|
|
if ((user != null ? user.subscription : undefined) != null) {
|
|
|
|
return res.json(user.subscription)
|
|
|
|
} else {
|
|
|
|
return res.sendStatus(404)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/users/:v1_user_id/subscription_status',
|
|
|
|
(req, res, next) => {
|
|
|
|
const user = this.users[req.params.v1_user_id]
|
|
|
|
if ((user != null ? user.subscription_status : undefined) != null) {
|
|
|
|
return res.json(user.subscription_status)
|
|
|
|
} else {
|
|
|
|
return res.sendStatus(404)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.delete(
|
|
|
|
'/api/v1/sharelatex/users/:v1_user_id/subscription',
|
|
|
|
(req, res, next) => {
|
|
|
|
const user = this.users[req.params.v1_user_id]
|
|
|
|
if (user != null) {
|
|
|
|
user.canceled = true
|
|
|
|
return res.sendStatus(200)
|
|
|
|
} else {
|
|
|
|
return res.sendStatus(404)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.post('/api/v1/sharelatex/users/:v1_user_id/sync', (req, res, next) => {
|
|
|
|
this.syncUserFeatures(req.params.v1_user_id)
|
|
|
|
return res.sendStatus(200)
|
|
|
|
})
|
|
|
|
|
|
|
|
app.post('/api/v1/sharelatex/exports', (req, res, next) => {
|
|
|
|
this.exportParams = Object.assign({}, req.body)
|
|
|
|
return res.json({ exportId: this.exportId })
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get('/api/v2/users/:userId/affiliations', (req, res, next) => {
|
|
|
|
return res.json(this.affiliations)
|
|
|
|
})
|
|
|
|
|
|
|
|
app.post('/api/v2/users/:userId/affiliations', (req, res, next) => {
|
|
|
|
return res.sendStatus(201)
|
|
|
|
})
|
|
|
|
|
2019-07-18 10:18:56 -04:00
|
|
|
app.delete('/api/v2/users/:userId/affiliations', (req, res, next) => {
|
|
|
|
return res.sendStatus(201)
|
|
|
|
})
|
|
|
|
|
2019-05-29 05:21:06 -04:00
|
|
|
app.delete(
|
|
|
|
'/api/v2/users/:userId/affiliations/:email',
|
|
|
|
(req, res, next) => {
|
|
|
|
return res.sendStatus(204)
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get('/api/v2/brands/:slug', (req, res, next) => {
|
|
|
|
let brand
|
|
|
|
if ((brand = this.brands[req.params.slug])) {
|
|
|
|
return res.json(brand)
|
|
|
|
} else {
|
|
|
|
return res.sendStatus(404)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get('/universities/list', (req, res, next) => res.json([]))
|
|
|
|
|
|
|
|
app.get('/universities/list/:id', (req, res, next) =>
|
|
|
|
res.json({
|
|
|
|
id: parseInt(req.params.id),
|
|
|
|
name: `Institution ${req.params.id}`
|
|
|
|
})
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get('/university/domains', (req, res, next) => res.json([]))
|
|
|
|
|
|
|
|
app.put('/api/v1/sharelatex/users/:id/email', (req, res, next) => {
|
|
|
|
const { email } = req.body != null ? req.body.user : undefined
|
|
|
|
if (Array.from(this.existingEmails).includes(email)) {
|
|
|
|
return res.sendStatus(409)
|
|
|
|
} else {
|
|
|
|
this.updateEmail(parseInt(req.params.id), email)
|
|
|
|
return res.sendStatus(200)
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.post('/api/v1/sharelatex/login', (req, res, next) => {
|
|
|
|
for (let id in this.users) {
|
|
|
|
const user = this.users[id]
|
|
|
|
if (
|
|
|
|
user != null &&
|
|
|
|
user.email === req.body.email &&
|
|
|
|
user.password === req.body.password
|
|
|
|
) {
|
|
|
|
return res.json({
|
|
|
|
email: user.email,
|
|
|
|
valid: true,
|
|
|
|
user_profile: user.profile
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return res.status(403).json({
|
|
|
|
email: req.body.email,
|
|
|
|
valid: false
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get('/api/v2/partners/:partner/conversions/:id', (req, res, next) => {
|
|
|
|
const partner = this.validation_clients[req.params.partner]
|
|
|
|
const conversion = __guard__(
|
|
|
|
partner != null ? partner.conversions : undefined,
|
|
|
|
x => x[req.params.id]
|
|
|
|
)
|
|
|
|
if (conversion != null) {
|
|
|
|
return res.status(200).json({
|
|
|
|
input_file_uri: conversion,
|
|
|
|
brand_variation_id: partner.brand_variation_id
|
|
|
|
})
|
|
|
|
} else {
|
|
|
|
return res.status(404).json({})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get('/api/v2/brand_variations/:id', (req, res, next) => {
|
|
|
|
const variation = this.brand_variations[req.params.id]
|
|
|
|
if (variation != null) {
|
|
|
|
return res.status(200).json(variation)
|
|
|
|
} else {
|
|
|
|
return res.status(404).json({})
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get('/api/v1/sharelatex/docs/:token/is_published', (req, res, next) => {
|
|
|
|
return res.json({ allow: true })
|
|
|
|
})
|
|
|
|
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/users/:user_id/docs/:token/info',
|
|
|
|
(req, res, next) => {
|
|
|
|
return res.json({
|
|
|
|
exists: true,
|
|
|
|
exported: false
|
|
|
|
})
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/docs/:token/exported_to_v2',
|
|
|
|
(req, res, next) => {
|
|
|
|
if (this.doc_exported[req.params.token] != null) {
|
|
|
|
return res.json(this.doc_exported[req.params.token])
|
|
|
|
}
|
|
|
|
return res.json({ exporting: false, exported: false })
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
app.get(
|
|
|
|
'/api/v1/sharelatex/docs/read_token/:token/exists',
|
|
|
|
(req, res, next) => {
|
|
|
|
return res.json({ exists: false })
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
return app
|
2019-08-07 10:04:04 -04:00
|
|
|
.listen(5000, error => {
|
2019-05-29 05:21:06 -04:00
|
|
|
if (error != null) {
|
|
|
|
throw error
|
|
|
|
}
|
|
|
|
})
|
2019-08-07 10:04:04 -04:00
|
|
|
.on('error', error => {
|
2019-05-29 05:21:06 -04:00
|
|
|
console.error('error starting MockV1Api:', error.message)
|
|
|
|
return process.exit(1)
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
MockV1Api.run()
|
|
|
|
|
|
|
|
function __guard__(value, transform) {
|
|
|
|
return typeof value !== 'undefined' && value !== null
|
|
|
|
? transform(value)
|
|
|
|
: undefined
|
|
|
|
}
|