diff --git a/src/backend/src/services/drivers/CoercionService.js b/src/backend/src/services/drivers/CoercionService.js index 0496d064..13f429bf 100644 --- a/src/backend/src/services/drivers/CoercionService.js +++ b/src/backend/src/services/drivers/CoercionService.js @@ -17,6 +17,7 @@ * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ +const APIError = require("../../api/APIError"); const BaseService = require("../BaseService"); const { TypeSpec } = require("./meta/Construct"); const { TypedValue } = require("./meta/Runtime"); @@ -67,9 +68,20 @@ class CoercionService extends BaseService { }, coerce: async typed_value => { this.log.noticeme('coercion is running!'); - const response = await CoercionService.MODULES.axios.get(typed_value.value, { - responseType: 'stream', - }); + + const response = await(async () => { + try { + return await CoercionService.MODULES.axios.get(typed_value.value, { + responseType: 'stream', + }); + } catch (e) { + APIError.create('field_invalid', null, { + key: 'url', + expected: 'web URL', + got: 'error during request: ' + e.message, + }); + } + })(); return new TypedValue({ diff --git a/src/backend/src/services/drivers/FileFacade.js b/src/backend/src/services/drivers/FileFacade.js index 2a536f7c..f57b7eb8 100644 --- a/src/backend/src/services/drivers/FileFacade.js +++ b/src/backend/src/services/drivers/FileFacade.js @@ -23,6 +23,7 @@ const { MultiValue } = require("../../util/multivalue"); const { stream_to_buffer } = require("../../util/streamutil"); const { PassThrough } = require("stream"); const { LLRead } = require("../../filesystem/ll_operations/ll_read"); +const APIError = require("../../api/APIError"); /** * @class FileFacade @@ -89,9 +90,19 @@ class FileFacade extends AdvancedBase { }); this.values.add_factory('stream', 'web_url', async web_url => { - const response = await FileFacade.MODULES.axios.get(web_url, { - responseType: 'stream', - }); + const response = await(async () => { + try { + return await FileFacade.MODULES.axios.get(web_url, { + responseType: 'stream', + }); + } catch (e) { + throw APIError.create('field_invalid', null, { + key: 'url', + expected: 'web URL', + got: 'error during request: ' + e.message, + }); + } + })(); return response.data; });