Skip to content

Commit a520ea0

Browse files
dstarkeflovilmart
authored andcommitted
Fix LiveQuery unsafe user (#3525)
* LiveQuery should not use unsafe user setting * server should issue queries with the master key
1 parent 58bdeee commit a520ea0

File tree

3 files changed

+21
-13
lines changed

3 files changed

+21
-13
lines changed

spec/SessionTokenCache.spec.js

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,14 @@ describe('SessionTokenCache', function() {
44

55
beforeEach(function(done) {
66
var Parse = require('parse/node');
7-
// Mock parse
8-
var mockUser = {
9-
become: jasmine.createSpy('become').and.returnValue(Parse.Promise.as({
10-
id: 'userId'
11-
}))
12-
}
13-
jasmine.mockLibrary('parse/node', 'User', mockUser);
7+
8+
spyOn(Parse, "Query").and.returnValue({
9+
first: jasmine.createSpy("first").and.returnValue(Parse.Promise.as(new Parse.Object("_Session", {
10+
user: new Parse.User({id:"userId"})
11+
}))),
12+
equalTo: function(){}
13+
})
14+
1415
done();
1516
});
1617

@@ -46,7 +47,4 @@ describe('SessionTokenCache', function() {
4647
});
4748
});
4849

49-
afterEach(function() {
50-
jasmine.restoreLibrary('parse/node', 'User');
51-
});
5250
});

src/LiveQuery/ParseLiveQueryServer.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ class ParseLiveQueryServer {
3737

3838
// Initialize Parse
3939
Parse.Object.disableSingleInstance();
40-
Parse.User.enableUnsafeCurrentUser();
4140

4241
const serverURL = config.serverURL || Parse.serverURL;
4342
Parse.serverURL = serverURL;
@@ -363,7 +362,7 @@ class ParseLiveQueryServer {
363362
// Then get the user's roles
364363
var rolesQuery = new Parse.Query(Parse.Role);
365364
rolesQuery.equalTo("users", user);
366-
return rolesQuery.find();
365+
return rolesQuery.find({useMasterKey:true});
367366
}).
368367
then((roles) => {
369368

src/LiveQuery/SessionTokenCache.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,17 @@ import Parse from 'parse/node';
22
import LRU from 'lru-cache';
33
import logger from '../logger';
44

5+
function userForSessionToken(sessionToken){
6+
var q = new Parse.Query("_Session");
7+
q.equalTo("sessionToken", sessionToken);
8+
return q.first({useMasterKey:true}).then(function(session){
9+
if(!session){
10+
return Parse.Promise.error("No session found for session token");
11+
}
12+
return session.get("user");
13+
});
14+
}
15+
516
class SessionTokenCache {
617
cache: Object;
718

@@ -21,7 +32,7 @@ class SessionTokenCache {
2132
logger.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
2233
return Parse.Promise.as(userId);
2334
}
24-
return Parse.User.become(sessionToken).then((user) => {
35+
return userForSessionToken(sessionToken).then((user) => {
2536
logger.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
2637
const userId = user.id;
2738
this.cache.set(sessionToken, userId);

0 commit comments

Comments
 (0)