Merge pull request #673 from sharelatex/as-fix-v1-connection-error

Handle v1 connection error
This commit is contained in:
Alasdair Smith 2018-06-20 11:56:34 +01:00 committed by GitHub
commit 2ebd972603
4 changed files with 21 additions and 3 deletions

View file

@ -61,6 +61,13 @@ ProjectHistoryDisabledError = (message) ->
return error
ProjectHistoryDisabledError.prototype.__proto___ = Error.prototype
V1ConnectionError = (message) ->
error = new Error(message)
error.name = "V1ConnectionError"
error.__proto__ = V1ConnectionError.prototype
return error
V1ConnectionError.prototype.__proto___ = Error.prototype
module.exports = Errors =
NotFoundError: NotFoundError
ServiceNotConfiguredError: ServiceNotConfiguredError
@ -71,3 +78,4 @@ module.exports = Errors =
UnsupportedExportRecordsError: UnsupportedExportRecordsError
V1HistoryNotSyncedError: V1HistoryNotSyncedError
ProjectHistoryDisabledError: ProjectHistoryDisabledError
V1ConnectionError: V1ConnectionError

View file

@ -27,6 +27,7 @@ CollaboratorsHandler = require '../Collaborators/CollaboratorsHandler'
Modules = require '../../infrastructure/Modules'
ProjectEntityHandler = require './ProjectEntityHandler'
crypto = require 'crypto'
{ V1ConnectionError } = require '../Errors/Errors'
module.exports = ProjectController =
@ -179,11 +180,14 @@ module.exports = ProjectController =
ProjectGetter.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived owner_ref tokens', cb
v1Projects: (cb) ->
Modules.hooks.fire "findAllV1Projects", user_id, (error, projects = []) ->
if error? and error.message == 'No V1 connection'
if error? and error instanceof V1ConnectionError
return cb(null, projects: [], tags: [], noConnection: true)
return cb(error, projects[0]) # hooks.fire returns an array of results, only need first
hasSubscription: (cb)->
LimitationsManager.userHasSubscriptionOrIsGroupMember currentUser, cb
LimitationsManager.userHasSubscriptionOrIsGroupMember currentUser, (error, hasSub) ->
if error? and error instanceof V1ConnectionError
return cb(null, true)
return cb(error, hasSub)
user: (cb) ->
User.findById user_id, "featureSwitches overleaf awareOfV2 features", cb
}, (err, results)->

View file

@ -2,6 +2,7 @@ UserGetter = require "../User/UserGetter"
request = require "request"
settings = require "settings-sharelatex"
logger = require "logger-sharelatex"
{ V1ConnectionError } = require "../Errors/Errors"
module.exports = V1SubscriptionManager =
# Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null
@ -58,7 +59,10 @@ module.exports = V1SubscriptionManager =
json: true,
timeout: 5 * 1000
}, (error, response, body) ->
return callback(error) if error?
if error?
# Specially handle no connection err, so warning can be shown
error = new V1ConnectionError('No V1 connection') if error.code == 'ECONNREFUSED'
return callback(error)
if 200 <= response.statusCode < 300
return callback null, body
else

View file

@ -5,6 +5,7 @@ path = require('path')
sinon = require('sinon')
modulePath = path.join __dirname, "../../../../app/js/Features/Project/ProjectController"
expect = require("chai").expect
Errors = require "../../../../app/js/Features/Errors/Errors"
describe "ProjectController", ->
@ -100,6 +101,7 @@ describe "ProjectController", ->
"../Collaborators/CollaboratorsHandler": @CollaboratorsHandler
"../../infrastructure/Modules": @Modules
"./ProjectEntityHandler": @ProjectEntityHandler
"../Errors/Errors": Errors
@projectName = "£12321jkj9ujkljds"
@req =