Przeglądaj źródła

Move email parsing code to Helpers/EmailHelpers

Shane Kilkelly 10 lat temu
rodzic
commit
13fe000176

+ 6 - 6
services/web/app/coffee/Features/Collaborators/CollaboratorsController.coffee

@@ -4,7 +4,8 @@ ProjectEditorHandler = require "../Project/ProjectEditorHandler"
 EditorRealTimeController = require "../Editor/EditorRealTimeController"
 LimitationsManager = require "../Subscription/LimitationsManager"
 UserGetter = require "../User/UserGetter"
-mimelib = require("mimelib")
+EmailHelpers = require "../Helpers/EmailHelpers"
+
 
 module.exports = CollaboratorsController =
 	addUserToProject: (req, res, next) ->
@@ -16,11 +17,11 @@ module.exports = CollaboratorsController =
 				return res.json { user: false }
 			else
 				{email, privileges} = req.body
-				
-				email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase()
+
+				email = EmailHelpers.parseEmail(email)
 				if !email? or email == ""
 					return res.status(400).send("invalid email address")
-					
+
 				adding_user_id = req.session?.user?._id
 				CollaboratorsHandler.addEmailToProject project_id, adding_user_id, email, privileges, (error, user_id) =>
 					return next(error) if error?
@@ -36,7 +37,7 @@ module.exports = CollaboratorsController =
 		CollaboratorsController._removeUserIdFromProject project_id, user_id, (error) ->
 			return next(error) if error?
 			res.sendStatus 204
-	
+
 	removeSelfFromProject: (req, res, next = (error) ->) ->
 		project_id = req.params.Project_id
 		user_id    = req.session?.user?._id
@@ -49,4 +50,3 @@ module.exports = CollaboratorsController =
 			return callback(error) if error?
 			EditorRealTimeController.emitToRoom(project_id, 'userRemovedFromProject', user_id)
 			callback()
-

+ 14 - 13
services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee

@@ -1,6 +1,5 @@
 UserCreator = require('../User/UserCreator')
 Project = require("../../models/Project").Project
-mimelib = require("mimelib")
 logger = require('logger-sharelatex')
 UserGetter = require "../User/UserGetter"
 ContactManager = require "../Contacts/ContactManager"
@@ -8,8 +7,11 @@ CollaboratorsEmailHandler = require "./CollaboratorsEmailHandler"
 async = require "async"
 PrivilegeLevels = require "../Authorization/PrivilegeLevels"
 Errors = require "../Errors/Errors"
+EmailHelpers = require "../Helpers/EmailHelpers"
+
 
 module.exports = CollaboratorsHandler =
+
 	getMemberIdsWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
 		Project.findOne { _id: project_id }, { owner_ref: 1, collaberator_refs: 1, readOnly_refs: 1 }, (error, project) ->
 			return callback(error) if error?
@@ -21,12 +23,12 @@ module.exports = CollaboratorsHandler =
 			for member_id in project.collaberator_refs or []
 				members.push { id: member_id.toString(), privilegeLevel: PrivilegeLevels.READ_AND_WRITE }
 			return callback null, members
-	
+
 	getMemberIds: (project_id, callback = (error, member_ids) ->) ->
 		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members) ->
 			return callback(error) if error?
 			return callback null, members.map (m) -> m.id
-	
+
 	getMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
 		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) ->
 			return callback(error) if error?
@@ -41,7 +43,7 @@ module.exports = CollaboratorsHandler =
 				(error) ->
 					return callback(error) if error?
 					callback null, result
-	
+
 	getMemberIdPrivilegeLevel: (user_id, project_id, callback = (error, privilegeLevel) ->) ->
 		# In future if the schema changes and getting all member ids is more expensive (multiple documents)
 		# then optimise this.
@@ -51,12 +53,12 @@ module.exports = CollaboratorsHandler =
 				if member.id == user_id?.toString()
 					return callback null, member.privilegeLevel
 			return callback null, PrivilegeLevels.NONE
-	
+
 	getMemberCount: (project_id, callback = (error, count) ->) ->
 		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members) ->
 			return callback(error) if error?
 			return callback null, (members or []).length
-		
+
 	getCollaboratorCount: (project_id, callback = (error, count) ->) ->
 		CollaboratorsHandler.getMemberCount project_id, (error, count) ->
 			return callback(error) if error?
