overleaf/services/web/app/coffee/Features/User/UserGetter.coffee
Tim Alby bbaca91e57 add UserGetter#getUserByMainEmail
Use only that method to find users by email.
2018-05-28 14:11:09 +02:00

55 lines
1.6 KiB
CoffeeScript

mongojs = require("../../infrastructure/mongojs")
metrics = require('metrics-sharelatex')
logger = require('logger-sharelatex')
db = mongojs.db
ObjectId = mongojs.ObjectId
module.exports = UserGetter =
getUser: (query, projection, callback = (error, user) ->) ->
if query?.email?
return callback(new Error("Don't use getUser to find user by email"), null)
if arguments.length == 2
callback = projection
projection = {}
if typeof query == "string"
try
query = _id: ObjectId(query)
catch e
return callback(null, null)
else if query instanceof ObjectId
query = _id: query
db.users.findOne query, projection, callback
getUserByMainEmail: (email, projection, callback = (error, user) ->) ->
email = email.trim()
if arguments.length == 2
callback = projection
projection = {}
db.users.findOne email: email, projection, callback
getUsers: (user_ids, projection, callback = (error, users) ->) ->
try
user_ids = user_ids.map (u) -> ObjectId(u.toString())
catch error
return callback error
db.users.find { _id: { $in: user_ids} }, projection, callback
getUserOrUserStubById: (user_id, projection, callback = (error, user) ->) ->
try
query = _id: ObjectId(user_id.toString())
catch e
return callback(new Error(e))
db.users.findOne query, projection, (error, user) ->
return callback(error) if error?
return callback(null, user) if user?
db.userstubs.findOne query, projection, callback
[
'getUser',
'getUserByMainEmail',
'getUsers',
'getUserOrUserStubById'
].map (method) ->
metrics.timeAsyncMethod UserGetter, method, 'mongo.UserGetter', logger