mirror of
https://github.com/openstf/stf
synced 2025-10-03 17:59:28 +02:00
Update to Socket.IO 1.0.
This commit is contained in:
parent
27d9014e90
commit
41661c9384
4 changed files with 43 additions and 41 deletions
|
@ -8,7 +8,7 @@
|
||||||
"angular-animate": "~1.3.0-beta.8",
|
"angular-animate": "~1.3.0-beta.8",
|
||||||
"angular-touch": "~1.3.0-beta.8",
|
"angular-touch": "~1.3.0-beta.8",
|
||||||
"se7en-bootstrap-3": "git@ghe.amb.ca.local:stf/se7en-bootstrap-3.git#46b7dd0792cfdc66bf01e351cd680de88740d60c",
|
"se7en-bootstrap-3": "git@ghe.amb.ca.local:stf/se7en-bootstrap-3.git#46b7dd0792cfdc66bf01e351cd680de88740d60c",
|
||||||
"socket.io-client": "~0.9.16",
|
"socket.io-client": "~1.0.4",
|
||||||
"lodash": "~2.4.1",
|
"lodash": "~2.4.1",
|
||||||
"oboe": "~1.14.7",
|
"oboe": "~1.14.7",
|
||||||
"fa-borderlayout": "git@ghe.amb.ca.local:gunther-brunner/fa-borderlayout.git",
|
"fa-borderlayout": "git@ghe.amb.ca.local:gunther-brunner/fa-borderlayout.git",
|
||||||
|
|
|
@ -16,6 +16,7 @@ var Promise = require('bluebird')
|
||||||
var httpProxy = require('http-proxy')
|
var httpProxy = require('http-proxy')
|
||||||
var _ = require('lodash')
|
var _ = require('lodash')
|
||||||
var request = Promise.promisifyAll(require('request'))
|
var request = Promise.promisifyAll(require('request'))
|
||||||
|
var proxyaddr = require('proxy-addr')
|
||||||
|
|
||||||
var logger = require('../util/logger')
|
var logger = require('../util/logger')
|
||||||
var pathutil = require('../util/pathutil')
|
var pathutil = require('../util/pathutil')
|
||||||
|
@ -34,9 +35,13 @@ module.exports = function(options) {
|
||||||
var log = logger.createLogger('app')
|
var log = logger.createLogger('app')
|
||||||
, app = express()
|
, app = express()
|
||||||
, server = http.createServer(app)
|
, server = http.createServer(app)
|
||||||
, io = socketio.listen(server)
|
, io = socketio.listen(server, {
|
||||||
|
serveClient: false
|
||||||
|
, transports: ['websocket']
|
||||||
|
})
|
||||||
, channelRouter = new events.EventEmitter()
|
, channelRouter = new events.EventEmitter()
|
||||||
, proxy = httpProxy.createProxyServer()
|
, proxy = httpProxy.createProxyServer()
|
||||||
|
, sessionMiddleware
|
||||||
|
|
||||||
proxy.on('error', function(err) {
|
proxy.on('error', function(err) {
|
||||||
log.error('Proxy had an error', err.stack)
|
log.error('Proxy had an error', err.stack)
|
||||||
|
@ -46,11 +51,6 @@ module.exports = function(options) {
|
||||||
app.set('views', pathutil.resource('app/views'))
|
app.set('views', pathutil.resource('app/views'))
|
||||||
app.set('strict routing', true)
|
app.set('strict routing', true)
|
||||||
app.set('case sensitive routing', true)
|
app.set('case sensitive routing', true)
|
||||||
app.set('trust proxy', true)
|
|
||||||
|
|
||||||
io.set('log level', 1)
|
|
||||||
io.set('browser client', false)
|
|
||||||
io.set('transports', ['websocket'])
|
|
||||||
|
|
||||||
if (!options.disableWatch) {
|
if (!options.disableWatch) {
|
||||||
app.use('/static/build', webpack({
|
app.use('/static/build', webpack({
|
||||||
|
@ -78,7 +78,7 @@ module.exports = function(options) {
|
||||||
app.use(serveFavicon(pathutil.resource(
|
app.use(serveFavicon(pathutil.resource(
|
||||||
'bower_components/stf-graphics/logo/exports/STF-128.png')))
|
'bower_components/stf-graphics/logo/exports/STF-128.png')))
|
||||||
|
|
||||||
app.use(cookieSession({
|
app.use(sessionMiddleware = cookieSession({
|
||||||
name: options.ssid
|
name: options.ssid
|
||||||
, keys: [options.secret]
|
, keys: [options.secret]
|
||||||
}))
|
}))
|
||||||
|
@ -230,45 +230,45 @@ module.exports = function(options) {
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
io.set('authorization', (function() {
|
io.use(function(socket, next) {
|
||||||
var session = Promise.promisify(cookieSession({
|
var req = socket.request
|
||||||
name: options.ssid
|
, res = Object.create(null)
|
||||||
, keys: [options.secret]
|
sessionMiddleware(req, res, next)
|
||||||
}))
|
})
|
||||||
return function(handshake, accept) {
|
|
||||||
var res = Object.create(null)
|
io.use(function(socket, next) {
|
||||||
session(handshake, res)
|
var req = socket.request
|
||||||
.then(function() {
|
// This is similar to what Express does behind the scenes
|
||||||
var token = handshake.session.jwt
|
req.ip = proxyaddr(req, app.get('trust proxy fn'))
|
||||||
|
next()
|
||||||
|
})
|
||||||
|
|
||||||
|
io.use(function(socket, next) {
|
||||||
|
var req = socket.request
|
||||||
|
, token = req.session.jwt
|
||||||
if (token) {
|
if (token) {
|
||||||
return dbapi.loadUser(token.email)
|
return dbapi.loadUser(token.email)
|
||||||
.then(function(user) {
|
.then(function(user) {
|
||||||
if (user) {
|
if (user) {
|
||||||
handshake.user = user
|
req.user = user
|
||||||
accept(null, true)
|
next()
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
accept(null, false)
|
next(new Error('Invalid user'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
.catch(next)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
accept(null, false)
|
next(new Error('Missing authorization token'))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(function() {
|
|
||||||
accept(null, false)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})())
|
|
||||||
|
|
||||||
io.on('connection', function(socket) {
|
io.on('connection', function(socket) {
|
||||||
var channels = []
|
var channels = []
|
||||||
, user = socket.handshake.user
|
, user = socket.request.user
|
||||||
, ip = socket.handshake.headers['x-forwarded-for'] ||
|
|
||||||
socket.handshake.address.address
|
|
||||||
|
|
||||||
socket.emit('socket.ip', ip)
|
socket.emit('socket.ip', socket.request.ip)
|
||||||
|
|
||||||
function joinChannel(channel) {
|
function joinChannel(channel) {
|
||||||
channels.push(channel)
|
channels.push(channel)
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
var io = require('socket.io')
|
var io = require('socket.io')
|
||||||
|
|
||||||
module.exports = function SocketFactory($rootScope, VersionUpdateService) {
|
module.exports = function SocketFactory($rootScope, VersionUpdateService) {
|
||||||
var socket = io.connect(null, {
|
var socket = io('/', {
|
||||||
reconnect: false
|
reconnection: false
|
||||||
|
, transports: ['websocket']
|
||||||
})
|
})
|
||||||
|
|
||||||
socket.scoped = function($scope) {
|
socket.scoped = function($scope) {
|
||||||
|
|
|
@ -24,7 +24,7 @@ module.exports = {
|
||||||
, 'angular-growl': 'angular-growl-v2/build/angular-growl.js'
|
, 'angular-growl': 'angular-growl-v2/build/angular-growl.js'
|
||||||
, 'angular-growl-css': 'angular-growl-v2/build/angular-growl.min.css'
|
, 'angular-growl-css': 'angular-growl-v2/build/angular-growl.min.css'
|
||||||
, 'localforage': 'localforage/dist/localforage.js'
|
, 'localforage': 'localforage/dist/localforage.js'
|
||||||
, 'socket.io': 'socket.io-client/dist/socket.io'
|
, 'socket.io': 'socket.io-client/socket.io.js'
|
||||||
, 'oboe': 'oboe/dist/oboe-browser'
|
, 'oboe': 'oboe/dist/oboe-browser'
|
||||||
, 'ng-file-upload-shim5': 'ng-file-upload/angular-file-upload-html5-shim'
|
, 'ng-file-upload-shim5': 'ng-file-upload/angular-file-upload-html5-shim'
|
||||||
, 'ng-file-upload-main': 'ng-file-upload/angular-file-upload'
|
, 'ng-file-upload-main': 'ng-file-upload/angular-file-upload'
|
||||||
|
@ -63,6 +63,7 @@ module.exports = {
|
||||||
, { test: /ui-bootstrap-tpls\.js/, loader: 'script'}
|
, { test: /ui-bootstrap-tpls\.js/, loader: 'script'}
|
||||||
, { test: /dialogs\.js/, loader: 'script'}
|
, { test: /dialogs\.js/, loader: 'script'}
|
||||||
, { test: /bluebird\.js/, loader: 'imports?require=>undefined'}
|
, { test: /bluebird\.js/, loader: 'imports?require=>undefined'}
|
||||||
|
, { test: /socket\.io\.js/, loader: 'imports?require=>undefined'}
|
||||||
]
|
]
|
||||||
, noParse: [
|
, noParse: [
|
||||||
// pathutil.resource('bower_components')
|
// pathutil.resource('bower_components')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue