@@ -82,11 +82,7 @@ exports.Server = function Server(bsClient, workers) {
8282 var writeResponse = function ( err , data ) {
8383
8484 if ( err ) {
85- response . writeHead ( 500 , {
86- 'Content-Type' : 'text/plain'
87- } ) ;
88- response . write ( err + '\n' ) ;
89- response . end ( ) ;
85+ sendError ( response , err , 500 ) ;
9086 return ;
9187 }
9288
@@ -123,11 +119,7 @@ exports.Server = function Server(bsClient, workers) {
123119
124120 fs . exists ( filename , function ( exists ) {
125121 if ( ! exists ) {
126- response . writeHead ( 404 , {
127- 'Content-Type' : 'text/plain'
128- } ) ;
129- response . write ( '404 Not Found\n' ) ;
130- response . end ( ) ;
122+ sendError ( response , 'file not found' , 404 ) ;
131123 return ;
132124 }
133125
@@ -143,8 +135,7 @@ exports.Server = function Server(bsClient, workers) {
143135 } else {
144136 send ( request , filename )
145137 . on ( 'error' , function onSendError ( err ) {
146- response . statusCode = err . status || 500 ;
147- response . end ( err . message || 'Internal Server Error' ) ;
138+ sendError ( response , ( err . message || 'Internal Server Error' ) , err . status || 500 ) ;
148139 } )
149140 . pipe ( response ) ;
150141 }
@@ -200,19 +191,46 @@ exports.Server = function Server(bsClient, workers) {
200191 return config . test_path [ ++ worker . path_index ] ;
201192 }
202193
194+
195+ function getWorkerUuid ( request ) {
196+ var uuid = request . headers [ 'x-worker-uuid' ] ;
197+ uuid = uuid && uuid . replace ( / [ ^ a - z A - Z 0 - 9 \- ] / , '' ) ;
198+ return ( uuid && workers [ uuid ] ) ? uuid : null ;
199+ }
200+
201+
202+ function sendError ( response , errMessage , statusCode ) {
203+ response . writeHead ( statusCode || 400 , {
204+ 'Content-Type' : 'text/plain'
205+ } ) ;
206+
207+ if ( errMessage ) {
208+ response . write ( errMessage + '\n' ) ;
209+ }
210+
211+ response . end ( ) ;
212+ }
213+
214+
203215 var handlers = {
204216 '_progress' : function progressHandler ( uri , body , request , response ) {
205- var uuid = request . headers [ 'x-worker-uuid' ] ;
206- var worker = workers [ uuid ] || { } ;
217+ var uuid = getWorkerUuid ( request ) ;
218+ if ( ! uuid ) {
219+ sendError ( response , 'worker not found' , 404 ) ;
220+ return ;
221+ }
222+
223+ var worker = workers [ uuid ] ;
207224 var query = null ;
225+
208226 try {
209227 query = parseBody ( body ) ;
210228 } catch ( e ) {
211229 logger . info ( '[%s] Exception in parsing log' , worker . string ) ;
212230 logger . info ( '[%s] Log: ' + qs . parse ( body ) . data , worker . string ) ;
213231 }
214232
215- if ( query . tracebacks ) {
233+ if ( query && query . tracebacks ) {
216234 query . tracebacks . forEach ( function ( traceback ) {
217235 logger . info ( '[%s] ' + chalk . red ( 'Error:' ) , worker . getTestBrowserInfo ( ) , formatTraceback ( traceback ) ) ;
218236 } ) ;
@@ -221,14 +239,19 @@ exports.Server = function Server(bsClient, workers) {
221239 } ,
222240
223241 '_report' : function reportHandler ( uri , body , request , response ) {
242+ var uuid = getWorkerUuid ( request ) ;
243+ if ( ! uuid ) {
244+ sendError ( response , 'worker not found' , 404 ) ;
245+ return ;
246+ }
247+
248+ var worker = workers [ uuid ] ;
249+ worker . _worker_key = uuid ;
250+
224251 var query = null ;
225252 try {
226253 query = parseBody ( body ) ;
227254 } catch ( e ) { }
228- var uuid = request . headers [ 'x-worker-uuid' ] ;
229- uuid = uuid && uuid . replace ( / [ ^ a - z A - Z 0 - 9 \- ] / , '' ) ;
230- var worker = workers [ uuid ] || { } ;
231- worker . _worker_key = uuid ;
232255
233256 if ( query === null ) {
234257 logger . info ( '[%s] Null response from remote Browser' , request . headers [ 'x-browser-string' ] ) ;
0 commit comments