From 3c3ce2010a53e0d98263ff3e084af31bff7822cb Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Fri, 4 May 2018 10:45:13 +0100 Subject: [PATCH] Add endpoint to list entities within a project --- .../Features/Project/ProjectController.coffee | 22 +++++++++++++++++-- services/web/app/coffee/router.coffee | 5 ++++- .../ide/file-tree/FileTreeManager.coffee | 5 +++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/services/web/app/coffee/Features/Project/ProjectController.coffee b/services/web/app/coffee/Features/Project/ProjectController.coffee index 19374a1975..3d1d11da71 100644 --- a/services/web/app/coffee/Features/Project/ProjectController.coffee +++ b/services/web/app/coffee/Features/Project/ProjectController.coffee @@ -25,6 +25,7 @@ Sources = require "../Authorization/Sources" TokenAccessHandler = require '../TokenAccess/TokenAccessHandler' CollaboratorsHandler = require '../Collaborators/CollaboratorsHandler' Modules = require '../../infrastructure/Modules' +ProjectEntityHandler = require './ProjectEntityHandler' crypto = require 'crypto' module.exports = ProjectController = @@ -138,9 +139,8 @@ module.exports = ProjectController = return next(err) if err? res.sendStatus 200 - projectsJson: (req, res, next) -> + userProjectsJson: (req, res, next) -> user_id = AuthenticationController.getLoggedInUserId(req) - ProjectGetter.findAllUsersProjects user_id, 'name lastUpdated publicAccesLevel archived owner_ref tokens', (err, projects) -> return next(err) if err? @@ -151,6 +151,24 @@ module.exports = ProjectController = res.json({projects: projects}) + projectEntitiesJson: (req, res, next) -> + user_id = AuthenticationController.getLoggedInUserId(req) + project_id = req.params.Project_id + AuthorizationManager.canUserReadProject user_id, project_id, + null, (err, canRead) -> + return next(err) if err? + return res.status(403) if !canRead + ProjectGetter.getProject project_id, (err, project) -> + return next(err) if err? + ProjectEntityHandler.getAllEntitiesFromProject project, (err, docs, files) -> + return next(err) if err? + entities = docs.concat(files) + .map (e) -> { + path: e.path, + type: if e.doc? then 'doc' else 'file' + } + res.json({entities: entities}) + projectListPage: (req, res, next)-> timer = new metrics.Timer("project-list") user_id = AuthenticationController.getLoggedInUserId(req) diff --git a/services/web/app/coffee/router.coffee b/services/web/app/coffee/router.coffee index 83fae46131..6d94aa65b1 100644 --- a/services/web/app/coffee/router.coffee +++ b/services/web/app/coffee/router.coffee @@ -118,7 +118,10 @@ module.exports = class Router webRouter.get '/user/personal_info', AuthenticationController.requireLogin(), UserInfoController.getLoggedInUsersPersonalInfo privateApiRouter.get '/user/:user_id/personal_info', AuthenticationController.httpAuth, UserInfoController.getPersonalInfo - webRouter.get '/user/projects', AuthenticationController.requireLogin(), ProjectController.projectsJson + # TODO: check this is the right router for these routes + webRouter.get '/user/projects', AuthenticationController.requireLogin(), ProjectController.userProjectsJson + webRouter.get '/project/:Project_id/entities', AuthenticationController.requireLogin(), ProjectController.projectEntitiesJson + webRouter.get '/project', AuthenticationController.requireLogin(), ProjectController.projectListPage webRouter.post '/project/new', AuthenticationController.requireLogin(), ProjectController.newProject diff --git a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee index a5784c57fd..01fa211b1f 100644 --- a/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee +++ b/services/web/public/coffee/ide/file-tree/FileTreeManager.coffee @@ -46,6 +46,11 @@ define [ _csrf: window.csrfToken } + window._getProjectEntities = (project_id) => + @ide.$http.get "/project/#{project_id}/entities", { + _csrf: window.csrfToken + } + _bindToSocketEvents: () -> @ide.socket.on "reciveNewDoc", (parent_folder_id, doc) => parent_folder = @findEntityById(parent_folder_id) or @$scope.rootFolder