1
0
Fork 0
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:
Simo Kinnunen 2014-06-03 19:00:25 +09:00
parent 27d9014e90
commit 41661c9384
4 changed files with 43 additions and 41 deletions

View file

@ -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",

View file

@ -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'))
if (token) { next()
return dbapi.loadUser(token.email) })
.then(function(user) {
if (user) { io.use(function(socket, next) {
handshake.user = user var req = socket.request
accept(null, true) , token = req.session.jwt
} if (token) {
else { return dbapi.loadUser(token.email)
accept(null, false) .then(function(user) {
} if (user) {
}) req.user = user
next()
} }
else { else {
accept(null, false) next(new Error('Invalid user'))
} }
}) })
.catch(function() { .catch(next)
accept(null, false)
})
} }
})()) else {
next(new Error('Missing authorization token'))
}
})
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)

View file

@ -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) {

View file

@ -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')