| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- mongojs = require("../../infrastructure/mongojs")
- metrics = require("metrics-sharelatex")
- db = mongojs.db
- ObjectId = mongojs.ObjectId
- async = require "async"
- Project = require("../../models/Project").Project
- logger = require("logger-sharelatex")
- LockManager = require("../../infrastructure/LockManager")
- module.exports = ProjectGetter =
- EXCLUDE_DEPTH: 8
- getProjectWithoutDocLines: (project_id, callback=(error, project) ->) ->
- excludes = {}
- for i in [1..ProjectGetter.EXCLUDE_DEPTH]
- excludes["rootFolder#{Array(i).join(".folders")}.docs.lines"] = 0
- ProjectGetter.getProject project_id, excludes, callback
- getProjectWithOnlyFolders: (project_id, callback=(error, project) ->) ->
- excludes = {}
- for i in [1..ProjectGetter.EXCLUDE_DEPTH]
- excludes["rootFolder#{Array(i).join(".folders")}.docs"] = 0
- excludes["rootFolder#{Array(i).join(".folders")}.fileRefs"] = 0
- ProjectGetter.getProject project_id, excludes, callback
- getProject: (project_id, projection, callback) ->
- if typeof(projection) == "function" && !callback?
- callback = projection
- projection = {}
- if !project_id?
- return callback(new Error("no project_id provided"))
- if typeof(projection) != "object"
- return callback(new Error("projection is not an object"))
- if projection?.rootFolder || Object.keys(projection).length == 0
- ProjectEntityMongoUpdateHandler = require './ProjectEntityMongoUpdateHandler'
- LockManager.runWithLock ProjectEntityMongoUpdateHandler.LOCK_NAMESPACE, project_id,
- (cb) -> ProjectGetter.getProjectWithoutLock project_id, projection, cb
- callback
- else
- ProjectGetter.getProjectWithoutLock project_id, projection, callback
- getProjectWithoutLock: (project_id, projection, callback) ->
- if typeof(projection) == "function" && !callback?
- callback = projection
- projection = {}
- if !project_id?
- return callback(new Error("no project_id provided"))
- if typeof(projection) != "object"
- return callback(new Error("projection is not an object"))
- if typeof project_id == "string"
- query = _id: ObjectId(project_id)
- else if project_id instanceof ObjectId
- query = _id: project_id
- else if project_id?.toString().length == 24 # sometimes mongoose ids are hard to identify, this will catch them
- query = _id: ObjectId(project_id.toString())
- else
- err = new Error("malformed get request")
- logger.log project_id:project_id, err:err, type:typeof(project_id), "malformed get request"
- return callback(err)
- db.projects.find query, projection, (err, project) ->
- if err?
- logger.err err:err, query:query, projection:projection, "error getting project"
- return callback(err)
- callback(null, project?[0])
- getProjectIdByReadAndWriteToken: (token, callback=(err, project_id)->) ->
- Project.findOne {'tokens.readAndWrite': token}, {_id: 1}, (err, project) ->
- return callback err if err?
- return callback() unless project?
- callback null, project._id
- findAllUsersProjects: (
- user_id,
- fields,
- callback = (error, projects={owned: [], readAndWrite: [], readOnly: [], tokenReadAndWrite: [], tokenReadOnly: []}) ->
- ) ->
- CollaboratorsHandler = require "../Collaborators/CollaboratorsHandler"
- Project.find {owner_ref: user_id}, fields, (error, ownedProjects) ->
- return callback(error) if error?
- CollaboratorsHandler.getProjectsUserIsMemberOf user_id, fields, (error, projects) ->
- return callback(error) if error?
- result = {
- owned: ownedProjects || [],
- readAndWrite: projects.readAndWrite || [],
- readOnly: projects.readOnly || [],
- tokenReadAndWrite: projects.tokenReadAndWrite || [],
- tokenReadOnly: projects.tokenReadOnly || []
- }
- callback null, result
- [
- 'getProject',
- 'getProjectWithoutDocLines'
- ].map (method) ->
- metrics.timeAsyncMethod(ProjectGetter, method, 'mongo.ProjectGetter', logger)
|