Skip to content

Commit c4ed606

Browse files
committed
Finish v0.8.12
2 parents 6cc9317 + 330e4bd commit c4ed606

File tree

16 files changed

+184
-148
lines changed

16 files changed

+184
-148
lines changed

.travis.yml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
language: node_js
22
node_js:
33
- "0.10"
4-
# - "0.11"
5-
# - "0.12"
6-
# - "iojs"
4+
- "0.12"
5+
- "iojs"
76

87
services:
98
- redis-server
@@ -18,12 +17,10 @@ branches:
1817
only:
1918
- master
2019
- develop
21-
#matrix:
22-
# fast_finish: true
23-
# allow_failures:
24-
# - node_js: "0.11"
25-
# - node_js: "0.12"
26-
# - node_js: "iojs"
20+
matrix:
21+
fast_finish: true
22+
allow_failures:
23+
- node_js: "iojs"
2724
before_install:
2825
- wget http://apache.claz.org/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
2926
- tar -zxvf zookeeper*tar.gz

config/default.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
version: 0.2.8
1+
version: 0.3.8
22
interfaces:
33
webserver:
44
enabled: true
@@ -74,6 +74,7 @@ authentication:
7474
guest: 60
7575
user: 9999999999
7676
force404: false
77+
requireroles: false
7778
#sdk:
7879
# url: https://raw.githubusercontent.com/joola/joola.sdk/feature/%2376/bin/joola.js
7980
query:

lib/common/index.js

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ common.uuid = function (length) {
6767

6868
common.stringify = function (obj, callback) {
6969
callback = callback || function () {
70-
};
70+
};
7171
return callback(null, stringify.stringify(obj));
7272
};
7373

@@ -315,5 +315,14 @@ common.hashPassword = function (plainPassword, salt) {
315315
};
316316

317317
common.inspect = function (obj) {
318-
return require('util').inspect(obj, {depth: null, colors: true});
319-
};
318+
return require('util').inspect(obj, {depth: null, colors: true});
319+
};
320+
321+
common.cleanupArray = function (array) {
322+
var clean = [];
323+
array.forEach(function (item) {
324+
if (item)
325+
clean.push(item);
326+
});
327+
return clean;
328+
};

lib/common/watchers.js

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,8 @@
1313
var
1414
joola = require('../joola'),
1515
cluster = require('cluster'),
16-
usage = require('usage'),
1716
os = require('os');
1817

