Просмотр исходного кода

Render editor for token access, stub out ui changes

Shane Kilkelly 9 лет назад
Родитель
Сommit
9810f63245

+ 3 - 2
services/web/app/coffee/Features/Project/ProjectDetailsHandler.coffee

@@ -64,6 +64,7 @@ module.exports = ProjectDetailsHandler =
 
 	setPublicAccessLevel : (project_id, newAccessLevel, callback = ->)->
 		logger.log project_id: project_id, level: newAccessLevel, "set public access level"
-		if project_id? && newAccessLevel? and _.include [PublicAccessLevels.READ_ONLY, PublicAccessLevels.READ_AND_WRITE, PublicAccessLevels.PRIVATE], newAccessLevel
+		# TODO: remove the read-only and read-and-write items from here
+		if project_id? && newAccessLevel? and _.include [PublicAccessLevels.READ_ONLY, PublicAccessLevels.READ_AND_WRITE, PublicAccessLevels.PRIVATE, PublicAccessLevels.TOKEN_BASED], newAccessLevel
 			Project.update {_id:project_id},{publicAccesLevel:newAccessLevel}, (err)->
-				callback()
+				callback()

+ 1 - 0
services/web/app/coffee/Features/Project/ProjectEditorHandler.coffee

@@ -18,6 +18,7 @@ module.exports = ProjectEditorHandler =
 			deletedDocs: project.deletedDocs
 			members:     []
 			invites:     invites
+			tokens:      project.tokens
 
 		if !result.invites?
 			result.invites = []

+ 10 - 5
services/web/app/coffee/Features/TokenAccess/TokenAccessController.coffee

@@ -1,9 +1,11 @@
 ProjectGetter = require "../Project/ProjectGetter"
+ProjectController = require "../Project/ProjectController"
 ProjectEditorHandler = require "../Project/ProjectEditorHandler"
 UserGetter = require "../User/UserGetter"
 AuthenticationController = require '../Authentication/AuthenticationController'
 logger = require 'logger-sharelatex'
 TokenAccessHandler = require './TokenAccessHandler'
+Errors = require '../Errors/Errors'
 
 
 module.exports = TokenAccessController =
@@ -20,7 +22,7 @@ module.exports = TokenAccessController =
 			if !project?
 				logger.log {token, userId},
 					"no project found for readAndWrite token"
-				return res.sendStatus(404)
+				return next(new Errors.NotFoundError())
 			logger.log {userId, projectId: project._id},
 				"adding user to project with readAndWrite token"
 			TokenAccessHandler.addReadAndWriteUserToProject userId, project._id, (err) ->
@@ -28,7 +30,8 @@ module.exports = TokenAccessController =
 					logger.err {err, token, userId, projectId: project._id},
 						"error adding user to project with readAndWrite token"
 					return next(err)
-				return res.redirect(307, "/project/#{project._id}")
+				req.params.Project_id = project._id.toString()
+				return ProjectController.loadEditor(req, res, next)
 
 	readOnlyToken: (req, res, next) ->
 		userId = AuthenticationController.getLoggedInUserId(req)
@@ -42,12 +45,13 @@ module.exports = TokenAccessController =
 			if !project?
 				logger.log {token, userId},
 					"no project found for readAndWrite token"
-				return res.sendStatus(404)
+				return next(new Errors.NotFoundError())
 			if !userId?
 				logger.log {userId, projectId: project._id},
 					"adding anonymous user to project with readOnly token"
 				TokenAccessHandler.grantSessionReadOnlyTokenAccess(req, project._id, token)
-				return res.redirect(307, "/project/#{project._id}")
+				req.params.Project_id = project._id.toString()
+				return ProjectController.loadEditor(req, res, next)
 			else
 				logger.log {userId, projectId: project._id},
 					"adding user to project with readOnly token"
@@ -56,6 +60,7 @@ module.exports = TokenAccessController =
 						logger.err {err, token, userId, projectId: project._id},
 							"error adding user to project with readAndWrite token"
 						return next(err)
