2121var
2222 joola = require ( '../joola' ) ,
2323 _ = require ( 'underscore' ) ,
24+ async = require ( 'async' ) ,
2425 router = require ( '../webserver/routes/index' ) ,
2526 Proto = require ( './prototypes/canvas' ) ;
2627
@@ -55,7 +56,7 @@ exports.list = {
5556 } ,
5657 run : function ( context , workspace , callback ) {
5758 callback = callback || function ( ) {
58- } ;
59+ } ;
5960
6061 if ( context . user . workspace !== workspace && context . user . permissions . indexOf ( 'superuser' ) === - 1 ) {
6162 var err = new Error ( 'Forbidden' ) ;
@@ -66,8 +67,19 @@ exports.list = {
6667 joola . dispatch . workspaces . get ( context , workspace , function ( err , wrk ) {
6768 if ( err )
6869 return callback ( err ) ;
69-
70- return callback ( null , joola . common . obj2array ( wrk . canvases ) ) ;
70+
71+ return async . map ( Object . keys ( wrk . canvases ) , function ( canvas , cb ) {
72+ canvas = wrk . canvases [ canvas ] ;
73+ return exports . get . run ( context , workspace , canvas . key , function ( err , _canvas ) {
74+ if ( _canvas )
75+ return cb ( null , _canvas ) ;
76+ else
77+ return cb ( null ) ;
78+ } ) ;
79+ } , function ( err , result ) {
80+ result = joola . common . cleanupArray ( result ) ;
81+ return callback ( null , result ) ;
82+ } ) ;
7183 } ) ;
7284 }
7385} ;
@@ -105,7 +117,7 @@ exports.get = {
105117 } ,
106118 run : function ( context , workspace , key , callback ) {
107119 callback = callback || function ( ) {
108- } ;
120+ } ;
109121
110122 if ( context . user . workspace !== workspace && context . user . permissions . indexOf ( 'superuser' ) === - 1 ) {
111123 var err = new Error ( 'Forbidden' ) ;
@@ -124,7 +136,17 @@ exports.get = {
124136 if ( ! result || typeof result === 'undefined' || result === null || result . length === 0 )
125137 return callback ( new Error ( 'canvas [' + key + '] does not exist.' ) ) ;
126138
127- return callback ( null , result [ 0 ] ) ;
139+ result = result [ 0 ] ;
140+ var hasRole = false ;
141+ if ( joola . config . get ( 'authentication:requireroles' ) === false )
142+ hasRole = [ 'anonymous' ] ;
143+ else
144+ hasRole = _ . intersection ( context . user . roles , result . roles ) ;
145+
146+ if ( hasRole . length > 0 )
147+ return callback ( null , result ) ;
148+ else
149+ return callback ( null ) ;
128150 } ) ;
129151 }
130152} ;
@@ -159,15 +181,15 @@ exports.get = {
159181exports . add = {
160182 name : "/canvases/add" ,
161183 description : "I add a new canvas" ,
162- inputs : [ 'workspace' , 'canvas' ] ,
184+ inputs : [ 'workspace' , 'canvas' ] ,
163185 _outputExample : { } ,
164186 _permission : [ 'canvases:add' ] ,
165187 _dispatch : {
166188 message : 'canvases:add'
167189 } ,
168190 run : function ( context , workspace , canvas , callback ) {
169191 callback = callback || function ( ) {
170- } ;
192+ } ;
171193
172194 if ( context . user . workspace !== workspace && context . user . permissions . indexOf ( 'superuser' ) === - 1 ) {
173195 var err = new Error ( 'Forbidden' ) ;
@@ -236,7 +258,7 @@ exports.patch = {
236258 } ,
237259 run : function ( context , workspace , canvas , payload , callback ) {
238260 callback = callback || function ( ) {
239- } ;
261+ } ;
240262
241263 if ( context . user . workspace !== workspace && context . user . permissions . indexOf ( 'superuser' ) === - 1 ) {
242264 var err = new Error ( 'Forbidden' ) ;
@@ -303,7 +325,7 @@ exports.delete = {
303325 } ,
304326 run : function ( context , workspace , canvas , callback ) {
305327 callback = callback || function ( ) {
306- } ;
328+ } ;
307329
308330 if ( context . user . workspace !== workspace && context . user . permissions . indexOf ( 'superuser' ) === - 1 ) {
309331 var err = new Error ( 'Forbidden' ) ;
0 commit comments