Now handles top level files and recursive files in folders. Set max line length to be 100
51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
import Parse from 'parse/node';
|
|
import LRU from 'lru-cache';
|
|
import logger from '../logger';
|
|
|
|
function userForSessionToken(sessionToken) {
|
|
var q = new Parse.Query('_Session');
|
|
q.equalTo('sessionToken', sessionToken);
|
|
return q.first({ useMasterKey: true }).then(function (session) {
|
|
if (!session) {
|
|
return Promise.reject('No session found for session token');
|
|
}
|
|
return session.get('user');
|
|
});
|
|
}
|
|
|
|
class SessionTokenCache {
|
|
cache: Object;
|
|
|
|
constructor(timeout: number = 30 * 24 * 60 * 60 * 1000, maxSize: number = 10000) {
|
|
this.cache = new LRU({
|
|
max: maxSize,
|
|
maxAge: timeout,
|
|
});
|
|
}
|
|
|
|
getUserId(sessionToken: string): any {
|
|
if (!sessionToken) {
|
|
return Promise.reject('Empty sessionToken');
|
|
}
|
|
const userId = this.cache.get(sessionToken);
|
|
if (userId) {
|
|
logger.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
|
|
return Promise.resolve(userId);
|
|
}
|
|
return userForSessionToken(sessionToken).then(
|
|
user => {
|
|
logger.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
|
|
const userId = user.id;
|
|
this.cache.set(sessionToken, userId);
|
|
return Promise.resolve(userId);
|
|
},
|
|
error => {
|
|
logger.error('Can not fetch userId for sessionToken %j, error %j', sessionToken, error);
|
|
return Promise.reject(error);
|
|
}
|
|
);
|
|
}
|
|
}
|
|
|
|
export { SessionTokenCache };
|