19-
//check for any event loop block
20-
function watch_eventloop() {
21-
var lastTime = new Date().getTime();
22-
setInterval(function () {
23-
var delta = new Date().getTime() - lastTime;
24-
if (delta > 1500) {
25-
joola.stats.emit({event: 'eventlooplocks', eventlooplocks: 1});
26-
joola.logger.warn('Blocked event-loop, ' + delta.toString() + 'ms, since: ' + new Date(lastTime).format('hh:nn:ss.fff'));
27-
joola.events.emit('elb', delta);
28-
}
29-
lastTime = new Date().getTime();
30-
}, 1000);
31-
}
32-
3318
function watch_state() {
3419
var lastStatus = 'failure';
3520
joola.dispatch.on('nodes:state:change', function (channel, message) {
@@ -83,23 +68,6 @@ function node_ping() {
8368
}, 1000);
8469
}
8570

86-
/* istanbul ignore next */
87-
function watch_usage() {
88-
var pid = process.pid;
89-
var options = { keepHistory: true };
90-
var run = function () {
91-
usage.lookup(pid, options, function (err, result) {
92-
/* istanbul ignore if */
93-
if (err)
94-
return;
95-
result.cpuInfo.cpuTime = result.cpuInfo.cpuTime || null;
96-
joola.events.emit('usage', result);
97-
joola.stats.emit(joola.common.extend({event: 'nodeusage'}, result));
98-
});
99-
};
100-
setInterval(run, 60000);
101-
}
102-
10371
function watch_eps() {
10472
var template = {
10573
eps: 0,
@@ -118,10 +86,8 @@ function watch_eps() {
11886
}
11987

12088
joola.events.on('datastore:ready', function () {
121-
watch_eventloop();
12289
node_ping();
12390
watch_state();
124-
watch_usage();
12591
});
12692

12793
watch_eps();

lib/dispatch/canvases.js

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
var
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 = {
159181
exports.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');

lib/dispatch/dimensions.js

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,23 @@ exports.list = {
6161
}
6262

6363
callback = callback || function () {
64+
};
65+
66+
var ensureRole = function (dimensions) {
67+
var clean = [];
68+
dimensions.forEach(function (d) {
69+
var hasRole = false;
70+
if (joola.config.get('authentication:requireroles') === false)
71+
hasRole = ['anonymous'];
72+
else
73+
hasRole = _.intersection(context.user.roles, d.roles);
74+
if (hasRole.length > 0)
75+
clean.push(d);
76+
});
77+
return clean;
6478
};
6579

80+
6681
if (context.user.workspace !== workspace && context.user.permissions.indexOf('superuser') === -1) {
6782
var err = new Error('Forbidden');
6883
err.code = 403;
@@ -74,7 +89,7 @@ exports.list = {
7489
if (err)
7590
return callback(err);
7691

77-
return callback(null, joola.common.obj2array(_collection.dimensions));
92+
return callback(null, ensureRole(joola.common.obj2array(_collection.dimensions)));
7893
});
7994
}
8095
else {
@@ -105,7 +120,7 @@ exports.list = {
105120
results.forEach(function (result) {
106121
dimensions = dimensions.concat(result);
107122
});
108-
return callback(null, dimensions);
123+
return callback(null, ensureRole(dimensions));
109124
});
110125
});
111126
}
@@ -145,7 +160,7 @@ exports.get = {
145160
},
146161
run: function (context, workspace, collection, key, callback) {
147162
callback = callback || function () {
148-
};
163+
};
149164

150165
if (context.user.workspace !== workspace && context.user.permissions.indexOf('superuser') === -1) {
151166
var err = new Error('Forbidden');
@@ -164,7 +179,19 @@ exports.get = {
164179
if (!result || typeof result === 'undefined' || result === null || result.length === 0)
165180
return callback(new Error('dimension [' + key + '] does not exist.'));
166181

167-
return callback(null, result[0]);
182+
result = result[0];
183+
var hasRole = false;
184+
if (joola.config.get('authentication:requireroles') === false)
185+
hasRole = ['anonymous'];
186+
else
187+
hasRole = _.intersection(context.user.roles, result.roles);
188+
if (hasRole.length > 0)
189+
return callback(null, result);
190+
else {
191+
var directaccesserr = new Error('Forbidden');
192+
directaccesserr.code = 403;
193+
return callback(directaccesserr );
194+
}
168195
});
169196
}
170197
};
@@ -199,15 +226,15 @@ exports.get = {
199226
exports.add = {
200227
name: "/dimensions/add",
201228
description: "I add a new dimension",
202-
inputs: ['workspace', 'collection', 'dimension' ],
229+
inputs: ['workspace', 'collection', 'dimension'],
203230
_outputExample: {},
204231
_permission: ['dimensions:add'],
205232
_dispatch: {
206233
message: 'dimensions:add'
207234
},
208235
run: function (context, workspace, collection, dimension, callback) {
209236
callback = callback || function () {
210-
};
237+
};
211238

212239
if (context.user.workspace !== workspace && context.user.permissions.indexOf('superuser') === -1) {
213240
var err = new Error('Forbidden');
@@ -276,7 +303,7 @@ exports.patch = {
276303
},
277304
run: function (context, workspace, collection, dimension, payload, callback) {
278305
callback = callback || function () {
279-
};
306+
};
280307

281308
if (context.user.workspace !== workspace && context.user.permissions.indexOf('superuser') === -1) {
282309
var err = new Error('Forbidden');
@@ -343,7 +370,7 @@ exports.delete = {
343370
},
344371
run: function (context, workspace, collection, dimension, callback) {
345372
callback = callback || function () {
346-
};
373+
};
347374

348375
if (context.user.workspace !== workspace && context.user.permissions.indexOf('superuser') === -1) {
349376
var err = new Error('Forbidden');

0 commit comments

Comments
 (0)