Ver Fonte

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

Handle v1 connection error
Alasdair Smith há 8 anos atrás
pai
commit
2ebd972603

+ 8 - 0
services/web/app/coffee/Features/Errors/Errors.coffee

@@ -61,6 +61,13 @@ ProjectHistoryDisabledError = (message) ->
 	return error
 	return error
 ProjectHistoryDisabledError.prototype.__proto___ = Error.prototype
 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 =
 module.exports = Errors =
 	NotFoundError: NotFoundError
 	NotFoundError: NotFoundError
 	ServiceNotConfiguredError: ServiceNotConfiguredError
 	ServiceNotConfiguredError: ServiceNotConfiguredError
@@ -71,3 +78,4 @@ module.exports = Errors =
 	UnsupportedExportRecordsError: UnsupportedExportRecordsError
 	UnsupportedExportRecordsError: UnsupportedExportRecordsError
 	V1HistoryNotSyncedError: V1HistoryNotSyncedError
 	V1HistoryNotSyncedError: V1HistoryNotSyncedError
 	ProjectHistoryDisabledError: ProjectHistoryDisabledError
 	ProjectHistoryDisabledError: ProjectHistoryDisabledError
+	V1ConnectionError: V1ConnectionError

+ 6 - 2
services/web/app/coffee/Features/Project/ProjectController.coffee

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

+ 5 - 1
services/web/app/coffee/Features/Subscription/V1SubscriptionManager.coffee

@@ -2,6 +2,7 @@ UserGetter = require "../User/UserGetter"
 request = require "request"
 request = require "request"
 settings = require "settings-sharelatex"
 settings = require "settings-sharelatex"
 logger = require "logger-sharelatex"
 logger = require "logger-sharelatex"
+{ V1ConnectionError } = require "../Errors/Errors"
 
 
 module.exports = V1SubscriptionManager =
 module.exports = V1SubscriptionManager =
 	# Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null
 	# Returned planCode = 'v1_pro' | 'v1_pro_plus' | 'v1_student' | 'v1_free' | null
@@ -58,7 +59,10 @@ module.exports = V1SubscriptionManager =
 				json: true,
 				json: true,
 				timeout: 5 * 1000
 				timeout: 5 * 1000
 			}, (error, response, body) ->
 			}, (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
 				if 200 <= response.statusCode < 300
 					return callback null, body
 					return callback null, body
 				else
 				else

+ 2 - 0
services/web/test/unit/coffee/Project/ProjectControllerTests.coffee

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