From f9cb1934beb87b8393b3635dbbdb93d9aa4c9a43 Mon Sep 17 00:00:00 2001 From: Wheeler Law Date: Thu, 26 Sep 2019 13:30:26 -0700 Subject: [PATCH 1/3] Handle faults returned from rtorrent --- README.md | 5 +++-- server/util/rTorrentDeserializer.js | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c1b04e17b..f78fe2cb1 100644 --- a/README.md +++ b/README.md @@ -63,10 +63,11 @@ I've been bad about cutting actual releases, so check this repo for recent commi ### Local Development 1. Run `npm install`. -2. Run `npm run start:development:server` and `npm run start:development:client` in separate terminal instances. +2. Run `npm run build`. +3. Run `npm run start:development:server` and `npm run start:development:client` in separate terminal instances. * `npm run start:development:server` uses [nodemon](https://github.com/remy/nodemon) to watch for changes to the server-side JavaScript. * `npm run start:development:client` watches for changes in the client-side source. -3. Access the UI in your browser. Defaults to `localhost:4200`. +4. Access the UI in your browser. Defaults to `localhost:4200`. ### Environment Variables diff --git a/server/util/rTorrentDeserializer.js b/server/util/rTorrentDeserializer.js index 3726caea0..44e997ceb 100644 --- a/server/util/rTorrentDeserializer.js +++ b/server/util/rTorrentDeserializer.js @@ -71,6 +71,7 @@ const closeTag = elementName => { case 'data': case 'params': case 'param': + case 'fault': case 'member': break; From 245e6b1cba28772ae4f6a8cca904dc9552fc4125 Mon Sep 17 00:00:00 2001 From: Wheeler Law Date: Thu, 10 Oct 2019 14:29:28 -0400 Subject: [PATCH 2/3] reject when we get a fault, but pass the fault message --- server/util/rTorrentDeserializer.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server/util/rTorrentDeserializer.js b/server/util/rTorrentDeserializer.js index 44e997ceb..6093dff5b 100644 --- a/server/util/rTorrentDeserializer.js +++ b/server/util/rTorrentDeserializer.js @@ -6,6 +6,7 @@ let tmpData; let dataIsVal; let endOfResponse; let rejectCallback; +let fault; const openTag = elementName => { if (elementName === 'array' || elementName === 'struct') { @@ -71,10 +72,13 @@ const closeTag = elementName => { case 'data': case 'params': case 'param': - case 'fault': case 'member': break; + case 'fault': + fault = true; + break; + default: rejectCallback(`Unexpected XML-RPC Tag: ${elementName}`); } @@ -86,6 +90,7 @@ const deserialize = (data, resolve, reject) => { tmpData = []; dataIsVal = false; endOfResponse = false; + fault = false; rejectCallback = reject; const parser = new saxen.Parser(); parser.on('openTag', openTag); @@ -94,6 +99,9 @@ const deserialize = (data, resolve, reject) => { parser.on('error', onError); parser.parse(data); if (endOfResponse) { + if (fault) { + return reject(dataStack[0]); + } return resolve(dataStack[0]); } return reject('truncated response was received'); From 935150f40e0b9ebd118ba3e0742e67d6a2f6e2e9 Mon Sep 17 00:00:00 2001 From: Wheeler Law Date: Thu, 10 Oct 2019 14:31:54 -0400 Subject: [PATCH 3/3] get the fault string and pass it as the message property in the response object --- server/util/ajaxUtil.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/util/ajaxUtil.js b/server/util/ajaxUtil.js index 55f0fdf70..9e0d90d5d 100644 --- a/server/util/ajaxUtil.js +++ b/server/util/ajaxUtil.js @@ -11,6 +11,12 @@ const ajaxUtil = { }; } + if (typeof error === 'object' && error.faultString !== undefined) { + error = { + message: error.faultString, + } + } + res.status(500).json(error); } else { res.json(data);