Request options are now properly passed into WADO Proxy (LT-165)

This commit is contained in:
Erik Ziegler committed 2016-09-02 09:55:43 +02:00
1 parent c05e36eca8
commit ed8bb26fa4
8 files changed
+64 -31

No files matched your search

-1
View File
@@ -1,4 +1,3 @@
Settings = Object.assign((Meteor.settings && Meteor.settings.proxy) ? Meteor.settings.proxy : {}, {
uri : "/__wado_proxy",
enabled: true
+6 -2
View File
@@ -1,8 +1,12 @@
WADOProxy = {};
WADOProxy.convertURL = function(wadoURL) {
WADOProxy.convertURL = (wadoURL, requestOptions) => {
if (!Settings.enabled) {
return wadoURL;
}
return Settings.uri + '?' + querystring.stringify({url: wadoURL});
if (!wadoURL) {
return null;
}
return Settings.uri + '?' + querystring.stringify({url: wadoURL, options: requestOptions ? JSON.stringify(requestOptions) : null});
}
+54 -23
View File
@@ -1,33 +1,64 @@
Router.route(Settings.uri, function () {
let response = this.response;
if (!this.params.query.url) {
// 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('No wado url provided');
response.end('Error: No WADO URL was provided.\n');
return;
}
let proxyRequest,
wadoUrl = url.parse(this.params.query.url, false);
// Use Node's URL parse to decode the query URL
const wadoUrl = url.parse(params.query.url);
var options = {
headers: {}
// 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,
};
//options.headers = this.request.headers;
if (this.request.headers['referer']) {
options.headers.referer = this.request.headers['referer'];
if (request.headers['referer']) {
options.headers.referer = request.headers['referer'];
}
if (this.request.headers['user-agent']) {
options.headers['user-agent'] = this.request.headers['user-agent'];
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;
}
options.method = this.request.method;
options.host = wadoUrl.hostname;
options.port = wadoUrl.port ? wadoUrl.port : 80;
options.path = wadoUrl.path;
proxyRequest = http.request(options, function (proxyResponse) {
proxyResponse.pipe(response, {end: true});
// 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});
});
//proxyRequest.end();
this.request.pipe(proxyRequest, {end: true});
}, {where: 'server'});
// 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'
});