MCPcopy Create free account
hub / github.com/apache/thrift / processGet

Function processGet

lib/nodejs/lib/thrift/web_server.js:433–494  ·  view source on GitHub ↗
(request, response)

Source from the content-addressed store, hash-verified

431 //Handle GET methods (Static Page Server)
432 ///////////////////////////////////////////////////
433 function processGet(request, response) {
434 //Undefined or empty base directory means do not serve static files
435 if (!baseDir || "" === baseDir) {
436 response.writeHead(404);
437 response.end();
438 return;
439 }
440
441 //Verify CORS requirements
442 if (!VerifyCORSAndSetHeaders(request, response)) {
443 response.writeHead(
444 "403",
445 "Origin " + request.headers.origin + " not allowed",
446 {},
447 );
448 response.end();
449 return;
450 }
451
452 //Locate the file requested and send it
453 var uri = url.parse(request.url).pathname;
454 var filename = path.resolve(path.join(baseDir, uri));
455
456 //Ensure the basedir path is not able to be escaped
457 var normalizedBase = baseDir.endsWith(path.sep) ? baseDir : baseDir + path.sep;
458 if (filename !== baseDir && filename.indexOf(normalizedBase) !== 0) {
459 response.writeHead(400, "Invalid request path", {});
460 response.end();
461 return;
462 }
463
464 fs.exists(filename, function (exists) {
465 if (!exists) {
466 response.writeHead(404);
467 response.end();
468 return;
469 }
470
471 if (fs.statSync(filename).isDirectory()) {
472 filename += "/index.html";
473 }
474
475 fs.readFile(filename, "binary", function (err, file) {
476 if (err) {
477 response.writeHead(500);
478 response.end(err + "\n");
479 return;
480 }
481 var headers = {};
482 var contentType = contentTypesByExtension[path.extname(filename)];
483 if (contentType) {
484 headers["Content-Type"] = contentType;
485 }
486 for (var k in options.headers) {
487 headers[k] = options.headers[k];
488 }
489 response.writeHead(200, headers);
490 response.write(file, "binary");

Callers 1

web_server.jsFile · 0.85

Calls 5

VerifyCORSAndSetHeadersFunction · 0.85
parseMethod · 0.80
writeMethod · 0.65
endMethod · 0.45
joinMethod · 0.45

Tested by

no test coverage detected