From b411176c8d19c5a27d8d8befe7804c096f9cf99d Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Tue, 28 Nov 2017 09:27:44 -0500 Subject: [PATCH] better error message handling --- .../organizationVaultAttachmentsController.js | 10 ++---- src/app/services/validationService.js | 36 +++++++++++++++++++ src/app/vault/vaultAttachmentsController.js | 10 ++---- src/app/vault/vaultController.js | 7 ++-- 4 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/app/organization/organizationVaultAttachmentsController.js b/src/app/organization/organizationVaultAttachmentsController.js index e91b909934..05635c60b2 100644 --- a/src/app/organization/organizationVaultAttachmentsController.js +++ b/src/app/organization/organizationVaultAttachmentsController.js @@ -35,13 +35,9 @@ toastr.success('The attachment has been added.'); closing = true; $uibModalInstance.close(true); - }, function (err) { - if (err) { - validationService.addError(form, 'file', err, true); - } - else { - validationService.addError(form, 'file', 'Something went wrong.', true); - } + }, function (e) { + var errors = validationService.parseErrors(e); + toastr.error(errors.length ? errors[0] : 'An error occurred.'); }); }; diff --git a/src/app/services/validationService.js b/src/app/services/validationService.js index e52e314b97..1e83b2eb23 100644 --- a/src/app/services/validationService.js +++ b/src/app/services/validationService.js @@ -62,5 +62,41 @@ } }; + _service.parseErrors = function (reason) { + var data = reason.data; + var defaultErrorMessage = 'An unexpected error has occurred.'; + var errors = []; + + if (!data || !angular.isObject(data)) { + errors.push(defaultErrorMessage); + return errors; + } + + if (data && data.ErrorModel) { + data = data.ErrorModel; + } + + if (!data.ValidationErrors) { + if (data.Message) { + errors.push(data.Message); + } + else { + errors.push(defaultErrorMessage); + } + } + + for (var key in data.ValidationErrors) { + if (!data.ValidationErrors.hasOwnProperty(key)) { + continue; + } + + for (var i = 0; i < data.ValidationErrors[key].length; i++) { + errors.push(data.ValidationErrors[key][i]); + } + } + + return errors; + }; + return _service; }); diff --git a/src/app/vault/vaultAttachmentsController.js b/src/app/vault/vaultAttachmentsController.js index c2d839fa0c..7556ad3750 100644 --- a/src/app/vault/vaultAttachmentsController.js +++ b/src/app/vault/vaultAttachmentsController.js @@ -45,13 +45,9 @@ fileEl.type = ''; fileEl.type = 'file'; fileEl.value = ''; - }, function (err) { - if (err) { - validationService.addError(form, 'file', err, true); - } - else { - validationService.addError(form, 'file', 'Something went wrong.', true); - } + }, function (e) { + var errors = validationService.parseErrors(e); + toastr.error(errors.length ? errors[0] : 'An error occurred.'); }); }; diff --git a/src/app/vault/vaultController.js b/src/app/vault/vaultController.js index bbf0e7a7f8..4c9ca38fe5 100644 --- a/src/app/vault/vaultController.js +++ b/src/app/vault/vaultController.js @@ -2,7 +2,7 @@ .module('bit.vault') .controller('vaultController', function ($scope, $uibModal, apiService, $filter, cryptoService, authService, toastr, - cipherService, $q, $localStorage, $timeout, $rootScope, $state, $analytics, constants) { + cipherService, $q, $localStorage, $timeout, $rootScope, $state, $analytics, constants, validationService) { $scope.loading = true; $scope.ciphers = []; $scope.folderCount = 0; @@ -496,8 +496,9 @@ selectAll(false); $scope.bulkActionLoading = false; toastr.success('Items have been deleted!'); - }, function () { - toastr.error('An error occurred.'); + }, function (e) { + var errors = validationService.parseErrors(e); + toastr.error(errors.length ? errors[0] : 'An error occurred.'); $scope.bulkActionLoading = false; }); };