feat: priority
This commit is contained in:
parent
28d9e7ddcc
commit
9d2e9573f3
|
@ -1,3 +1,5 @@
|
|||
import {Flecks} from '@flecks/core';
|
||||
|
||||
import {createDatabaseConnection} from './connection';
|
||||
import containers from './containers';
|
||||
import register from './register';
|
||||
|
@ -69,7 +71,10 @@ export const hooks = {
|
|||
flecks.db.Models = flecks.gather('@flecks/db/server.models', {typeProperty: 'name'});
|
||||
},
|
||||
'@flecks/docker.containers': containers,
|
||||
'@flecks/server.up': async (flecks) => {
|
||||
flecks.db.sequelize = await createDatabaseConnection(flecks);
|
||||
},
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
async (flecks) => {
|
||||
flecks.db.sequelize = await createDatabaseConnection(flecks);
|
||||
},
|
||||
{after: '@flecks/docker/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import {join} from 'path';
|
||||
|
||||
import {Flecks} from '@flecks/core';
|
||||
import {banner} from '@flecks/core/server';
|
||||
|
||||
const electron = __non_webpack_require__('electron');
|
||||
|
@ -129,7 +130,10 @@ export const hooks = {
|
|||
createWindow: () => createWindow(flecks),
|
||||
},
|
||||
}),
|
||||
'@flecks/server.up': async (flecks) => {
|
||||
await flecks.invokeSequentialAsync('@flecks/electron/server.initialize', flecks.electron);
|
||||
},
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
async (flecks) => {
|
||||
await flecks.invokeSequentialAsync('@flecks/electron/server.initialize', flecks.electron);
|
||||
},
|
||||
{after: '@flecks/web/server', before: '@flecks/repl/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
import {Flecks} from '@flecks/core';
|
||||
|
||||
import containers from './containers';
|
||||
import createClient from './create-client';
|
||||
|
||||
|
@ -40,4 +42,17 @@ export const hooks = {
|
|||
'@flecks/repl.context': (flecks) => ({
|
||||
redisClient: createClient(flecks),
|
||||
}),
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
async (flecks) => {
|
||||
const client = createClient(flecks);
|
||||
const promise = new Promise((resolve, reject) => {
|
||||
client.on('ready', resolve);
|
||||
client.on('error', reject);
|
||||
});
|
||||
await client.connect();
|
||||
await promise;
|
||||
await client.disconnect();
|
||||
},
|
||||
{after: '@flecks/docker/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -11,6 +11,11 @@ const debugSilly = debug.extend('silly');
|
|||
const RedisStore = ConnectRedis(session);
|
||||
|
||||
export const hooks = {
|
||||
'@flecks/core.priority': (graph, hook) => {
|
||||
if ('@flecks/server.up' === hook) {
|
||||
graph.addDependency('@flecks/user/session/server', '@flecks/redis/server');
|
||||
}
|
||||
},
|
||||
'@flecks/user.session': async (flecks) => {
|
||||
const client = createClient(flecks, {legacyMode: true});
|
||||
await client.connect();
|
||||
|
|
|
@ -12,15 +12,18 @@ export const hooks = {
|
|||
|
||||
}
|
||||
),
|
||||
'@flecks/react.providers': async (req, flecks) => {
|
||||
const slices = await flecks.invokeMergeUnique('@flecks/redux.slices');
|
||||
const reducer = createReducer(flecks, slices);
|
||||
// Hydrate from server.
|
||||
const {preloadedState} = flecks.get('@flecks/redux/client');
|
||||
const store = await configureStore(flecks, reducer, {preloadedState});
|
||||
flecks.redux = store;
|
||||
return [Provider, {store}];
|
||||
},
|
||||
'@flecks/react.providers': Flecks.priority(
|
||||
async (req, flecks) => {
|
||||
const slices = await flecks.invokeMergeUnique('@flecks/redux.slices');
|
||||
const reducer = createReducer(flecks, slices);
|
||||
// Hydrate from server.
|
||||
const {preloadedState} = flecks.get('@flecks/redux/client');
|
||||
const store = await configureStore(flecks, reducer, {preloadedState});
|
||||
flecks.redux = store;
|
||||
return [Provider, {store}];
|
||||
},
|
||||
{before: '@flecks/react/router/client'},
|
||||
),
|
||||
'@flecks/redux.store': ({enhancers}) => {
|
||||
// Hydrate from and subscribe to localStorage.
|
||||
enhancers.push(localStorageEnhancer);
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import {D} from '@flecks/core';
|
||||
import {D, Flecks} from '@flecks/core';
|
||||
import {Provider} from 'react-redux';
|
||||
|
||||
import {hydrateServer} from './actions';
|
||||
|
@ -30,5 +30,8 @@ export const hooks = {
|
|||
preloadedState: req.redux.getState(),
|
||||
},
|
||||
}),
|
||||
'@flecks/react.providers': (req) => [Provider, {store: req.redux}],
|
||||
'@flecks/react.providers': Flecks.priority(
|
||||
(req) => [Provider, {store: req.redux}],
|
||||
{before: '@flecks/react/router/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -50,19 +50,22 @@ export const hooks = {
|
|||
},
|
||||
};
|
||||
},
|
||||
'@flecks/server.up': (flecks) => {
|
||||
passport.use(new LocalStrategy(
|
||||
{usernameField: 'email'},
|
||||
async (email, password, fn) => {
|
||||
const {User} = flecks.db.Models;
|
||||
try {
|
||||
const user = await User.findOne({where: {email}});
|
||||
fn(undefined, user && await user.validatePassword(password) && user);
|
||||
}
|
||||
catch (error) {
|
||||
fn(error);
|
||||
}
|
||||
},
|
||||
));
|
||||
},
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
(flecks) => {
|
||||
passport.use(new LocalStrategy(
|
||||
{usernameField: 'email'},
|
||||
async (email, password, fn) => {
|
||||
const {User} = flecks.db.Models;
|
||||
try {
|
||||
const user = await User.findOne({where: {email}});
|
||||
fn(undefined, user && await user.validatePassword(password) && user);
|
||||
}
|
||||
catch (error) {
|
||||
fn(error);
|
||||
}
|
||||
},
|
||||
));
|
||||
},
|
||||
{after: '@flecks/user/server', before: '@flecks/repl/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -31,18 +31,21 @@ export const hooks = {
|
|||
},
|
||||
},
|
||||
],
|
||||
'@flecks/server.up': (flecks) => {
|
||||
passport.serializeUser((user, fn) => fn(null, user.id));
|
||||
passport.deserializeUser(async (id, fn) => {
|
||||
const {User} = flecks.db.Models;
|
||||
try {
|
||||
fn(undefined, await User.findByPk(id));
|
||||
}
|
||||
catch (error) {
|
||||
fn(error);
|
||||
}
|
||||
});
|
||||
},
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
(flecks) => {
|
||||
passport.serializeUser((user, fn) => fn(null, user.id));
|
||||
passport.deserializeUser(async (id, fn) => {
|
||||
const {User} = flecks.db.Models;
|
||||
try {
|
||||
fn(undefined, await User.findByPk(id));
|
||||
}
|
||||
catch (error) {
|
||||
fn(error);
|
||||
}
|
||||
});
|
||||
},
|
||||
{before: '@flecks/web/server', after: ['@flecks/db/server', '@flecks/governor/server']},
|
||||
),
|
||||
'@flecks/socket.intercom': () => ({
|
||||
'@flecks/user.users': async (sids, server) => {
|
||||
const sockets = await server.sockets();
|
||||
|
@ -57,25 +60,28 @@ export const hooks = {
|
|||
);
|
||||
},
|
||||
}),
|
||||
'@flecks/socket/server.request.socket': (flecks) => (socket, next) => {
|
||||
debugSilly('@flecks/socket/server.request.socket: passport.initialize()');
|
||||
passport.initialize()(socket.handshake, undefined, () => {
|
||||
debugSilly('@flecks/socket/server.request.socket: passport.session()');
|
||||
passport.session()(socket.handshake, undefined, async () => {
|
||||
if (!socket.handshake.user) {
|
||||
const {User} = flecks.db.Models;
|
||||
socket.handshake.user = new User();
|
||||
socket.handshake.user.id = 0;
|
||||
}
|
||||
socket.handshake.login = LogOps.logIn;
|
||||
socket.handshake.logIn = LogOps.logIn;
|
||||
socket.handshake.logout = LogOps.logOut;
|
||||
socket.handshake.logOut = LogOps.logOut;
|
||||
socket.handshake.isAuthenticated = LogOps.isAuthenticated;
|
||||
socket.handshake.isUnauthenticated = LogOps.isUnauthenticated;
|
||||
await socket.join(`/u/${socket.handshake.user.id}`);
|
||||
next();
|
||||
'@flecks/socket/server.request.socket': Flecks.priority(
|
||||
(flecks) => (socket, next) => {
|
||||
debugSilly('@flecks/socket/server.request.socket: passport.initialize()');
|
||||
passport.initialize()(socket.handshake, undefined, () => {
|
||||
debugSilly('@flecks/socket/server.request.socket: passport.session()');
|
||||
passport.session()(socket.handshake, undefined, async () => {
|
||||
if (!socket.handshake.user) {
|
||||
const {User} = flecks.db.Models;
|
||||
socket.handshake.user = new User();
|
||||
socket.handshake.user.id = 0;
|
||||
}
|
||||
socket.handshake.login = LogOps.logIn;
|
||||
socket.handshake.logIn = LogOps.logIn;
|
||||
socket.handshake.logout = LogOps.logOut;
|
||||
socket.handshake.logOut = LogOps.logOut;
|
||||
socket.handshake.isAuthenticated = LogOps.isAuthenticated;
|
||||
socket.handshake.isUnauthenticated = LogOps.isUnauthenticated;
|
||||
await socket.join(`/u/${socket.handshake.user.id}`);
|
||||
next();
|
||||
});
|
||||
});
|
||||
});
|
||||
},
|
||||
},
|
||||
{before: '@flecks/governor/server'},
|
||||
),
|
||||
};
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import {D} from '@flecks/core';
|
||||
import {D, Flecks} from '@flecks/core';
|
||||
import express from 'express';
|
||||
import expressSession from 'express-session';
|
||||
|
||||
|
@ -25,42 +25,51 @@ export const hooks = {
|
|||
|
||||
}
|
||||
),
|
||||
'@flecks/web/server.request.route': (flecks) => {
|
||||
const urle = express.urlencoded({extended: true});
|
||||
return (req, res, next) => {
|
||||
debugSilly('@flecks/web/server.request.route: express.urlencoded()');
|
||||
urle(req, res, (error) => {
|
||||
if (error) {
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
debugSilly('@flecks/web/server.request.route: session()');
|
||||
flecks.user.session(req, res, (error) => {
|
||||
'@flecks/web/server.request.route': Flecks.priority(
|
||||
(flecks) => {
|
||||
const urle = express.urlencoded({extended: true});
|
||||
return (req, res, next) => {
|
||||
debugSilly('@flecks/web/server.request.route: express.urlencoded()');
|
||||
urle(req, res, (error) => {
|
||||
if (error) {
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
debugSilly('session ID: %s', req.session.id);
|
||||
next();
|
||||
debugSilly('@flecks/web/server.request.route: session()');
|
||||
flecks.user.session(req, res, (error) => {
|
||||
if (error) {
|
||||
next(error);
|
||||
return;
|
||||
}
|
||||
debugSilly('session ID: %s', req.session.id);
|
||||
next();
|
||||
});
|
||||
});
|
||||
};
|
||||
},
|
||||
{before: '@flecks/user/server'},
|
||||
),
|
||||
'@flecks/server.up': Flecks.priority(
|
||||
async (flecks) => {
|
||||
flecks.user.session = expressSession({
|
||||
resave: false,
|
||||
sameSite: true,
|
||||
saveUninitialized: false,
|
||||
secret: flecks.get('@flecks/user/session/server.cookieSecret'),
|
||||
...await flecks.invokeMergeAsync('@flecks/user.session'),
|
||||
});
|
||||
};
|
||||
},
|
||||
'@flecks/server.up': async (flecks) => {
|
||||
flecks.user.session = expressSession({
|
||||
resave: false,
|
||||
sameSite: true,
|
||||
saveUninitialized: false,
|
||||
secret: flecks.get('@flecks/user/session/server.cookieSecret'),
|
||||
...await flecks.invokeMergeAsync('@flecks/user.session'),
|
||||
});
|
||||
},
|
||||
'@flecks/socket/server.request.socket': (flecks) => (socket, next) => {
|
||||
debugSilly('@flecks/socket/server.request.socket: session()');
|
||||
flecks.user.session(socket.handshake, {}, () => {
|
||||
const id = socket.handshake.session?.id;
|
||||
socket.join(id);
|
||||
next();
|
||||
});
|
||||
},
|
||||
},
|
||||
{after: ['@flecks/governor/server', '@flecks/user/server']},
|
||||
),
|
||||
'@flecks/socket/server.request.socket': Flecks.priority(
|
||||
(flecks) => (socket, next) => {
|
||||
debugSilly('@flecks/socket/server.request.socket: session()');
|
||||
flecks.user.session(socket.handshake, {}, () => {
|
||||
const id = socket.handshake.session?.id;
|
||||
socket.join(id);
|
||||
next();
|
||||
});
|
||||
},
|
||||
{before: '@flecks/user/server'},
|
||||
),
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue
Block a user