|
|
@ -12,11 +12,13 @@ import cookieParser from 'cookie-parser'
|
|
|
|
import session from 'express-session'
|
|
|
|
import session from 'express-session'
|
|
|
|
import redis from 'redis'
|
|
|
|
import redis from 'redis'
|
|
|
|
import connectRedis from 'connect-redis'
|
|
|
|
import connectRedis from 'connect-redis'
|
|
|
|
|
|
|
|
|
|
|
|
import connectSocketIO from 'socket.io'
|
|
|
|
import connectSocketIO from 'socket.io'
|
|
|
|
|
|
|
|
import passportSocketIo from 'passport.socketio'
|
|
|
|
|
|
|
|
|
|
|
|
import morgan from 'morgan'
|
|
|
|
import morgan from 'morgan'
|
|
|
|
|
|
|
|
|
|
|
|
import { morganStream } from './logger'
|
|
|
|
import logger, { morganStream } from './logger'
|
|
|
|
|
|
|
|
|
|
|
|
import passport from 'passport'
|
|
|
|
import passport from 'passport'
|
|
|
|
import mongoose from 'mongoose'
|
|
|
|
import mongoose from 'mongoose'
|
|
|
@ -57,6 +59,7 @@ mongoose.connect(
|
|
|
|
const app = express()
|
|
|
|
const app = express()
|
|
|
|
app.set('trust proxy', 1)
|
|
|
|
app.set('trust proxy', 1)
|
|
|
|
const server = http.createServer(app)
|
|
|
|
const server = http.createServer(app)
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
const io = connectSocketIO(server)
|
|
|
|
const io = connectSocketIO(server)
|
|
|
|
|
|
|
|
|
|
|
|
app.use(bodyParser.json())
|
|
|
|
app.use(bodyParser.json())
|
|
|
@ -78,15 +81,40 @@ app.use('/auth', authRouter)
|
|
|
|
|
|
|
|
|
|
|
|
app.use(morgan('short', { stream: morganStream }))
|
|
|
|
app.use(morgan('short', { stream: morganStream }))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onAuthorizeSuccess(data, accept) {
|
|
|
|
|
|
|
|
// console.log(data.user)
|
|
|
|
|
|
|
|
logger.debug(
|
|
|
|
|
|
|
|
`Successful connection to socket.io from ${data.user._id} (${data.user.email})`,
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
accept(null, true)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onAuthorizeFail(_, message, error, accept) {
|
|
|
|
|
|
|
|
if (error) throw new Error(message)
|
|
|
|
|
|
|
|
logger.debug('failed connection to socket.io:', message)
|
|
|
|
|
|
|
|
accept(null, false)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
io.use(
|
|
|
|
|
|
|
|
passportSocketIo.authorize({
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
|
|
|
cookieParser: cookieParser, // the same middleware you registrer in express
|
|
|
|
|
|
|
|
secret: process.env.SESSION_SECRET, // the session_secret to parse the cookie
|
|
|
|
|
|
|
|
store: new RedisStore({ client: redisClient }), // we NEED to use a sessionstore. no memorystore please
|
|
|
|
|
|
|
|
success: onAuthorizeSuccess, // *optional* callback on success - read more below
|
|
|
|
|
|
|
|
fail: onAuthorizeFail, // *optional* callback on fail/error - read more below
|
|
|
|
|
|
|
|
}),
|
|
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
io.on('connection', (socket) => {
|
|
|
|
io.on('connection', (socket) => {
|
|
|
|
console.log('a user connected')
|
|
|
|
logger.debug('a user connected')
|
|
|
|
|
|
|
|
//console.log(socket.request.user)
|
|
|
|
socket.on('disconnect', () => {
|
|
|
|
socket.on('disconnect', () => {
|
|
|
|
console.log('user disconnected')
|
|
|
|
logger.debug('a user connected')
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
if (process.env.NODE_ENV !== 'PRODUCTION') {
|
|
|
|
if (process.env.NODE_ENV !== 'PRODUCTION') {
|
|
|
|
const proxy = require('express-http-proxy')
|
|
|
|
|
|
|
|
app.use('/', proxy('http://localhost:4000/'))
|
|
|
|
app.use('/', proxy('http://localhost:4000/'))
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// probably serve up build version in production
|
|
|
|
// probably serve up build version in production
|
|
|
|