64 lines
2.3 KiB
JavaScript
Executable File
64 lines
2.3 KiB
JavaScript
Executable File
// Setup a Route using Iron Router to avoid Cross-origin resource sharing
|
|
// (CORS) errors. We only handle this route on the Server.
|
|
Router.route(Settings.uri, function() {
|
|
const request = this.request;
|
|
const response = this.response;
|
|
const params = this.params;
|
|
const requestOptions = params.query.options ? JSON.parse(params.query.options) : {};
|
|
|
|
// If no Web Access to DICOM Objects (WADO) Service URL is provided
|
|
// return an error for the request.
|
|
if (!params.query.url) {
|
|
response.writeHead(500);
|
|
response.end('Error: No WADO URL was provided.\n');
|
|
return;
|
|
}
|
|
|
|
// Use Node's URL parse to decode the query URL
|
|
const wadoUrl = url.parse(params.query.url);
|
|
|
|
// Create an object to hold the information required
|
|
// for the request to the PACS.
|
|
let options = {
|
|
headers: {},
|
|
method: request.method,
|
|
hostname: wadoUrl.hostname,
|
|
port: wadoUrl.port, //maybe null
|
|
path: wadoUrl.path,
|
|
};
|
|
|
|
if (request.headers['referer']) {
|
|
options.headers.referer = request.headers['referer'];
|
|
}
|
|
if (request.headers['user-agent']) {
|
|
options.headers['user-agent'] = request.headers['user-agent'];
|
|
}
|
|
|
|
// Retrieve the authorization user:password string for the PACS,
|
|
// if one is required, and include it in the request to the PACS.
|
|
//const wadoAuth = 'orthanc:orthanc';
|
|
if (requestOptions.auth) {
|
|
options.auth = requestOptions.auth;
|
|
}
|
|
|
|
// Use Node's HTTP API to send a request to the PACS
|
|
const proxyRequest = http.request(options, (proxyResponse) => {
|
|
// When we receive data from the PACS, stream it as the
|
|
// response to the original request.
|
|
// console.log(`Got response: ${proxyResponse.statusCode}`);
|
|
response.writeHead(proxyResponse.statusCode, proxyResponse.headers);
|
|
return proxyResponse.pipe(response, {end: true});
|
|
});
|
|
|
|
// If our request to the PACS fails, log the error message
|
|
proxyRequest.on('error', (error) => {
|
|
response.writeHead(500);
|
|
response.end(`Error: Problem with request to PACS: ${error.message}\n`);
|
|
});
|
|
|
|
// Stream the original request information into the request
|
|
// to the PACS
|
|
request.pipe(proxyRequest);
|
|
}, {
|
|
where: 'server'
|
|
}); |