@@ -69,14 +71,14 @@ module.exports = CollaboratorsHandler =
 				if member.id.toString() == user_id.toString()
 					return callback null, true, member.privilegeLevel
 			return callback null, false, null
-			
+
 	getProjectsUserIsCollaboratorOf: (user_id, fields, callback = (error, readAndWriteProjects, readOnlyProjects) ->) ->
 		Project.find {collaberator_refs:user_id}, fields, (err, readAndWriteProjects)=>
 			return callback(err) if err?
 			Project.find {readOnly_refs:user_id}, fields, (err, readOnlyProjects)=>
 				return callback(err) if err?
 				callback(null, readAndWriteProjects, readOnlyProjects)
-		
+
 	removeUserFromProject: (project_id, user_id, callback = (error) ->)->
 		logger.log user_id: user_id, project_id: project_id, "removing user"
 		conditions = _id:project_id
@@ -86,7 +88,7 @@ module.exports = CollaboratorsHandler =
 			if err?
 				logger.error err: err, "problem removing user from project collaberators"
 			callback(err)
-	
+
 	removeUserFromAllProjets: (user_id, callback = (error) ->) ->
 		CollaboratorsHandler.getProjectsUserIsCollaboratorOf user_id, { _id: 1 }, (error, readAndWriteProjects = [], readOnlyProjects = []) ->
 			return callback(error) if error?
@@ -98,10 +100,9 @@ module.exports = CollaboratorsHandler =
 						return cb() if !project?
 						CollaboratorsHandler.removeUserFromProject project._id, user_id, cb
 			async.series jobs, callback
-	
+
 	addEmailToProject: (project_id, adding_user_id, unparsed_email, privilegeLevel, callback = (error, user) ->) ->
-		emails = mimelib.parseAddresses(unparsed_email)
-		email = emails[0]?.address?.toLowerCase()
+		email = EmailHelpers.parseEmail(unparsed_email)
 		if !email? or email == ""
 			return callback(new Error("no valid email provided: '#{unparsed_email}'"))
 		UserCreator.getUserOrCreateHoldingAccount email, (error, user) ->
@@ -118,7 +119,7 @@ module.exports = CollaboratorsHandler =
 			existing_users = existing_users.map (u) -> u.toString()
 			if existing_users.indexOf(user_id.toString()) > -1
 				return callback null # User already in Project
-				
+
 			if privilegeLevel == PrivilegeLevels.READ_AND_WRITE
 				level = {"collaberator_refs":user_id}
 				logger.log {privileges: "readAndWrite", user_id, project_id}, "adding user"

+ 3 - 2
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteController.coffee

@@ -3,8 +3,9 @@ LimitationsManager = require "../Subscription/LimitationsManager"
 UserGetter = require "../User/UserGetter"
 Project = require("../../models/Project").Project
 CollaboratorsInviteHandler = require('./CollaboratorsInviteHandler')
-mimelib = require("mimelib")
 logger = require('logger-sharelatex')
+EmailHelpers = require "../Helpers/EmailHelpers"
+
 
 module.exports = CollaboratorsInviteController =
 
@@ -28,7 +29,7 @@ module.exports = CollaboratorsInviteController =
 				logger.log {projectId, email, sendingUserId}, "not allowed to invite more users to project"
 				return res.json {invite: null}
 			{email, privileges} = req.body
-			email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase()
+			email = EmailHelpers.parseEmail(email)
 			if !email? or email == ""
 				logger.log {projectId, email, sendingUserId}, "invalid email address"
 				return res.sendStatus(400)

+ 0 - 1
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteHandler.coffee

@@ -1,5 +1,4 @@
 ProjectInvite = require("../../models/ProjectInvite").ProjectInvite
-mimelib = require("mimelib")
 logger = require('logger-sharelatex')
 CollaboratorsEmailHandler = require "./CollaboratorsEmailHandler"
 CollaboratorsHandler = require "./CollaboratorsHandler"

+ 11 - 0
services/web/app/coffee/Features/Helpers/EmailHelpers.coffee

@@ -0,0 +1,11 @@
+mimelib = require("mimelib")
+
+
+module.exports = EmailHelpers =
+
+	parseEmail: (email) ->
+			email = mimelib.parseAddresses(email or "")[0]?.address?.toLowerCase()
+			if !email? or email == ""
+				return null
+			else
+				return email