Skip to content

Commit 444f900

Browse files
committed
fix tests, some small improvements, update deps, bump version
1 parent f17114f commit 444f900

File tree

9 files changed

+61
-69
lines changed

9 files changed

+61
-69
lines changed

.travis.yml

+4-4
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@
22
sudo: required
33
language: node_js
44
node_js:
5-
- "8"
5+
- "12"
66
services:
77
- docker
88
before_install:
99
- docker pull mongo:3.4
1010
install:
1111
- npm install
1212
before_script:
13-
- docker run --name mongodb -d -p 27017:27017 mongo:3.4
13+
- docker run --name mongodb -d mongo:3.4
1414
- docker build --tag bouncer .
1515
- docker run --name testbouncer -d -p 8083:8083 --link mongodb:mongodb -e OAUTH_STARTUP_TEST=false -e BOUNCER_MONGODB=mongodb://mongodb:27017 -e DEBUG=* bouncer
16-
- sleep 5
16+
- sleep 3
1717
script:
1818
- DEBUG=* npm test
1919
after_failure:
20-
- sleep 5
20+
- sleep 3
2121
- docker logs testbouncer

config/config.js

-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ c.user.level = {};
7272
c.user.level.admin = 1000;
7373
c.user.level.editor = 500;
7474
c.user.level.known = 100;
75-
c.user.level.userEdit = c.user.level.editor;
7675
c.user.level.default = parseInt(env.BOUNCER_DEFAULT_USER_LEVEL) || c.user.level.known;
7776

7877
// Slack

