@@ -82,11 +82,7 @@ exports.Server = function Server(bsClient, workers) {
82
82
var writeResponse = function ( err , data ) {
83
83
84
84
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 ) ;
90
86
return ;
91
87
}
92
88
@@ -123,11 +119,7 @@ exports.Server = function Server(bsClient, workers) {
123
119
124
120
fs . exists ( filename , function ( exists ) {
125
121
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 ) ;
131
123
return ;
132
124
}
133
125
@@ -143,8 +135,7 @@ exports.Server = function Server(bsClient, workers) {
143
135
} else {
144
136
send ( request , filename )
145
137
. 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 ) ;
148
139
} )
149
140
. pipe ( response ) ;
150
141
}
@@ -200,19 +191,46 @@ exports.Server = function Server(bsClient, workers) {
200
191
return config . test_path [ ++ worker . path_index ] ;
201
192
}
202
193
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
+
203
215
var handlers = {
204
216
'_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 ] ;
207
224
var query = null ;
225
+
208
226
try {
209
227
query = parseBody ( body ) ;
210
228
} catch ( e ) {
211
229
logger . info ( '[%s] Exception in parsing log' , worker . string ) ;
212
230
logger . info ( '[%s] Log: ' + qs . parse ( body ) . data , worker . string ) ;
213
231
}
214
232
215
- if ( query . tracebacks ) {
233
+ if ( query && query . tracebacks ) {
216
234
query . tracebacks . forEach ( function ( traceback ) {
217
235
logger . info ( '[%s] ' + chalk . red ( 'Error:' ) , worker . getTestBrowserInfo ( ) , formatTraceback ( traceback ) ) ;
218
236
} ) ;
@@ -221,14 +239,19 @@ exports.Server = function Server(bsClient, workers) {
221
239
} ,
222
240
223
241
'_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
+
224
251
var query = null ;
225
252
try {
226
253
query = parseBody ( body ) ;
227
254
} 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 ;
232
255
233
256
if ( query === null ) {
234
257
logger . info ( '[%s] Null response from remote Browser' , request . headers [ 'x-browser-string' ] ) ;
0 commit comments