Skip to content

Commit 7e4d813

Browse files
committed
Added checks for worker uuid
1 parent 4edfe6a commit 7e4d813

File tree

1 file changed

+42
-19
lines changed

1 file changed

+42
-19
lines changed

lib/server.js

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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-zA-Z0-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-zA-Z0-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

Comments
 (0)