lib/slack.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ exports.incomingAction = (req, res) => {
170170
debug('[action] %o', payload);
171171

172172
// immediately acknowledge, use response URL for updates
173-
res.status(200).send();
173+
res.sendStatus(200);
174174

175175
if (payload.token !== config.slack.verification_token) {
176176
debug('[action] Incorrect verification token, not processing this incoming action further!');

lib/user.js

+9-11
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,7 @@ exports.viewSingle = (req, res) => {
3636

3737
// show level and lastseen only to editor users and the user herself
3838
if (req.isAuthenticated()
39-
&& (req.user.level >= c.user.level.userEdit
40-
|| user.orcid === id)) {
39+
&& (req.user.level >= c.user.level || user.orcid === id)) {
4140
answer.level = user.level;
4241
answer.lastseen = user.lastseenAt;
4342
}
@@ -80,26 +79,25 @@ exports.view = (req, res) => {
8079

8180
exports.patchLevel = (req, res) => {
8281
var id = req.params.id;
82+
var newLevel = parseInt(req.query.level, 10);
83+
84+
if (isNaN(newLevel)) {
85+
res.status(400).send('{"error":"parameter \'level\' could not be parsed as an integer"}');
86+
return;
87+
}
8388

8489
// check user level
8590
if (!req.isAuthenticated()) {
8691
res.status(401).send('{"error":"user is not authenticated"}');
8792
return;
8893
}
89-
if (req.user.level < c.user.level.userEdit) {
90-
res.status(401).send('{"error":"user level does not allow edit"}');
94+
if (req.user.level < newLevel) {
95+
res.status(403).send('{"error":"user level does not allow edit"}');
9196
return;
9297
}
9398

9499
debug('User %s should be patched with %o by user %s (%s)', id, req.query, req.user.name, req.user.orcid);
95100

96-
var newLevel = parseInt(req.query.level, 10);
97-
98-
if (isNaN(newLevel)) {
99-
res.status(400).send('{"error":"parameter \'level\' could not be parsed as an integer"}');
100-
return;
101-
}
102-
103101
let update = { level: newLevel };
104102
User.findOneAndUpdate({ orcid: id }, update, { new: true, upsert: false }, function (err, user) {
105103
if (err) {

package-lock.json

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bouncer",
3-
"version": "0.14.0",
3+
"version": "0.15.0",
44
"description": "Node.js implementation of authentication features of the [o2r web api](http://o2r.info/o2r-web-api).",
55
"main": "index.js",
66
"scripts": {

test/pagination.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ const cookie_editor = 's:xWHihqZq6jEAObwbfowO5IwdnBxohM7z.VxqsRC5A1VqJVspChcxVPu
3131
describe('User list pagination', () => {
3232
describe('illegal pagination parameters', () => {
3333

34-
it('should response with HTTP 400 and valid JSON error when start is too small', (done) => {
34+
it('should respond with HTTP 400 and valid JSON error when start is too small', (done) => {
3535
request(global.test_host + '/api/v1/user?start=-1', (err, res, body) => {
3636
assert.ifError(err);
3737
assert.equal(res.statusCode, 400);
@@ -45,7 +45,7 @@ describe('User list pagination', () => {
4545
});
4646
});
4747

48-
it('should response with HTTP 400 and valid JSON error when start is text', (done) => {
48+
it('should respond with HTTP 400 and valid JSON error when start is text', (done) => {
4949
request(global.test_host + '/api/v1/user?start=start', (err, res, body) => {
5050
assert.ifError(err);
5151
assert.equal(res.statusCode, 400);

test/setup.js

+41-46
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
/* eslint-env mocha */
1919
const mongojs = require('mongojs');
20-
const sleep = require('sleep');
2120

2221
// test parameters for local session authentication directly via fixed database entries
2322
var orcid_o2r = '0000-0001-6021-1617';
@@ -36,19 +35,11 @@ const config = require('../config/config');
3635
global.test_host = env.TEST_HOST || 'http://localhost:' + config.net.port;
3736
console.log('Testing endpoint at ' + global.test_host);
3837

38+
var db = mongojs('localhost/muncher', ['users', 'sessions']);
39+
3940
before(function (done) {
4041
this.timeout(10000);
4142

42-
var db = mongojs('localhost/muncher', ['users', 'sessions']);
43-
44-
db.sessions.drop(function (err, doc) {
45-
//if (err) throw err;
46-
});
47-
db.users.drop(function (err, doc) {
48-
//if (err) throw err;
49-
});
50-
sleep.sleep(1);
51-
5243
var session_o2r = {
5344
'_id': sessionId_o2r,
5445
'session': {
@@ -65,9 +56,6 @@ before(function (done) {
6556
}
6657
}
6758
}
68-
db.sessions.save(session_o2r, function (err, doc) {
69-
if (err) throw err;
70-
});
7159
var session_plain = {
7260
'_id': sessionId_plain,
7361
'session': {
@@ -84,9 +72,6 @@ before(function (done) {
8472
}
8573
}
8674
}
87-
db.sessions.save(session_plain, function (err, doc) {
88-
if (err) throw err;
89-
});
9075
var session_uploader = {
9176
'_id': sessionId_uploader,
9277
'session': {
@@ -103,9 +88,6 @@ before(function (done) {
10388
}
10489
}
10590
}
106-
db.sessions.save(session_uploader, function (err, doc) {
107-
if (err) throw err;
108-
});
10991
var session_admin = {
11092
'_id': sessionId_admin,
11193
'session': {
@@ -122,9 +104,6 @@ before(function (done) {
122104
}
123105
}
124106
}
125-
db.sessions.save(session_admin, function (err, doc) {
126-
if (err) throw err;
127-
});
128107
var session_editor = {
129108
'_id': sessionId_editor,
130109
'session': {
@@ -141,63 +120,79 @@ before(function (done) {
141120
}
142121
}
143122
}
144-
db.sessions.save(session_editor, function (err, doc) {
145-
if (err) throw err;
146-
});
147123

148124
var o2ruser = {
149125
'_id': '57dc171b8760d15dc1864044',
150126
'orcid': orcid_o2r,
151127
'level': 100,
152128
'name': 'o2r-testuser'
153129
};
154-
db.users.save(o2ruser, function (err, doc) {
155-
if (err) throw err;
156-
});
157-
158130
var plainuser = {
159131
'_id': '57b55ee700aee212007ac27f',
160132
'orcid': orcid_plain,
161133
'lastseenAt': new Date(),
162134
'level': 0,
163135
'name': 'plain-testuser'
164136
};
165-
db.users.save(plainuser, function (err, doc) {
166-
if (err) throw err;
167-
});
168-
169137
var uploaderuser = {
170138
'_id': '58a2e0ea1d68491233b925e8',
171139
'orcid': orcid_uploader,
172140
'lastseenAt': new Date(),
173141
'level': 100,
174142
'name': 'uploader'
175143
};
176-
db.users.save(uploaderuser, function (err, doc) {
177-
if (err) throw err;
178-
});
179-
180144
var adminuser = {
181145
'_id': '5887181ebd95ff5ae8febb88',
182146
'orcid': orcid_admin,
183147
'level': 1000,
184148
'name': 'admin'
185149
};
186-
db.users.save(adminuser, function (err, doc) {
187-
if (err) throw err;
188-
});
189-
190150
var editoruser = {
191151
'_id': '598438375a2a970bbd4bf4fe',
192152
'orcid': orcid_editor,
193153
'level': 500,
194154
'name': 'editor'
195155
};
196-
db.users.save(editoruser, function (err, doc) {
197-
if (err) throw err;
156+
157+
db.sessions.drop(function (err, doc) {
158+
db.users.drop(function (err, doc) {
159+
db.sessions.save(session_o2r, function (err, doc) {
160+
if (err) throw err;
161+
db.sessions.save(session_plain, function (err, doc) {
162+
if (err) throw err;
163+
db.sessions.save(session_uploader, function (err, doc) {
164+
if (err) throw err;
165+
db.sessions.save(session_admin, function (err, doc) {
166+
if (err) throw err;
167+
db.sessions.save(session_editor, function (err, doc) {
168+
if (err) throw err;
169+
170+
db.users.save(o2ruser, function (err, doc) {
171+
if (err) throw err;
172+
db.users.save(uploaderuser, function (err, doc) {
173+
if (err) throw err;
174+
db.users.save(plainuser, function (err, doc) {
175+
if (err) throw err;
176+
db.users.save(adminuser, function (err, doc) {
177+
if (err) throw err;
178+
db.users.save(editoruser, function (err, doc) {
179+
if (err) throw err;
180+
done();
181+
});
182+
});
183+
});
184+
});
185+
});
186+
});
187+
});
188+
});
189+
});
190+
});
191+
});
198192
});
193+
});
199194

200-
sleep.sleep(1);
195+
after(function (done) {
201196
db.close();
202197
done();
203-
});
198+
});

test/user-level-change.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -137,10 +137,10 @@ describe('Editing user levels', () => {
137137
let ck = request.cookie('connect.sid=' + cookie_plain);
138138
j.setCookie(ck, global.test_host);
139139

140-
it('should response with HTTP 401', (done) => {
140+
it('should response with HTTP 403', (done) => {
141141
request({ url: user_url + '?level=' + 9999, jar: j, method: "PATCH" }, (err, res) => {
142142
assert.ifError(err);
143-
assert.equal(res.statusCode, 401);
143+
assert.equal(res.statusCode, 403);
144144
done();
145145
});
146146
});

0 commit comments

Comments
 (0)