controller.wsServer.on( 'request', function( request ) { //console.log( "Websocket: new request!" ); var allowRequest = false; switch ( true ) { // CLIENT TO API UPLOAD REQUEST case request.resourceURL.path == '/api/' && additionalPaths.indexOf( '/api/' ) >= 0: allowRequest = SocketUtils.firewall4( SocketUtils.getFirewallList( 'client' ), request.socket.remoteAddress ); if ( !allowRequest ) { console.log( "Firewall ( client ): Request rejected for " + request.socket.remoteAddress + " on 'ws://api/'" ); request.reject(); return; } requestTypes.clientToApi.handleRequest( request, controller, httpServer, dataDir, additionalPaths ); break; // PUT FILE REQUEST case request.resourceURL.path == '/put/': allowRequest = SocketUtils.firewall4( SocketUtils.getFirewallList( controller.isA ), request.socket.remoteAddress ); if ( !allowRequest ) { console.log( "Firewall ( " + controller.isA + " ): Request rejected for " + request.socket.remoteAddress + " on 'ws://put/'" ); request.reject(); return; } requestTypes.putRequest.handleRequest( request, controller, httpServer, dataDir, additionalPaths ); break; // END WEBSOCKET PUT // GET FILE REQUEST case request.resourceURL.path == '/get/': allowRequest = SocketUtils.firewall4( SocketUtils.getFirewallList( controller.isA ), request.socket.remoteAddress ); if ( !allowRequest ) { console.log( "Firewall ( " + controller.isA + " ): Request rejected for " + request.socket.remoteAddress + " on 'ws://get/'" ); request.reject(); return; } requestTypes.getRequest.handleRequest( request, controller, httpServer, dataDir, additionalPaths ); break; default: console.log( "Websocket: invalid websocket path " + request.resourceURL.path ); request.reject(); break; } // END WEBSOCKET PROTOCOL ROUTING } );
exports.handle = function( response, request, urlInfo, controller ) { /* Firewall */ var allowRequest = SocketUtils.firewall4( SocketUtils.getFirewallList( controller.isA ), request.socket.remoteAddress ); if ( !allowRequest ) { console.log( "Firewall (" + controller.isA + "): Request rejected for " + request.socket.remoteAddress + " on resource: '/put/'" ); response.write( 'forbidden' ); response.end(); return; } response.write( fs.readFileSync( __dirname + "/index.html" ) ); }
exports.handle = function( response, request, urlInfo, controller ) { var errorSent = false; response.sendError = function( reason ) { if ( errorSent ) return; try { response.write( JSON.stringify({ "error": true, "reason": ( reason + "" ) || "unknown reason" }) ); response.end(); } catch ( e ) { console.log( "ERROR sending response back to event: " + e ); } errorSent = true; } /* Firewall */ var allowRequest = SocketUtils.firewall4( SocketUtils.getFirewallList( controller.isA ), request.socket.remoteAddress ); if ( !allowRequest ) { console.log( "Firewall (" + controller.isA + "): Request rejected for " + request.socket.remoteAddress + " on resource: '/event/'" ); response.sendError( 'forbidden' ); return; } /* End of firewall */ var eventName = urlInfo.event || null; if ( !eventName ) { response.sendError( 'which event?' ); return; } else { var data = urlInfo.data || "{}"; try { data = JSON.parse( data ); } catch ( e ) { response.sendError( "Unserializeable request data" ); return; } try { data.request = request; data.response= response; data.eventName = eventName; controller.on( eventName, data ); } catch ( e ) { response.sendError( e + '' ); } } }