-					res.redirect(307, "/project/#{project._id}")
+					req.params.Project_id = project._id.toString()
+					return ProjectController.loadEditor(req, res, next)
 
 

+ 37 - 3
services/web/app/views/project/editor/share.pug

@@ -8,15 +8,30 @@ script(type='text/ng-template', id='shareProjectModalTemplate')
 		h3 #{translate("share_project")}
 	.modal-body.modal-body-share
 		.container-fluid
+
+			//- Private
 			.row.public-access-level(ng-show="project.publicAccesLevel == 'private'")
 				.col-xs-12.text-center
 					| #{translate("this_project_is_private")}
 					|   
 					a(
 						href
-						ng-click="openMakePublicModal()"
-					) #{translate("make_public")}
-			.row.public-access-level(ng-show="project.publicAccesLevel != 'private'")
+						ng-click="openMakeTokenBasedModal()"
+					) #{translate("make_token_based")}
+
+			//- Token-based access
+			.row.public-access-level(ng-show="project.publicAccesLevel == 'tokenBased'")
+				.col-xs-12.text-center
+					strong
+						| #{translate("this_project_is_token_based_access")}
+						|   
+					a(
+						href
+						ng-click="openMakePrivateModal()"
+					) #{translate("make_private")}
+
+			//- legacy public-access
+			.row.public-access-level(ng-show="project.publicAccesLevel == 'readAndWrite' || project.publicAccesLevel == 'readOnly'")
 				.col-xs-12.text-center
 					strong(ng-if="project.publicAccesLevel == 'readAndWrite'") #{translate("this_project_is_public")}
 					strong(ng-if="project.publicAccesLevel == 'readOnly'") #{translate("this_project_is_public_read_only")}
@@ -25,6 +40,7 @@ script(type='text/ng-template', id='shareProjectModalTemplate')
 						href
 						ng-click="openMakePrivateModal()"
 					) #{translate("make_private")}
+
 			.row.project-member
 				.col-xs-8 {{ project.owner.email }}
 				.text-left(
@@ -180,6 +196,24 @@ script(type="text/ng-template", id="makePublicModalTemplate")
 			ng-click="makePublic()"
 		) #{translate("make_public")}
 
+script(type="text/ng-template", id="makeTokenBasedModalTemplate")
+	.modal-header
+		button.close(
+			type="button"
+			data-dismiss="modal"
+			ng-click="cancel()"
+		) ×
+		h3 #{translate("make_project_token_based")}?
+	.modal-body.modal-body-share
+		p #{translate("make_project_token_based_consequences")}
+	.modal-footer
+		button.btn.btn-default(
+			ng-click="cancel()"
+		) #{translate("cancel")}
+		button.btn.btn-info(
+			ng-click="makeTokenBased()"
+		) #{translate("make_token_based")}
+
 script(type="text/ng-template", id="makePrivateModalTemplate")
 	.modal-header
 		button.close(

+ 18 - 0
services/web/public/coffee/ide/share/controllers/ShareProjectModalController.coffee

@@ -192,6 +192,13 @@ define [
 				scope: $scope
 			}
 
+		$scope.openMakeTokenBasedModal = () ->
+			$modal.open {
+				templateUrl: "makeTokenBasedModalTemplate"
+				controller:  "MakeTokenBasedModalController"
+				scope: $scope
+			}
+
 		$scope.done = () ->
 			$modalInstance.close()
 
@@ -212,6 +219,17 @@ define [
 			$modalInstance.dismiss()
 	]
 
+	App.controller "MakeTokenBasedModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
+
+		$scope.makeTokenBased = () ->
+			$scope.project.publicAccesLevel = "tokenBased"
+			settings.saveProjectAdminSettings({publicAccessLevel: "tokenBased"})
+			$modalInstance.close()
+
+		$scope.cancel = () ->
+			$modalInstance.dismiss()
+	]
+
 	App.controller "MakePrivateModalController", ["$scope", "$modalInstance", "settings", ($scope, $modalInstance, settings) ->
 		$scope.makePrivate = () ->
 			$scope.project.publicAccesLevel = "private"