@@ -34,7 +34,6 @@ exports = module.exports = Manager;
3434
3535var defaultTransports = exports . defaultTransports = [
3636 'websocket'
37- , 'htmlfile'
3837 , 'xhr-polling'
3938 , 'jsonp-polling'
4039] ;
@@ -76,8 +75,6 @@ function Manager (server, options) {
7675 , 'heartbeat interval' : 25
7776 , 'heartbeat timeout' : 60
7877 , 'polling duration' : 20
79- , 'flash policy server' : true
80- , 'flash policy port' : 10843
8178 , 'destroy upgrade' : true
8279 , 'destroy buffer size' : 10E7
8380 , 'browser client' : true
@@ -159,7 +156,7 @@ function Manager (server, options) {
159156 } ) ;
160157
161158 this . sequenceNumber = Date . now ( ) | 0 ;
162-
159+
163160 this . log . info ( 'socket.io started' ) ;
164161} ;
165162
@@ -873,30 +870,30 @@ Manager.prototype.handshakeData = function (data, connection) {
873870 } ;
874871} ;
875872
876- /**
877- * Verifies the origin of a request.
878- *
879- * @api private
880- */
881-
882- Manager . prototype . verifyOrigin = function ( request ) {
883- var origin = request . headers . origin || request . headers . referer
884- , origins = this . get ( 'origins' ) ;
873+ Manager . prototype . isOriginAllowed = function ( origin , request ) {
874+ var origins = this . get ( 'origins' ) ;
885875
886876 if ( origin === 'null' ) origin = '*' ;
887877
888- if ( origins . indexOf ( '*:*' ) !== - 1 ) {
878+ var originsIsFunction = typeof origins === 'function' ;
879+
880+ if ( ! originsIsFunction && origins . indexOf ( '*:*' ) !== - 1 ) {
889881 return true ;
890882 }
891883
892884 if ( origin ) {
893885 try {
894- var parts = url . parse ( origin ) ;
895- parts . port = parts . port || 80 ;
896- var ok =
897- ~ origins . indexOf ( parts . hostname + ':' + parts . port ) ||
898- ~ origins . indexOf ( parts . hostname + ':*' ) ||
899- ~ origins . indexOf ( '*:' + parts . port ) ;
886+ var ok = false ;
887+ if ( originsIsFunction ) {
888+ ok = origins ( origin , request ) ;
889+ } else {
890+ var parts = url . parse ( origin ) ;
891+ parts . port = parts . port || 80 ;
892+ ok =
893+ ~ origins . indexOf ( parts . hostname + ':' + parts . port ) ||
894+ ~ origins . indexOf ( parts . hostname + ':*' ) ||
895+ ~ origins . indexOf ( '*:' + parts . port ) ;
896+ }
900897 if ( ! ok ) this . log . warn ( 'illegal origin: ' + origin ) ;
901898 return ok ;
902899 } catch ( ex ) {
@@ -909,6 +906,21 @@ Manager.prototype.verifyOrigin = function (request) {
909906 return false ;
910907} ;
911908
909+ /**
910+ * Verifies the origin of a request.
911+ *
912+ * @api private
913+ */
914+
915+ Manager . prototype . verifyOrigin = function ( request ) {
916+ var origin = request . headers . origin || request . headers . referer ;
917+ var allowed = this . isOriginAllowed ( origin , request ) ;
918+ if ( ! origin && ! allowed ) {
919+ this . log . warn ( 'origin missing from handshake, yet required by config' , { headers : request . headers } ) ;
920+ }
921+ return allowed ;
922+ } ;
923+
912924/**
913925 * Handles an incoming packet.
914926 *
0 commit comments