mirror of
https://github.com/vale981/Vulcan
synced 2025-03-09 20:16:39 -04:00
52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
import { Meteor } from 'meteor/meteor';
|
|
import { WebApp } from 'meteor/webapp';
|
|
import { DDP } from 'meteor/ddp';
|
|
import { Accounts } from 'meteor/accounts-base';
|
|
|
|
import { createApolloClient, getReducers, getMiddlewares, configureStore } from '../modules.js';
|
|
|
|
const Fibers = Npm.require('fibers');
|
|
|
|
export const renderContext = new Meteor.EnvironmentVariable();
|
|
|
|
const Context = function Context(loginToken) {
|
|
this._loginToken = loginToken;
|
|
|
|
// get the user
|
|
if (Meteor.users) {
|
|
// check to make sure, we've the loginToken,
|
|
// otherwise a random user will fetched from the db
|
|
let user;
|
|
if (loginToken) {
|
|
const hashedToken = loginToken && Accounts._hashLoginToken(loginToken);
|
|
const query = { 'services.resume.loginTokens.hashedToken': hashedToken };
|
|
const options = { fields: { _id: 1 } };
|
|
user = Meteor.users.findOne(query, options);
|
|
}
|
|
|
|
if (user) {
|
|
this.userId = user._id;
|
|
}
|
|
}
|
|
};
|
|
|
|
WebApp.connectHandlers.use(Meteor.bindEnvironment((req, res, next) => {
|
|
req.loginToken = req.cookies && req.cookies.meteor_login_token;
|
|
req.apolloClient = createApolloClient({ currentUserToken: req.loginToken });
|
|
req.reducers = { ...getReducers(), apollo: req.apolloClient.reducer() };
|
|
req.middlewares = [...getMiddlewares(), req.apolloClient.middleware()];
|
|
req.store = configureStore(req.reducers, {}, req.middlewares);
|
|
|
|
renderContext.withValue({
|
|
loginToken: req.loginToken,
|
|
apolloClient: req.apolloClient,
|
|
reducers: req.reducers,
|
|
middlewares: req.middlewares,
|
|
store: req.store,
|
|
}, () => {
|
|
// support for Meteor.user
|
|
Fibers.current._meteor_dynamics[DDP._CurrentInvocation.slot] = new Context(req.loginToken);
|
|
|
|
next();
|
|
});
|
|
}));
|