From b44fc1e6b2d1a1b9079a839bf9853d38cb15c654 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 19 Apr 2023 13:58:22 +0200 Subject: [PATCH] [Backport 4.5-7.16] Added new global error treatment (client-side) (#5381) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added new global error treatment (client-side) (#4163) * Fixed catch error throw string instead error * Added ErrorFactory with tests * Implemented ErrorFactory on generic-request and tests * Fixed tests * Refactored errorfactory for create differents error types * Added prevent create new error when it is * Added error factory in wz-request * Added error factory in wz-api-check * Added error factory in saved-objects and tests * Changed wz-api-check for typescript file * Refactoring error factory * Fixed generic-request test * Added Settings Controller tests for onInit event * Edited ErrorFactory createError * Added check api service tests * Moved error factory files * Added error-handler with new implementation * Fixed types and unit tests * Skiped some unit tests * Skiped react services unit tests * Added unit test to return error in error handler * Added new errors classes relantionship * Resolved conflict * Reordered folder structure * Added error factory unit test for every error classes * Added error handler unit tests * Fixed and skipped some errors * Updated hook and hoc unit tests * Restoring services state * Added README * Fixed unit tests * Fixed check api service * Unit tests check api service * Added unit tests for errorHandler HOC and updated README * Updated handle error return error instance and unit tests * Added logOptions in error classes, types and unit tests * Fixed unit test useErrorHandler hook * Added WazuhError abstract class * Added error handler decorator v1 * Fixed generic request unit tests * Fixed saved objects unit tests * Fixed wz api check unit tests * Removed wz request unit test * Changed log error options * Cleaned decorator * Fixed decorator unit tests * Cleaned code decorator unit tests * Modified error handler hook and fixed unit tests * Added README content index * Fixed content links * Updated README * Updated README with more error management details * Checking signed commit * Checking which unit test throw error * Fixed unit tests for Hook and Decorator * Added error types treatment in README * Updated README * Renamed elastic to indexer * Added error display with custom title and message * Added title and message customization for every error * Added error prompt in error handler HOC * Modified callback call in error handler hook * Added new error categorization method with unit tests * Adde docs folder and examples with unit tests * Updated docs README * Updated root README * Solved unit tests * Added error handler uses cases examples docs * Updated README error treatment by types * Updated Readme * Added title to log native javascript errors * Modified console log error message structure * [Backport 4.5-2.3-wzd] Fix Changelog for WzD (#4893) Fix Changelog for WzD (#4890) (cherry picked from commit 839189756985bfbb73cb1e2360ae22197cec5ba6) Co-authored-by: Álex * Init changelog 4.5.0 * Bump to 4.5.0 * Bump development Docker environments to 4.5.0 (#4896) * Fix references to Elasticsearch in plugin for Wazuh stack (#4894) * fix references to elasticsearch in plugin for wazuh stack * CHANGELOG * cleaning code Co-authored-by: Álex * [Backport 4.5] Typo correction (#4688) (#4913) Typo correction (#4688) (#4911) * Typo correction (#4688) * Fix adn typo in module description * Fix arequest typo in comment * Fix avaliable typo in error message * Fix badgets typo in comment * fix de/the typo in comment * Fix dependentes typo in comment * Fix missing apostrophe in UI warning message * Fix Iventory typo in module description * Fix onwner typo in filter bar descriptions of the FIM inventory * Fix "othe" typo in module description * Remove word apparently added by mistake in PR #3120 * Fix "resouces" typo in module description * Fix "resutls" typo in module description * Fix "retuns" typo in comment code * Added missing "y" to "successfull" message when removing policy * Fix "sugguestions" typo in comment * Removed extra t in "VirustTotal" on the sample data screen Co-authored-by: Álex * Update Changelog * fix(tests): update snapshots Co-authored-by: Juan Carlos Tello Co-authored-by: Antonio David Gutiérrez (cherry picked from commit 4ca3aeaf57d27b1f2c4061f4360c5239a5ecfd33) * [Backport 4.5] Fix IPV6 visualizations (#4920) Fix IPV6 visualizations (#4909) * create compression function * Implement IPv6 compressor * Fix visualization in agent view * Create unit tests for ipv6-services * Update changelog * Add data type verification * Migrate to ts * Migrate to ts * Update to match the styleguide Co-authored-by: Álex (cherry picked from commit a83bc15dc429e475df497aa7a55b04c81af68d75) Co-authored-by: Nico Guevara <42900763+Tostti@users.noreply.github.com> * [Backport 4.5] 4711 error not caught and wrong error message in pci module (#4922) merge * Fix display of remote protocols when there are more than one (#4917) (#4941) * Modify render function to separate arrays * Update changelog (cherry picked from commit 5dba6f44b6ae0a5b6d3fd528dbfc805db21daa39) * [Backport 4.5] Add endpoint response (#4995) Add endpoint response (#4934) (cherry picked from commit be03e6ac78d99250bae0a43cf54cce616850d717) Co-authored-by: Nico Guevara <42900763+Tostti@users.noreply.github.com> * [Backport 4.5] Fix changelog (#5106) Fix changelog (#4936) Co-authored-by: Álex (cherry picked from commit ecf87845d9f55a1e0c52e6c8f96dbe585a359396) Co-authored-by: Federico Rodriguez * Bump v4.4.0-2.4.1-rc1 * Create codeql.yml (#4987) * Create codeql.yml Test CodeQL * Fix codeql workflow branches selector Suggested codeql branches were incorrectly set unquoted when the doc states they should be quoted * Create SECURITY.md * Update codeql.yml Update target branches as the workflow was not running as expected. * Update codeql.yml Remove CodeQL analysis results from pull requests (which are public) * Create dependabot.yml Create dependabot configuration, indicating the package manager manually for each branch. * Update codeql.yml Add a schedule and new branches to the codeql analysis job * Enable npm scan instead of yarn scan Use package.json instead of yarn as there are no yarn.lock in this repository yet. * Update dependabot.yml * Update dependabot.yml Use quotation in branches with numeric shape, so it is recognized as a string, instead of a number. Added quotes in all target-branch instances to avoid doubt when editing. * Update codeql.yml - Add matrix strategy to run the workflow on the desired branches. - Remove `on :push` trigger. * Update codeql.yml Add manual trigger * Update codeql.yml * Fix tests * Fix imposter's response * Add ignore and restrict fields (#5203) * Add ignore and restrict fields * change labels * add changelog * Remove the last dot * Change RexExp (#5201) * change RexExp * add changelog * Add `rel="noopener noreferrer"` in documentation links (#5197) * add rel="noopener noreferrer" * add changelog * edit changelog --------- Co-authored-by: Álex Ruiz * Add development Docker image for OpenSearch 2.6.0 Simplifies the images reciving the version to build as parameter * [Backport 4.5] Remove trailing `-` character for OS value in the list of agents (#5266) Remove trailing `-` character for OS value in the list of agents (#4828) * Remove - character when version is empty * Simplify field default value * Add changelog * Update CHANGELOG.md * Update CHANGELOG.md * Change group default value to - * Conflit resolution --------- Co-authored-by: Álex (cherry picked from commit 6a50c9b9f29f4fe86ca2d03c2c6bc444b92f8b66) Co-authored-by: Federico Rodriguez * Bump angular-material from 1.1.18 to 1.2.5 (#5147) Bumps [angular-material](https://github.com/angular/material) from 1.1.18 to 1.2.5. - [Release notes](https://github.com/angular/material/releases) - [Changelog](https://github.com/angular/material/blob/master/CHANGELOG.md) - [Commits](https://github.com/angular/material/compare/v1.1.18...v1.2.5) --- updated-dependencies: - dependency-name: angular-material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump jwt-decode from 2.2.0 to 3.1.2 (#5148) Bumps [jwt-decode](https://github.com/auth0/jwt-decode) from 2.2.0 to 3.1.2. - [Release notes](https://github.com/auth0/jwt-decode/releases) - [Changelog](https://github.com/auth0/jwt-decode/blob/master/CHANGELOG.md) - [Commits](https://github.com/auth0/jwt-decode/compare/v2.2.0...v3.1.2) --- updated-dependencies: - dependency-name: jwt-decode dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump markdown-it-link-attributes from 3.0.0 to 4.0.1 (#5149) Bumps [markdown-it-link-attributes](https://github.com/crookedneighbor/markdown-it-link-attributes) from 3.0.0 to 4.0.1. - [Release notes](https://github.com/crookedneighbor/markdown-it-link-attributes/releases) - [Changelog](https://github.com/crookedneighbor/markdown-it-link-attributes/blob/main/CHANGELOG.md) - [Commits](https://github.com/crookedneighbor/markdown-it-link-attributes/compare/v3.0.0...v4.0.1) --- updated-dependencies: - dependency-name: markdown-it-link-attributes dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump tslint from 5.20.1 to 6.1.3 (#5248) Bumps [tslint](https://github.com/palantir/tslint) from 5.20.1 to 6.1.3. - [Release notes](https://github.com/palantir/tslint/releases) - [Changelog](https://github.com/palantir/tslint/blob/master/CHANGELOG.md) - [Commits](https://github.com/palantir/tslint/compare/5.20.1...6.1.3) --- updated-dependencies: - dependency-name: tslint dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump winston from 3.5.1 to 3.8.2 (#5249) Bumps [winston](https://github.com/winstonjs/winston) from 3.5.1 to 3.8.2. - [Release notes](https://github.com/winstonjs/winston/releases) - [Changelog](https://github.com/winstonjs/winston/blob/master/CHANGELOG.md) - [Commits](https://github.com/winstonjs/winston/compare/v3.5.1...v3.8.2) --- updated-dependencies: - dependency-name: winston dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump axios from 0.21.4 to 1.3.4 (#5230) Bumps [axios](https://github.com/axios/axios) from 0.21.4 to 1.3.4. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v0.21.4...v1.3.4) --- updated-dependencies: - dependency-name: axios dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump eslint-import-resolver-typescript from 2.7.1 to 3.5.3 (#5250) Bumps [eslint-import-resolver-typescript](https://github.com/import-js/eslint-import-resolver-typescript) from 2.7.1 to 3.5.3. - [Release notes](https://github.com/import-js/eslint-import-resolver-typescript/releases) - [Changelog](https://github.com/import-js/eslint-import-resolver-typescript/blob/master/CHANGELOG.md) - [Commits](https://github.com/import-js/eslint-import-resolver-typescript/compare/v2.7.1...v3.5.3) --- updated-dependencies: - dependency-name: eslint-import-resolver-typescript dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump install from 0.10.4 to 0.13.0 (#5251) Bumps [install](https://github.com/benjamn/install) from 0.10.4 to 0.13.0. - [Release notes](https://github.com/benjamn/install/releases) - [Commits](https://github.com/benjamn/install/compare/v0.10.4...v0.13.0) --- updated-dependencies: - dependency-name: install dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump needle from 2.9.1 to 3.2.0 (#5253) Bumps [needle](https://github.com/tomas/needle) from 2.9.1 to 3.2.0. - [Release notes](https://github.com/tomas/needle/releases) - [Commits](https://github.com/tomas/needle/commits/v3.2.0) --- updated-dependencies: - dependency-name: needle dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump angular-animate from 1.7.8 to 1.8.3 (#5257) Bumps [angular-animate](https://github.com/angular/angular.js) from 1.7.8 to 1.8.3. - [Release notes](https://github.com/angular/angular.js/releases) - [Changelog](https://github.com/angular/angular.js/blob/master/CHANGELOG.md) - [Commits](https://github.com/angular/angular.js/compare/v1.7.8...v1.8.3) --- updated-dependencies: - dependency-name: angular-animate dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump typescript-eslint-parser from 18.0.0 to 22.0.0 (#5255) Bumps [typescript-eslint-parser](https://github.com/eslint/typescript-eslint-parser) from 18.0.0 to 22.0.0. - [Release notes](https://github.com/eslint/typescript-eslint-parser/releases) - [Changelog](https://github.com/eslint/typescript-eslint-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/eslint/typescript-eslint-parser/compare/v18.0.0...v22.0.0) --- updated-dependencies: - dependency-name: typescript-eslint-parser dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump eslint-plugin-filenames-simple from 0.7.0 to 0.8.0 (#5256) Bumps [eslint-plugin-filenames-simple](https://github.com/epaew/eslint-plugin-filenames-simple) from 0.7.0 to 0.8.0. - [Release notes](https://github.com/epaew/eslint-plugin-filenames-simple/releases) - [Changelog](https://github.com/epaew/eslint-plugin-filenames-simple/blob/master/CHANGELOG.md) - [Commits](https://github.com/epaew/eslint-plugin-filenames-simple/compare/v0.7.0...v0.8.0) --- updated-dependencies: - dependency-name: eslint-plugin-filenames-simple dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Bump js2xmlparser from 3.0.0 to 5.0.0 (#5252) Bumps [js2xmlparser](https://github.com/michaelkourlas/node-js2xmlparser) from 3.0.0 to 5.0.0. - [Release notes](https://github.com/michaelkourlas/node-js2xmlparser/releases) - [Changelog](https://github.com/michaelkourlas/node-js2xmlparser/blob/master/CHANGES.md) - [Commits](https://github.com/michaelkourlas/node-js2xmlparser/compare/v3.0.0...v5.0.0) --- updated-dependencies: - dependency-name: js2xmlparser dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Fix jest config Map axios module * Bump platform version to 2.6.0 * [Backport 4.5] Fix cannot read null properties bug in settings section (#5217) Fix cannot read null properties bug in settings section (#5135) * fixed bug cannot read null properties in settings section * changelog (cherry picked from commit 4c113f7f613e0c52d1e070721f64056c2b38d7e2) Co-authored-by: Chantal Belén kelm <99441266+chantal-kelm@users.noreply.github.com> * Revert "[Backport 4.5] Fix cannot read null properties bug in settings section" (#5275) Revert "[Backport 4.5] Fix cannot read null properties bug in settings section (#5217)" This reverts commit 2548fe35f59e0b8577f6ac6845490a91c6c7a9dd. * [Backport 4.5] Fix cannot read null properties bug in settings section (#5276) Fix cannot read null properties bug in settings section (#5135) * fixed bug cannot read null properties in settings section * changelog (cherry picked from commit 4c113f7f613e0c52d1e070721f64056c2b38d7e2) Co-authored-by: Chantal Belén kelm <99441266+chantal-kelm@users.noreply.github.com> * Add noopener noreferrer to externals links (#5274) * Add noopener noreferrer to externals links * Fix test * Add target=_blank and rel=noopener noreferrer * add changelog * Fixed catch error throw string instead error * Added error factory in saved-objects and tests * Restoring services state * Resolved conflict in check api service * Updated CHANGELOG * Fixed throw error when saved object index pattern not exists * Fix TypeError in FIM Inventory using new error handler (#5364) * Resolved requested changes * Updated CHANGELOG --------- Signed-off-by: dependabot[bot] Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Álex Co-authored-by: Chantal Belén kelm <99441266+chantal-kelm@users.noreply.github.com> Co-authored-by: Nico Guevara <42900763+Tostti@users.noreply.github.com> Co-authored-by: Federico Rodriguez Co-authored-by: Gabriel Díaz Co-authored-by: Ian Yenien Serrano <63758389+yenienserrano@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Antonio <34042064+Desvelao@users.noreply.github.com> (cherry picked from commit 16b55a10fcd2f7c8735d1f917c9251b1e93defe0) Co-authored-by: Maximiliano Ibarra <6089438+Machi3mfl@users.noreply.github.com> --- CHANGELOG.md | 2 + .../agents/fim/inventory/fileDetail.tsx | 40 ++- public/components/agents/sca/inventory.tsx | 4 +- .../services/check-api.service.test.ts | 121 +++++++ .../services/check-api.service.ts | 6 +- .../alerts/alerts-configurations.test.tsx | 66 ++-- .../office365/office365.test.tsx | 7 +- public/controllers/settings/settings.test.ts | 151 +++++++++ .../{error-handler.js => error-handler.ts} | 89 ++--- .../error-management/docs/README.md | 292 +++++++++++++++++ .../error-management/docs/examples/README.md | 184 +++++++++++ .../error-handler-class-example.test.tsx | 251 ++++++++++++++ .../error-handler-examples-unit-tests.jpg | Bin 0 -> 89337 bytes .../docs/examples/images/log-error.png | Bin 0 -> 171366 bytes .../examples/images/toast-error-details.png | Bin 0 -> 47556 bytes .../docs/examples/images/toast-error.png | Bin 0 -> 9705 bytes .../error-factory/error-factory.test.ts | 101 ++++++ .../error-factory/error-factory.ts | 48 +++ .../error-factory/errors/HttpError.ts | 20 ++ .../error-factory/errors/IndexerApiError.ts | 8 + .../error-factory/errors/WazuhApiError.ts | 8 + .../error-factory/errors/WazuhError.ts | 13 + .../errors/WazuhReportingError.ts | 8 + .../error-factory/errors/index.ts | 5 + .../error-management/error-factory/index.ts | 2 + .../error-handler-decorator.test.tsx | 30 ++ .../decorator/error-handler-decorator.ts | 13 + .../error-handler/error-handler.test.ts | 306 ++++++++++++++++++ .../error-handler/error-handler.ts | 150 +++++++++ .../hoc/withErrorHandler.test.tsx | 79 +++++ .../error-handler/hoc/withErrorHandler.tsx | 55 ++++ .../hooks/useErrorHandler.test.tsx | 59 ++++ .../error-handler/hooks/useErrorHandler.ts | 32 ++ .../error-management/error-handler/index.ts | 4 + .../react-services/error-management/index.ts | 2 + .../react-services/error-management/types.ts | 24 ++ .../error-orchestrator-ui.test.ts | 6 +- .../error-orchestrator-ui.ts | 8 +- public/react-services/generic-request.js | 4 +- public/react-services/generic-request.test.ts | 114 +++++++ public/react-services/saved-objects.js | 12 +- public/react-services/saved-objects.test.ts | 77 +++++ public/react-services/wz-api-check.js | 30 +- public/react-services/wz-api-check.test.ts | 74 +++++ public/react-services/wz-request.ts | 2 +- public/services/request-handler.js | 2 +- server/lib/error-response.ts | 30 +- 47 files changed, 2389 insertions(+), 150 deletions(-) create mode 100644 public/components/health-check/services/check-api.service.test.ts create mode 100644 public/controllers/settings/settings.test.ts rename public/react-services/{error-handler.js => error-handler.ts} (76%) create mode 100644 public/react-services/error-management/docs/README.md create mode 100644 public/react-services/error-management/docs/examples/README.md create mode 100644 public/react-services/error-management/docs/examples/error-handler-class-example.test.tsx create mode 100644 public/react-services/error-management/docs/examples/images/error-handler-examples-unit-tests.jpg create mode 100644 public/react-services/error-management/docs/examples/images/log-error.png create mode 100644 public/react-services/error-management/docs/examples/images/toast-error-details.png create mode 100644 public/react-services/error-management/docs/examples/images/toast-error.png create mode 100644 public/react-services/error-management/error-factory/error-factory.test.ts create mode 100644 public/react-services/error-management/error-factory/error-factory.ts create mode 100644 public/react-services/error-management/error-factory/errors/HttpError.ts create mode 100644 public/react-services/error-management/error-factory/errors/IndexerApiError.ts create mode 100644 public/react-services/error-management/error-factory/errors/WazuhApiError.ts create mode 100644 public/react-services/error-management/error-factory/errors/WazuhError.ts create mode 100644 public/react-services/error-management/error-factory/errors/WazuhReportingError.ts create mode 100644 public/react-services/error-management/error-factory/errors/index.ts create mode 100644 public/react-services/error-management/error-factory/index.ts create mode 100644 public/react-services/error-management/error-handler/decorator/error-handler-decorator.test.tsx create mode 100644 public/react-services/error-management/error-handler/decorator/error-handler-decorator.ts create mode 100644 public/react-services/error-management/error-handler/error-handler.test.ts create mode 100644 public/react-services/error-management/error-handler/error-handler.ts create mode 100644 public/react-services/error-management/error-handler/hoc/withErrorHandler.test.tsx create mode 100644 public/react-services/error-management/error-handler/hoc/withErrorHandler.tsx create mode 100644 public/react-services/error-management/error-handler/hooks/useErrorHandler.test.tsx create mode 100644 public/react-services/error-management/error-handler/hooks/useErrorHandler.ts create mode 100644 public/react-services/error-management/error-handler/index.ts create mode 100644 public/react-services/error-management/index.ts create mode 100644 public/react-services/error-management/types.ts create mode 100644 public/react-services/generic-request.test.ts create mode 100644 public/react-services/saved-objects.test.ts create mode 100644 public/react-services/wz-api-check.test.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 96b4aa2641..088e7ee864 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to the Wazuh app project will be documented in this file. - Added rel="noopener noreferrer" in documentation links. [#5197](https://github.com/wazuh/wazuh-kibana-app/pull/5197) [#5274](https://github.com/wazuh/wazuh-kibana-app/pull/5274) [#5298](https://github.com/wazuh/wazuh-kibana-app/pull/5298) - Added `ignore` and `restrict` options to Syslog configuration. [#5203](https://github.com/wazuh/wazuh-kibana-app/pull/5203) +- Added new global error treatment (client-side) [#4163](https://github.com/wazuh/wazuh-kibana-app/pull/4163) ### Changed @@ -22,6 +23,7 @@ All notable changes to the Wazuh app project will be documented in this file. - Fixed the display of more than one protocol in the Global configuration section [#4917](https://github.com/wazuh/wazuh-kibana-app/pull/4917) - Handling endpoint response was done when there is no data to show [#4918]https://github.com/wazuh/wazuh-kibana-app/pull/4918 - Fixed the 2 errors that appeared in console in Settings>Configuration section. [#5135](https://github.com/wazuh/wazuh-kibana-app/pull/5135) +- Fixed TypeError in FIM Inventory using new error handler [#5364](https://github.com/wazuh/wazuh-kibana-app/pull/5364) ## Wazuh v4.4.1 - Kibana 7.10.2, 7.16.x, 7.17.x - Revision 01 diff --git a/public/components/agents/fim/inventory/fileDetail.tsx b/public/components/agents/fim/inventory/fileDetail.tsx index 908d9c51f1..dd0b2bad8e 100644 --- a/public/components/agents/fim/inventory/fileDetail.tsx +++ b/public/components/agents/fim/inventory/fileDetail.tsx @@ -37,6 +37,7 @@ import { getDataPlugin, getUiSettings } from '../../../../kibana-services'; import { RegistryValues } from './registryValues'; import { formatUIDate } from '../../../../react-services/time-service'; import { FilterManager } from '../../../../../../../src/plugins/data/public/'; +import { ErrorHandler } from '../../../../react-services/error-management'; export class FileDetails extends Component { props!: { @@ -228,23 +229,28 @@ export class FileDetails extends Component { } async checkFilterManager(filters) { - const { filterManager } = getDataPlugin().query; - const _filters = filterManager.getFilters(); - if (_filters && _filters.length) { - const syscheckPathFilters = _filters.filter((x) => { - return x.meta.key === 'syscheck.path'; - }); - syscheckPathFilters.map((x) => { - filterManager.removeFilter(x); - }); - filterManager.addFilters([filters]); - const scope = await ModulesHelper.getDiscoverScope(); - scope.updateQueryAndFetch({ query: null }); - } else { - setTimeout(() => { - this.checkFilterManager(filters); - }, 200); + try { + const { filterManager } = getDataPlugin().query; + const _filters = filterManager.getFilters(); + if (_filters && _filters.length) { + const syscheckPathFilters = _filters.filter((x) => { + return x.meta.key === 'syscheck.path'; + }); + syscheckPathFilters.map((x) => { + filterManager.removeFilter(x); + }); + filterManager.addFilters([filters]); + const scope = await ModulesHelper.getDiscoverScope(); + scope.updateQueryAndFetch && scope.updateQueryAndFetch({ query: null }); + } else { + setTimeout(() => { + this.checkFilterManager(filters); + }, 200); + } + }catch(error){ + ErrorHandler.handleError(error as Error); } + } addFilter(field, value) { @@ -501,4 +507,4 @@ export class FileDetails extends Component { ); } -} +} \ No newline at end of file diff --git a/public/components/agents/sca/inventory.tsx b/public/components/agents/sca/inventory.tsx index 9ead171f21..5805151e44 100644 --- a/public/components/agents/sca/inventory.tsx +++ b/public/components/agents/sca/inventory.tsx @@ -636,5 +636,5 @@ export class Inventory extends Component { } Inventory.defaultProps = { - onClickRow: undefined, -}; + onClickRow: undefined +} diff --git a/public/components/health-check/services/check-api.service.test.ts b/public/components/health-check/services/check-api.service.test.ts new file mode 100644 index 0000000000..7e3e53790f --- /dev/null +++ b/public/components/health-check/services/check-api.service.test.ts @@ -0,0 +1,121 @@ +import * as service from './check-api.service'; +import { CheckLogger } from '../types/check_logger'; +import { ApiCheck, AppState } from '../../../react-services'; +import axios, { AxiosResponse } from 'axios'; + +jest.mock('axios'); +// app state +jest.mock('../../../react-services/app-state'); +jest.mock('../../../kibana-services', () => ({ + ...(jest.requireActual('../../../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name, value, options) => { + return true; + }, + get: () => { + return '{}'; + }, + remove: () => { + return; + }, + }), +})); + +const hostData = { + id: 'api', + url: 'url-mocked', + port: 9000, + username: 'username', + password: 'password', + run_as: false, +}; +const getApiHostsResponse: AxiosResponse = { + data: [hostData], + status: 200, + statusText: 'OK', + headers: {}, + config: {}, + request: {}, +}; + +const checkStoredErrorResponse: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: '3099 - ERROR3099 - Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: {}, + request: {}, +}; + +// checkLogger mocked +const checkLoggerMocked: CheckLogger = { + info: jest.fn(), + error: jest.fn(), + action: jest.fn(), +}; + +describe.skip('CheckApi Service', () => { + it('Should show logs info when api check pass successfully and have cluster_info ', async () => { + const currentApi = { id: 'api-mocked' }; + AppState.getCurrentAPI = jest.fn().mockReturnValue(JSON.stringify(currentApi)); + AppState.setClusterInfo = jest.fn(); + const checkStoredResponse = { + data: { + data: { + url: 'url-mocked', + port: 9000, + username: 'username', + password: 'password', + run_as: false, + cluster_info: { + status: 'enabled', + node: 'master', + manager: 'manager-mocked', + cluster: 'cluster-mocked', + }, + }, + }, + }; + ApiCheck.checkStored = jest.fn().mockResolvedValue(Promise.resolve(checkStoredResponse)); + await service.checkApiService({})(checkLoggerMocked); + expect(checkLoggerMocked.info).toBeCalledWith(`Current API id [${currentApi.id}]`); + expect(checkLoggerMocked.info).toBeCalledWith(`Checking current API id [${currentApi.id}]...`); + expect(checkLoggerMocked.info).toBeCalledWith(`Set cluster info in cookie`); + expect(checkLoggerMocked.info).toBeCalledTimes(3); + }); + + it('Should return ERROR and show logs info when api check fails on checkApi', async () => { + const currentApi = { id: 'api-mocked' }; + AppState.getCurrentAPI = jest.fn().mockReturnValue(JSON.stringify(currentApi)); + AppState.setClusterInfo = jest.fn(); + ApiCheck.checkStored = jest.fn().mockResolvedValue(Promise.reject(checkStoredErrorResponse)); + (axios as jest.MockedFunction).mockResolvedValue( + Promise.resolve(getApiHostsResponse) + ); + + ApiCheck.checkApi = jest.fn().mockResolvedValue(Promise.reject(checkStoredErrorResponse)); + + try { + await service.checkApiService({})(checkLoggerMocked); + } catch (error) { + expect(error).toBeDefined(); + expect(typeof error).not.toBe('string'); + expect(error.message).toContain('No API available to connect'); + expect(error).toBeInstanceOf(Error); + } + }); +}); diff --git a/public/components/health-check/services/check-api.service.ts b/public/components/health-check/services/check-api.service.ts index a505d6c406..72ff1ec5c3 100644 --- a/public/components/health-check/services/check-api.service.ts +++ b/public/components/health-check/services/check-api.service.ts @@ -60,13 +60,13 @@ const trySetDefault = async (checkLogger: CheckLogger) => { ); } } - return Promise.reject('No API available to connect'); + return Promise.reject(new Error('No API available to connect')); } } - return Promise.reject('No API configuration found'); + return Promise.reject(new Error('No API configuration found')); } catch (error) { checkLogger.error(`Error connecting to API: ${error}`); - return Promise.reject(`Error connecting to API: ${error}`); + return Promise.reject(new Error(`Error connecting to API: ${error}`)); } }; diff --git a/public/controllers/management/components/management/configuration/alerts/alerts-configurations.test.tsx b/public/controllers/management/components/management/configuration/alerts/alerts-configurations.test.tsx index 311992fdb8..2046a5030e 100644 --- a/public/controllers/management/components/management/configuration/alerts/alerts-configurations.test.tsx +++ b/public/controllers/management/components/management/configuration/alerts/alerts-configurations.test.tsx @@ -5,53 +5,47 @@ import { Provider } from 'react-redux'; import configureMockStore from 'redux-mock-store'; jest.mock('../../../../../../kibana-services', () => ({ - getUiSettings:() => ({ - get:() => { - return false - } - }), + getAngularModule: jest.fn(), + getUiSettings: () => ({ + get: () => { + return false; + }, + }), })); const mockProps = { - "clusterNodeSelected":"master-node", - "agent":{ - "id":"000" + clusterNodeSelected: 'master-node', + agent: { + id: '000', + }, + refreshTime: false, + currentConfig: { + 'analysis-alerts': { + alerts: { + email_alert_level: 12, + log_alert_level: 3, + }, }, - "refreshTime":false, - "currentConfig":{ - "analysis-alerts":{ - "alerts":{ - "email_alert_level":12, - "log_alert_level":3 - } - }, - "analysis-labels":{ - "labels":[ - - ] - }, - "mail-alerts":"Fetch configuration. 3013 - Error connecting with socket", - "monitor-reports":{ - - }, - "csyslog-csyslog":"Fetch configuration. 3013 - Error connecting with socket" + 'analysis-labels': { + labels: [], }, - "wazuhNotReadyYet":"" - } - + 'mail-alerts': 'Fetch configuration. 3013 - Error connecting with socket', + 'monitor-reports': {}, + 'csyslog-csyslog': 'Fetch configuration. 3013 - Error connecting with socket', + }, + wazuhNotReadyYet: '', +}; const mockStore = configureMockStore(); const store = mockStore({}); describe('WzConfigurationAlerts component mount OK', () => { - it('renders correctly to match the snapshot', () => { const wrapper = shallow( - - - - ); + + + + ); expect(wrapper).toMatchSnapshot(); }); - -}); \ No newline at end of file +}); diff --git a/public/controllers/management/components/management/configuration/office365/office365.test.tsx b/public/controllers/management/components/management/configuration/office365/office365.test.tsx index 8be9e96fb5..a00dea90cb 100644 --- a/public/controllers/management/components/management/configuration/office365/office365.test.tsx +++ b/public/controllers/management/components/management/configuration/office365/office365.test.tsx @@ -17,13 +17,14 @@ import { Provider } from 'react-redux'; import configureMockStore from 'redux-mock-store'; jest.mock('../../../../../../kibana-services', () => ({ + getAngularModule: jest.fn(), getUiSettings: () => ({ get: (uiSetting: string) => { if (uiSetting === 'theme:darkMode') { - return false + return false; } - } - }) + }, + }), })); const mockStore = configureMockStore(); diff --git a/public/controllers/settings/settings.test.ts b/public/controllers/settings/settings.test.ts new file mode 100644 index 0000000000..32e12be42a --- /dev/null +++ b/public/controllers/settings/settings.test.ts @@ -0,0 +1,151 @@ +import { ApiCheck, AppState, formatUIDate } from '../../react-services'; +import { SettingsController } from './settings'; +import { ErrorHandler } from '../../react-services/error-management'; +import { UI_LOGGER_LEVELS } from '../../../common/constants'; +import { UI_ERROR_SEVERITIES } from '../../react-services/error-orchestrator/types'; + +import { ManageHosts } from '../../../server/lib/manage-hosts'; +import axios, { AxiosResponse } from 'axios'; +jest.mock('../../react-services/time-service'); +jest.mock('../../react-services/app-state'); +jest.mock('../../react-services/saved-objects'); +// axios mocked +jest.mock('axios'); +// mocked some required kibana-services +jest.mock('../../kibana-services', () => ({ + ...(jest.requireActual('../../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name: string, value: any, options: object) => { + return true; + }, + }), + formatUIDate: jest.fn(), +})); + +// mocked window object +Object.defineProperty(window, 'location', { + value: { + hash: { + endsWith: jest.fn(), + includes: jest.fn(), + }, + href: jest.fn(), + assign: jest.fn(), + search: jest.fn().mockResolvedValue({ + tab: 'api', + }), + path: jest.fn(), + }, + writable: true, +}); +// mocked scope dependency +const $scope = { + $applyAsync: jest.fn(), +}; +// mocked getErrorOrchestrator +const mockedGetErrorOrchestrator = { + handleError: jest.fn(), +}; + +jest.mock('../../react-services/common-services', () => { + return { + getErrorOrchestrator: () => mockedGetErrorOrchestrator, + }; +}); + +// mocked getAppInfo response /api/setup +const getAppInfoResponse: AxiosResponse = { + data: { + data: { + name: 'wazuh-api', + 'app-version': 'version-mocked', + revision: 'mocked-revision', + installationDate: new Date().toDateString(), + lastRestart: new Date().toDateString(), + hosts: {}, + }, + }, + status: 200, + statusText: 'OK', + headers: {}, + config: {}, + request: {}, +}; + +describe('Settings Controller', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + describe('$onInit', () => { + it('Should return ERROR instance on ErrorOrchestrator options when checkApiStatus throw error and fails', async () => { + const checkApisStatusErrorMocked = ErrorHandler.createError( + '3099 - ERROR3099 - Wazuh not ready yet' + ); + const controller = new SettingsController($scope, window, window.location, ErrorHandler); + const expectedErrorOrchestratorOptions = { + context: `${SettingsController.name}.$onInit`, + level: UI_LOGGER_LEVELS.ERROR, + severity: UI_ERROR_SEVERITIES.BUSINESS, + store: true, + error: { + error: checkApisStatusErrorMocked, + message: checkApisStatusErrorMocked.message || checkApisStatusErrorMocked, + title: `${checkApisStatusErrorMocked.name}: Cannot initialize Settings`, + }, + }; + controller.getSettings = jest.fn().mockResolvedValue([]); + controller.checkApisStatus = jest + .fn() + .mockResolvedValue(Promise.reject(checkApisStatusErrorMocked)); + await controller.$onInit(); + expect(mockedGetErrorOrchestrator.handleError).toBeCalledTimes(1); + expect(mockedGetErrorOrchestrator.handleError).toBeCalledWith( + expectedErrorOrchestratorOptions + ); + }); + + it('Should return ERROR instance on ErrorOrchestrator options when apiIsDown = true because checkManager fails', async () => { + const checkApiErrorMocked = ErrorHandler.createError( + '3099 - ERROR3099 - Wazuh not ready yet' + ); + const expectedErrorOrchestratorOptions = { + context: `${SettingsController.name}.getAppInfo`, + level: UI_LOGGER_LEVELS.ERROR, + severity: UI_ERROR_SEVERITIES.BUSINESS, + error: { + error: checkApiErrorMocked, + message: checkApiErrorMocked.message || checkApiErrorMocked, + title: `${checkApiErrorMocked.name}`, + }, + }; + // checkApi must return error - Wazuh not ready yet + ApiCheck.checkApi = jest.fn().mockResolvedValue(Promise.reject(checkApiErrorMocked)); + // mock getAppInfo + (axios as jest.MockedFunction).mockResolvedValueOnce( + Promise.resolve(getAppInfoResponse) + ); + // mock formatUIDate + (formatUIDate as jest.MockedFunction).mockReturnValue('mocked-date'); + const controller = new SettingsController($scope, window, window.location, ErrorHandler); + controller.getSettings = jest.fn().mockResolvedValue([]); + // mocking manager hosts - apiEntries from wazuh.yml + const manageHosts = new ManageHosts(); + controller.apiEntries = await manageHosts.getHosts(); + await controller.$onInit(); + expect(mockedGetErrorOrchestrator.handleError).toBeCalledTimes(1); + expect(mockedGetErrorOrchestrator.handleError).toBeCalledWith( + expectedErrorOrchestratorOptions + ); + }); + }); +}); diff --git a/public/react-services/error-handler.js b/public/react-services/error-handler.ts similarity index 76% rename from public/react-services/error-handler.js rename to public/react-services/error-handler.ts index 0a794939a1..5a26c5e020 100644 --- a/public/react-services/error-handler.js +++ b/public/react-services/error-handler.ts @@ -9,17 +9,22 @@ * * Find more information about this on the LICENSE file. */ -import { getToasts } from '../kibana-services'; +import { getToasts } from '../kibana-services'; import store from '../redux/store'; import { updateWazuhNotReadyYet } from '../redux/actions/appStateActions'; import { WzMisc } from '../factories/misc'; import { CheckDaemonsStatus } from './check-daemons-status'; +interface IHistoryItem { + text: string; + date: any; +} const wzMisc = new WzMisc(); let history = []; const filterHistoryTimeInMs = 2000; -const filterRecentHistory = date => history.filter(item => date - item.date <= filterHistoryTimeInMs); -const isErrorRecentlyShown = text => history.some(item => item.text === text) +const filterRecentHistory = (date) => + history.filter((item: IHistoryItem) => date - item.date <= filterHistoryTimeInMs); +const isErrorRecentlyShown = (text) => history.some((item: IHistoryItem) => item.text === text); export class ErrorHandler { /** @@ -33,43 +38,45 @@ export class ErrorHandler { origin.includes('/api/request') || origin.includes('/api/csv') || origin.includes('/api/agents-unique'); - return isFromAPI - ? 'Wazuh API is not reachable. Reason: timeout.' - : 'Server did not respond'; - }; - if ((((error || {}).data || {}).errorData || {}).message){ + return isFromAPI ? 'Wazuh API is not reachable. Reason: timeout.' : 'Server did not respond'; + } + + if ((((error || {}).response || {}).data || {}).message) { + return error.response.data.message; + } + if ((((error || {}).data || {}).errorData || {}).message) { return error.data.errorData.message; - }; - if (((error || {}).errorData || {}).message){ + } + if (((error || {}).errorData || {}).message) { return error.errorData.message; - } ; - if (typeof (error || {}).data === 'string'){ + } + if (typeof (error || {}).data === 'string') { return error.data; - }; - if (typeof ((error || {}).data || {}).error === 'string'){ + } + if (typeof ((error || {}).data || {}).error === 'string') { return error.data.error; - }; - if (typeof ((error || {}).data || {}).message === 'string'){ + } + if (typeof ((error || {}).data || {}).message === 'string') { return error.data.message; - }; - if (typeof (((error || {}).data || {}).message || {}).msg === 'string'){ + } + if (typeof (((error || {}).data || {}).message || {}).msg === 'string') { return error.data.message.msg; - }; - if (typeof ((error || {}).data || {}).data === 'string'){ + } + if (typeof ((error || {}).data || {}).data === 'string') { return error.data.data; - }; - if (typeof error.message === 'string'){ + } + if (typeof error.message === 'string') { return error.message; - }; - if (((error || {}).message || {}).msg){ + } + if (((error || {}).message || {}).msg) { return error.message.msg; - }; - if (typeof error === 'string'){ - return error - }; - if (typeof error === 'object' && error !== null){ - return JSON.stringify(error) - }; + } + if (typeof error === 'string') { + return error; + } + if (typeof error === 'object' && error !== null) { + return JSON.stringify(error); + } return error || 'Unexpected error'; } @@ -129,7 +136,7 @@ export class ErrorHandler { * @param {boolean} [params.warning=false] If true, the toast is yellow * @param {boolean} [params.silent=false] If true, no message is shown */ - static handle(error, location, params = {warning: false, silent: false}) { + static handle(error, location, params = { warning: false, silent: false }) { const message = ErrorHandler.extractMessage(error); const messageIsString = typeof message === 'string'; if (messageIsString && message.includes('ERROR3099')) { @@ -142,17 +149,17 @@ export class ErrorHandler { const origin = ((error || {}).config || {}).url || ''; const originIsString = typeof origin === 'string' && origin.length; - if (wzMisc.getBlankScr()){ - params.silent = true - }; + if (wzMisc.getBlankScr()) { + params.silent = true; + } const hasOrigin = messageIsString && originIsString; let text = hasOrigin ? `${message} (${origin})` : message; - if (error.extraMessage){ - text = error.extraMessage - }; + if (error.extraMessage) { + text = error.extraMessage; + } text = location ? `${location}. ${text}` : text; @@ -172,9 +179,7 @@ export class ErrorHandler { if (!params.silent && !recentlyShown) { if ( params.warning || - (text && - typeof text === 'string' && - text.toLowerCase().includes('no results')) + (text && typeof text === 'string' && text.toLowerCase().includes('no results')) ) { getToasts().addWarning(text); } else { @@ -183,4 +188,4 @@ export class ErrorHandler { } return text; } -}; +} diff --git a/public/react-services/error-management/docs/README.md b/public/react-services/error-management/docs/README.md new file mode 100644 index 0000000000..52d2b1f0ba --- /dev/null +++ b/public/react-services/error-management/docs/README.md @@ -0,0 +1,292 @@ +# Content + +- [Scope](#scope) +- [Error sources](#error-sources) +- [Architecture](#architecture) +- [Components](#components) + - [Error handler](#error-handler) + - [Error orchestrator](#error-orchestrator) + - [React patterns](#react-patterns) + - [Error factory](#error-factory) + - [Error classes](#error-classes) + - [Error types treatment](#error-types-treatment) +- [How to use the Error Management](#how-to-use-the-error-management) + - [How to use Class](#how-to-use-class) + - [How to use Hook](#how-to-use-hook) + - [How to use HOC](#how-to-use-hoc) + - [How to use Decorator](#how-to-use-decorator) +- [React patterns artefact use cases](#react-patterns-artefact-use-cases) +- [Use cases examples documentation](#use-cases-examples-documentation) + +# Scope + +This solution try to simplify the error management in the wazuh-kibana-app plugin. +The main goal is to create a standard way to manage the errors in the plugin. +By this way, the developer must be abstracted to the error management. + +The error handler must receive and treat differents types of errors. +Exists the following error sources: +# Error sources + +- Operational errors (development) - Native javascript errors +- Wazuh API errors +- Indexer Error +- Http errors +- Etc + + +Our frontend server-side have a intermedial layer between the frontend and the backend APIs like Indexer and Wazuh. +This layer catch the error and categorize them by type and add a custom error code. + + ### Error codes: code + * wazuh-api-Indexer 20XX + * wazuh-api 30XX + * wazuh-Indexer 40XX + * wazuh-reporting 50XX + * unknown 1000 + + +Also, exists the native https response status codes. +### HTTP status code +- 200 = OK +- 201 = Created +- 202 = Accepted +- 204 = No Content +- 400 = Bad Request +- 401 = unauthorized +- 403 = forbidden +- 404 = not found +- 405 = method not allowed +- 500 = internal server error +- 501 = not implemented + +# Architecture + +The actual Error Management solution have the next architecture: + +```mermaid +graph TD; + withErrorHandler-HOC-->ErrorHandler + useErrorHandler-Hook-->ErrorHandler + errorHandlerDecorator-Decorator-->ErrorHandler + ErrorHandler-->ErrorFactory + ErrorHandler-->ErrorOrchestratorService + ErrorFactory-->WazuhApiError + ErrorFactory-->WazuhReportingError + ErrorFactory-->IndexerApiError + ErrorFactory-->IndexerError +``` + +# Components + +The error management solution is composed by some components, these components are: + +## Error handler + +The `error handler` is responsible to receive the errors (or strings) and define what type of error will be returned. +After identifying and classifying the parameters received the error factory returns a new error instance. +Always will return an error instance. + +## Error orchestrator + +The error orchestrator have the responsability to receive and error and showing it by the following ways: + +- Showing the error in a toast message `(Bussiness)` +- Showing the error in browser console.log `(UI)` +- Showing the error and render critical error page in the UI `(Blank-screen)` + +The current error handler tells the error orchestrator how the error will be shown to the user/developer. It sends the error and the showing options to the error orchestrator. + +For more details about the error orchestrator see the [Error Orchestrator documentation](https://github.com/wazuh/wazuh-kibana-app/blob/ef071e55fd310bdb4cecb7d490ea83372bb07b01/public/react-services/error-orchestrator/README.md) + +## React patterns + +The error handler can be implemented using react patterns: + +- ### HOC (Higher order component) +- ### Hook +- ### Decorator + +## Error factory + +The `error factory` is responsible to create different instances of error depending on the parameters received. + +**The error factory can receive:** +- A `string` +- An `error instance` +- An `error type`: this param defines the error type returned + +The errors returned are defined as the `error type` received. + +- WazuhApiError +- WazuhReportingError +- IndexerApiError +- HttpError + +## Error Classes + +The differents error classes make easier the error categorization and management. Every error class has a specific error treatment defined inside the class. +Via Poliformism and Interface contract the error handler and the error factory can handle all the error types defined. + + +The next diagram shows how is the relationship between the different types of errors created. + +```mermaid +classDiagram + +class iWazuhError { + <> + +Error error + +IWazuhErrorLogOptions logOptions +} + +iWazuhError <|-- WazuhError : implements +WazuhError <|-- HttpError : extends +HttpError <|-- WazuhApiError : extends +HttpError <|-- WazuhReportingError : extends +HttpError <|-- IndexerApiError : extends +HttpError <|-- IndexerError : extends + +``` + +By this way, the current solution allows to create new error types and add new error treatment without modify the error handler or the error factory. Each error type can have its own error treatment. This is a good practice and allow the scalability of the error management solution. + +# Error types treatment + +For every error type handled we have defined how the error will be showed or not to the user/developer. +In the next table we have defined how the will be treated. + +| Error type | show | store | display | +|---------------------|-------------|-------|---------| +| WazuhApiError | toast | | ✅ | +| WazuhReportingError | toast | | ✅ | +| IndexerApiError | toast | | ✅ | +| HttpError | toast | | ✅ | +| Error | log(error) | | ✅ | +| TypeError | log(error) | | ✅ | +| EvalError | log(error) | | ✅ | +| ReferenceError | log(error) | | ✅ | +| SyntaxError | log(error) | | ✅ | +| URIError | log(error) | | ✅ | + + +# How to use the Error Management + +Exists 4 artefacts implemented to use the error handler. + +- using javascript class `errorHandler` +- use a react hook called `useErrorHanlder` +- use a react HOC called `withErrorHandler` +- use a react decorator called `errorHandlerDecorator` + +These types of error handlers were created to give flexibility to the error management implementation. +All these implementations encapsulate the error handler class. + +## How to use Class + +The recommended use of the Error Handler is in `javascript methods (not react component)`. +This handler will receive an Error instance or error message and it will classify and categorize the error by its structure and create and return the corresponding Error instance. + +### Example + +```javascript +import ErrorHandler from 'error-handler'; + +// the handlerError is a static method +const newErrorCreated = ErrorHandler.handleError(errorResponse); +// the newErrorCreated var could be anyone error type defined in the graph above +``` + +## How to use Hook + +The recommended use of the Error handler hook is when we have any method inside a component that `makes an API call` that can fail. In this case, will pass the async method like a javascript callback. + +### Example + +```tsx + +import { useErrorHandler } from 'useErrorHandler' + +const anyAsyncFunction = async () => { + // this method could return an error or not +}; + +const [res, error] = useErrorHandler(anyAsyncFunction); + +if(error){ + // treat the error +} + +// the res var store the method response (API response) +``` + +**Important** +In this way, using the useErrorHandler hook we can omit the use of try-catch and do the code clear. + +## How to use HOC + +The recommended use of the Error Handler HOC is to catch all the errors produced in the `component lifecycle`. +This HOC will wrap the react component and will catch all the errors and treat them by the error handler class + +The HOC will recognize the errors in the following lyficlycle methods: + +- `ComponentDidMount` +- `ComponentDidUpdate` + +The HOC will not catch the errors in the render method. + +### Example +```tsx + +import { withErrorHandler } from 'withErrorHandler' + +const Component = (props) => { + useEffect(() => { + // Component did mount + functionWithError(); + }, []); + return
Example Component
; +}; + +const ComponentWrapped = withErrorHandler(Component); +``` + +In this way, using the errorHandler HOC we can catch all the errors by the error handler class + +## How to use Decorator + +The recommended use of the Error Handler Decorator is to catch all the errors produced in the `component user events methods`. +This Decorator will wrap the react component and will catch all the errors after the method is called. + + +```tsx + +import { errorHandlerDecorator } from 'error-handler-decorator' + +const Component = (props) => { + + // the method will be wrapped by the decorator + const onClickEvent = errorHandlerComponent(() => { + // this method could return an error or not + throw new Error('Error on click event'); + }) + + return ; +}; + +const ComponentWrapped = withErrorHandler(Component); +``` +# React patterns artefact use cases + + +| Artefact | When to use | +|-----------|------------------------------------------| +| HOC | On react lyfecicles methods | +| Hook | On functional component methods called after render (like react custom hook) | +| Decorator | On component user event methods | +| Class | On every method - recommend inside catch block| + + +# Use cases examples documentation + +For more details about the usage you can check [the examples documentation folder](../docs/examples) \ No newline at end of file diff --git a/public/react-services/error-management/docs/examples/README.md b/public/react-services/error-management/docs/examples/README.md new file mode 100644 index 0000000000..0e569ebfc8 --- /dev/null +++ b/public/react-services/error-management/docs/examples/README.md @@ -0,0 +1,184 @@ +# Error handler class + +The error handler class allows to the developer to manage the errors in a centralized way. +This class will receive an error instance or error message and it will classify and categorize the error by its structure and create and return the corresponding Error instance. +Also, every custom error class "WazuhError" have a proper log treatment defined inside the class. + +## 1 - On component when we want to log an error catched in the try-catch block + +### Scenario 1 + +- On a class component or a functional component +- Could be a event handler method. For instance: when the user clicks on a button. +- We want to leave the error handler auto-categorize the error and log how is defined in the respective error class. +- The error instance is a NATIVE JAVASCRIPT ERROR + +```tsx +import { ErrorHandler } from 'public/react-services/error-management'; + +const errorMocked = new Error('new Error handled'); + +class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(error); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } +} +``` + +- If the error is a native error the handler will log the error in console using the loglevel library + +![error-handler-class](./images/log-error.png)] + +### Scenario 2 + +- On a class component or a functional component +- Could be a event handler method. For instance: when the user clicks on a button. +- We want to leave the error handler auto-categorize the error and log how is defined in the respective error class. +- The error instance is a HTTP ERROR + +```tsx +class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something and throw the error + throw errorMocked; // the error must be an http error like when use the WzRequest.genericReq || apiReq.request + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(error); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } +} +``` + +- if the error is a custom HttpError the handler will log the error using the core toast service + +**Toast** + +![error-handler-class-http](./images/toast-error.png)] + +**Toast Content** + +![error-handler-class-http](./images/toast-error-details.png)] + +### Scenario 3 + +- On a class component or a functional component +- Could be a event handler method. For instance: when the user clicks on a button. +- We want to leave the error handler auto-categorize the error and log how is defined in the respective error class. +- The error instance can be any but we wan to customize the title and message shown in the toast/log + +```tsx +class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + const errorCreated = new TypeError('An custom error has occurred'); + + ErrorHandler.handleError(errorCreated, { + title: 'An error when click on button has occurred', + message: 'Check the error details in the "Full error" section', + }); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } +} +``` + +### Scenario 3 + +- On a class component or a functional component +- Could be a event handler method. For instance: when the user clicks on a button. +- We want to pass another error instance to the handler instead the error catched in the try-catch block + +```tsx +class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(errorCreated, { + title: 'An error when click on button has occurred', + message: 'Check the error details in the "Full error" section', + }); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } +} +``` + +## Examples unit tests + +![error-handler-class-unit-tests](./images/error-handler-examples-unit-tests.jpg) diff --git a/public/react-services/error-management/docs/examples/error-handler-class-example.test.tsx b/public/react-services/error-management/docs/examples/error-handler-class-example.test.tsx new file mode 100644 index 0000000000..fa813e7efe --- /dev/null +++ b/public/react-services/error-management/docs/examples/error-handler-class-example.test.tsx @@ -0,0 +1,251 @@ +import { fireEvent, render } from '@testing-library/react'; +import '@testing-library/jest-dom/extend-expect'; +import React, { Component } from 'react'; +import { ErrorHandler } from '../../error-handler'; +import { AxiosError, AxiosResponse } from 'axios'; +import { HttpError } from '../../error-factory'; +import { ErrorOrchestratorService } from '../../../error-orchestrator/error-orchestrator.service'; + + +// mocked some required kibana-services +jest.mock('../../../../kibana-services', () => ({ + ...(jest.requireActual('../../../../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name: string, value: string, options: any) => { + return true; + }, + }), +})); + +jest.mock('../../../error-orchestrator/error-orchestrator.service'); + +describe('Error Handler class example tests', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + describe('On component when we want to log an error catched in the try-catch block', () => { + it('When the error is a Native javascript error', () => { + const errorMocked = new Error('new Error handled'); + + class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(error); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } + } + + const { container, getByRole, getByText } = render(); + const spyErrorOrch = jest.spyOn(ErrorOrchestratorService, 'handleError'); + fireEvent.click(getByRole('button')); + expect(container).toBeInTheDocument(); + expect(getByText('Example component')).toBeInTheDocument(); + expect(spyErrorOrch).toHaveBeenCalledWith( + expect.objectContaining({ + error: { + title: '[An error has occurred]', + message: errorMocked.message, + error: errorMocked, + }, + }), + ); + }); + + it('When the error is a Http error (custom error type)', () => { + const httpErrorBody: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: 'Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: { + url: '/api/request', + data: { + params: 'here-any-custom-params', + }, // the data could contain the params of the request + }, + request: {}, + }; + + let errorMocked = new Error('Not found') as AxiosError; + errorMocked.response = httpErrorBody; + const spyIshttp = jest + .spyOn(ErrorHandler, 'isHttpError') + .mockImplementation(() => true); + class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something and throw the error + throw errorMocked; // the error must be an http error like when use the WzRequest.genericReq || apiReq.request + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(error); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } + } + + const { container, getByRole, getByText } = render(); + const createdError = ErrorHandler.createError(errorMocked) as HttpError; + fireEvent.click(getByRole('button')); + const spyErrorOrch = jest.spyOn(ErrorOrchestratorService, 'handleError'); + expect(container).toBeInTheDocument(); + expect(getByText('Example component')).toBeInTheDocument(); + expect(spyErrorOrch).toBeCalledTimes(1); + expect(spyErrorOrch).toBeCalledWith( + expect.objectContaining({ error: createdError.logOptions.error }), + ); + spyErrorOrch.mockRestore(); + spyIshttp.mockRestore(); + }); + + it('When we want to set a "Custom title and message"', () => { + const errorMocked = new Error('new Error handled'); + + class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(error, { + title: 'An error on event click has occurred', + message: `Check the following error: ${error.message}`, + }); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } + } + + const { container, getByRole, getByText } = render(); + const spyErrorOrch = jest.spyOn(ErrorOrchestratorService, 'handleError'); + fireEvent.click(getByRole('button')); + expect(container).toBeInTheDocument(); + expect(getByText('Example component')).toBeInTheDocument(); + expect(spyErrorOrch).toHaveBeenCalledWith( + expect.objectContaining({ + error: { + title: 'An error on event click has occurred', + message: `Check the following error: ${errorMocked.message}`, + error: errorMocked, + }, + }), + ); + }); + it('When we want to handle a created error in the try-catch block', () => { + const errorMocked = new Error('new Error handled'); + const errorCreated = new TypeError('An custom error has occurred'); + class ExampleComponent extends Component { + constructor(props: any) { + super(props); + } + + onClickEvent() { + try { + // do something + throw errorMocked; + } catch (error) { + // the error handler will auto-categorize the error and log how is defined in the respective error class + // if the error is custom (WazuhError) the handler error will return + if (error instanceof Error) { + ErrorHandler.handleError(errorCreated, { + title: 'An error when click on button has occurred', + message: 'Check the error details in the "Full error" section', + }); // the error handler returns the error instance + } + } + } + + render() { + return ( + <> +

Example component

+ + + ); + } + } + + const { container, getByRole, getByText } = render(); + const spyErrorOrch = jest.spyOn(ErrorOrchestratorService, 'handleError'); + fireEvent.click(getByRole('button')); + expect(container).toBeInTheDocument(); + expect(getByText('Example component')).toBeInTheDocument(); + expect(spyErrorOrch).toHaveBeenCalledWith( + expect.objectContaining({ + error: { + title: 'An error when click on button has occurred', + message: 'Check the error details in the "Full error" section', + error: errorCreated, + }, + }), + ); + expect(errorCreated).toBeInstanceOf(TypeError); + }); + }); +}); diff --git a/public/react-services/error-management/docs/examples/images/error-handler-examples-unit-tests.jpg b/public/react-services/error-management/docs/examples/images/error-handler-examples-unit-tests.jpg new file mode 100644 index 0000000000000000000000000000000000000000..573579fef1e0cfb5a2ef6cd586f4164d0b988093 GIT binary patch literal 89337 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

IJ@kse`MXu> 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

@Z^7~9|SEhqaCfbD&S9)l~>rO+*E6pEEjVlkl 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 literal 0 HcmV?d00001 diff --git a/public/react-services/error-management/docs/examples/images/log-error.png b/public/react-services/error-management/docs/examples/images/log-error.png new file mode 100644 index 0000000000000000000000000000000000000000..d2436cb6e32dd6240428776112a1e1eeb430b7a2 GIT binary patch literal 171366 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 RzZNb)QC3-|Ov>cT{{VUR(CGjG literal 0 HcmV?d00001 diff --git a/public/react-services/error-management/error-factory/error-factory.test.ts b/public/react-services/error-management/error-factory/error-factory.test.ts new file mode 100644 index 0000000000..635312d6a5 --- /dev/null +++ b/public/react-services/error-management/error-factory/error-factory.test.ts @@ -0,0 +1,101 @@ +/* + * Wazuh app - Error handler service + * Copyright (C) 2015-2022 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +import { AxiosError, AxiosResponse } from 'axios'; +import { ErrorFactory } from './error-factory'; +import { IndexerApiError, WazuhReportingError, HttpError, WazuhApiError } from './errors'; +import WazuhError from './errors/WazuhError'; + +const response: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: '3099 - ERROR3099 - Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: {}, + request: {}, +}; + +describe('Error Factory', () => { + it.each([ + { errorType: IndexerApiError, name: 'IndexerApiError' }, + { errorType: WazuhApiError, name: 'WazuhApiError' }, + { errorType: WazuhReportingError, name: 'WazuhReportingError' }, + { errorType: HttpError, name: 'HttpError' }, + ])( + 'Should return a $name when receive and error and error type', + ({ errorType, name }) => { + let error = new Error('Error') as AxiosError; + error = { + ...error, + ...response, + stack: error.stack, + }; + const errorCreated = ErrorFactory.create(errorType, { + error, + message: response.data.message + }); + expect(errorCreated.name).toBe(name); + expect(errorCreated.stack).toBe(error.stack); + expect(typeof errorCreated).not.toBe('string'); + }, + ); + + it('Should return a new ERROR when receive and error and error type and keep the received error Stack Trace', () => { + // creating an error with response property + let error = new Error('Error') as AxiosError; + error = { + ...error, + ...response, + stack: error.stack, + }; + const errorCreated = ErrorFactory.create(WazuhApiError, { + error, + message: response.data.message, + }); + expect(errorCreated.name).toBe('WazuhApiError'); + expect(errorCreated.stack).toBe(error.stack); + expect(typeof errorCreated).not.toBe('string'); + }); + + it('Should return a new ERROR instance of WazuhError(the parent class)', () => { + // creating an error with response property + let error = new Error('Error') as AxiosError; + error = { + ...error, + ...response, + stack: error.stack, + }; + const errorCreated = ErrorFactory.create(WazuhApiError, { + error, + message: response.data.message, + }); + expect(errorCreated).toBeInstanceOf(WazuhError); + }); + + it('Should return a new ERROR with the error type received like class name', () => { + // creating an error with response property + let error = new Error('Error') as AxiosError; + error = { + ...error, + ...response, + stack: error.stack, + }; + const errorCreated = ErrorFactory.create(WazuhApiError, { + error, + message: response.data.message, + }); + expect(errorCreated.name).toBe('WazuhApiError'); + }); +}); diff --git a/public/react-services/error-management/error-factory/error-factory.ts b/public/react-services/error-management/error-factory/error-factory.ts new file mode 100644 index 0000000000..14158221cd --- /dev/null +++ b/public/react-services/error-management/error-factory/error-factory.ts @@ -0,0 +1,48 @@ +/* + * Wazuh app - Error factory class + * Copyright (C) 2015-2022 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ + +import { + IWazuhError, + IWazuhErrorConstructor, +} from '../types'; +import { IErrorOpts } from '../types'; + +export class ErrorFactory { + /** + * Create an new error instance receiving an error instance or a string + * Paste error stack in new error + * @param error + * @param ErrorType + * @param message + * @returns Error instance + */ + public static create( + ErrorType: IWazuhErrorConstructor, + opts: IErrorOpts, + ): Error | IWazuhError { + return ErrorFactory.errorCreator(ErrorType, opts); + } + + /** + * Create an new error instance receiving a Error Type and message + * @param errorType Error instance to create + * @param message + * @returns Error instance depending type received + */ + + private static errorCreator( + ErrorType: IWazuhErrorConstructor, + opts: IErrorOpts, + ): IWazuhError { + return new ErrorType(opts?.error, { message: opts?.message, code: opts?.code }); + } +} diff --git a/public/react-services/error-management/error-factory/errors/HttpError.ts b/public/react-services/error-management/error-factory/errors/HttpError.ts new file mode 100644 index 0000000000..482e21b584 --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/HttpError.ts @@ -0,0 +1,20 @@ +import { IWazuhErrorInfo, IWazuhErrorLogOpts } from '../../types'; +import WazuhError from './WazuhError'; + +export class HttpError extends WazuhError { + logOptions: IWazuhErrorLogOpts; + constructor(error: Error, info?: IWazuhErrorInfo) { + super(error, info); + this.logOptions = { + error: { + message: `[${this.constructor.name}]: ${error.message}`, + title: `An error has occurred`, + error: error, + }, + level: 'ERROR', + severity: 'BUSINESS', + display: true, + store: false, + }; + } +} \ No newline at end of file diff --git a/public/react-services/error-management/error-factory/errors/IndexerApiError.ts b/public/react-services/error-management/error-factory/errors/IndexerApiError.ts new file mode 100644 index 0000000000..3aedb4d653 --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/IndexerApiError.ts @@ -0,0 +1,8 @@ +import { IWazuhErrorInfo, IWazuhErrorLogOpts } from '../../types'; +import { HttpError } from './HttpError'; + +export class IndexerApiError extends HttpError { + constructor(error: Error, info?: IWazuhErrorInfo) { + super(error, info); + } +} diff --git a/public/react-services/error-management/error-factory/errors/WazuhApiError.ts b/public/react-services/error-management/error-factory/errors/WazuhApiError.ts new file mode 100644 index 0000000000..edefd0e6b3 --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/WazuhApiError.ts @@ -0,0 +1,8 @@ +import { IWazuhErrorInfo, IWazuhErrorLogOpts } from '../../types'; +import { HttpError } from './HttpError'; + +export class WazuhApiError extends HttpError { + constructor(error: Error, info?: IWazuhErrorInfo) { + super(error, info); + } +} diff --git a/public/react-services/error-management/error-factory/errors/WazuhError.ts b/public/react-services/error-management/error-factory/errors/WazuhError.ts new file mode 100644 index 0000000000..219393948a --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/WazuhError.ts @@ -0,0 +1,13 @@ +import { IWazuhError, IWazuhErrorInfo, IWazuhErrorLogOpts } from "../../types"; + + +export default abstract class WazuhError extends Error { + abstract logOptions: IWazuhErrorLogOpts; + constructor(public error: Error, info?: IWazuhErrorInfo) { + super(info?.message || error.message); + const childrenName = this.constructor.name; // keep the children class name + Object.setPrototypeOf(this, WazuhError.prototype); // Because we are extending built in class + this.name = childrenName; + this.stack = this.error.stack; // keep the stack trace from children + } +} \ No newline at end of file diff --git a/public/react-services/error-management/error-factory/errors/WazuhReportingError.ts b/public/react-services/error-management/error-factory/errors/WazuhReportingError.ts new file mode 100644 index 0000000000..1c1d0d78d0 --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/WazuhReportingError.ts @@ -0,0 +1,8 @@ +import { IWazuhErrorInfo, IWazuhErrorLogOpts } from '../../types'; +import { HttpError } from './HttpError'; + +export class WazuhReportingError extends HttpError { + constructor(error: Error, info?: IWazuhErrorInfo) { + super(error, info); + } +} diff --git a/public/react-services/error-management/error-factory/errors/index.ts b/public/react-services/error-management/error-factory/errors/index.ts new file mode 100644 index 0000000000..70e3651794 --- /dev/null +++ b/public/react-services/error-management/error-factory/errors/index.ts @@ -0,0 +1,5 @@ +export * from './IndexerApiError'; +export * from './WazuhApiError'; +export * from './WazuhReportingError'; +export * from './WazuhError'; +export * from './HttpError'; diff --git a/public/react-services/error-management/error-factory/index.ts b/public/react-services/error-management/error-factory/index.ts new file mode 100644 index 0000000000..ee2bb1217d --- /dev/null +++ b/public/react-services/error-management/error-factory/index.ts @@ -0,0 +1,2 @@ +export * from './error-factory'; +export * from './errors'; diff --git a/public/react-services/error-management/error-handler/decorator/error-handler-decorator.test.tsx b/public/react-services/error-management/error-handler/decorator/error-handler-decorator.test.tsx new file mode 100644 index 0000000000..347ce6f079 --- /dev/null +++ b/public/react-services/error-management/error-handler/decorator/error-handler-decorator.test.tsx @@ -0,0 +1,30 @@ +import '@testing-library/jest-dom'; +import { errorHandlerDecorator } from './error-handler-decorator'; +import { ErrorHandler } from '../error-handler'; + +jest.mock('../error-handler', () => ({ + ErrorHandler: { + handleError: jest.fn(), + }, +})); + +describe('Error handler decorator', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should return a function', () => { + const result = errorHandlerDecorator(() => {}); + expect(typeof result).toBe('function'); + }); + + it('should catch the error if the function throws an error', () => { + const errorGenerated = new Error('callback error'); + const result = errorHandlerDecorator(() => { + throw errorGenerated; + }); + result(); + expect(ErrorHandler.handleError).toHaveBeenCalledTimes(1); + expect(ErrorHandler.handleError).toHaveBeenCalledWith(errorGenerated); + }); +}); diff --git a/public/react-services/error-management/error-handler/decorator/error-handler-decorator.ts b/public/react-services/error-management/error-handler/decorator/error-handler-decorator.ts new file mode 100644 index 0000000000..6d95d3b64b --- /dev/null +++ b/public/react-services/error-management/error-handler/decorator/error-handler-decorator.ts @@ -0,0 +1,13 @@ +import { ErrorHandler } from '../error-handler'; + +export const errorHandlerDecorator = (fn: any) => { + return function (...args: any) { + try { + return fn(...args); + } catch (error) { + if (error instanceof Error) { + ErrorHandler.handleError(error); + } + } + }; +}; diff --git a/public/react-services/error-management/error-handler/error-handler.test.ts b/public/react-services/error-management/error-handler/error-handler.test.ts new file mode 100644 index 0000000000..c249107268 --- /dev/null +++ b/public/react-services/error-management/error-handler/error-handler.test.ts @@ -0,0 +1,306 @@ +import { AxiosError, AxiosResponse } from 'axios'; +import { ErrorHandler } from './error-handler'; +import { ErrorOrchestratorService } from '../../error-orchestrator/error-orchestrator.service'; +import WazuhError from '../error-factory/errors/WazuhError'; +import { UIErrorLog } from '../../error-orchestrator/types'; + +// mocked some required kibana-services +jest.mock('../../../kibana-services', () => ({ + ...(jest.requireActual('../../../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name: string, value: string, options: any) => { + return true; + }, + }), +})); + +jest.mock('../../error-orchestrator/error-orchestrator.service'); + +const responseBody: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: '3099 - ERROR3099 - Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: { + url: '/api/request', + data: { + params: 'here-any-custom-params' + }, // the data could contain the params of the request + }, + request: {}, +}; + +describe('Error Handler', () => { + + beforeAll(() => { + jest.clearAllMocks(); + }) + describe('createError', () => { + it.each([ + { ErrorType: Error, name: 'Error' }, + { ErrorType: TypeError, name: 'TypeError' }, + { ErrorType: EvalError, name: 'EvalError' }, + { ErrorType: ReferenceError, name: 'ReferenceError' }, + { ErrorType: SyntaxError, name: 'SyntaxError' }, + { ErrorType: URIError, name: 'URIError' }, + ])( + 'should preserve and return the same "$name" instance when receive a native javascript error', + ({ ErrorType, name }: { ErrorType: ErrorConstructor; name: string }) => { + const errorTriggered = new ErrorType(`${name} error test`); + const error = ErrorHandler.createError(errorTriggered); + expect(error).toBeInstanceOf(ErrorType); + expect(error.name).toEqual(name); + expect(error.stack).toEqual(errorTriggered.stack); + }, + ); + + it.each([ + { + name: 'IndexerApiError', + message: 'Error IndexerApiError', + url: '/elastic/samplealerts', + }, + { + name: 'WazuhApiError', + message: 'Error WazuhApiError', + url: '/api/request', + }, + { + name: 'WazuhReportingError', + message: 'Error WazuhReportingError', + url: '/reports', + }, + { + name: 'HttpError', + url: '/any/url', + message: 'Error HttpError', + }, + ])( + 'should created a new "$name" instance when receive a native javascript error when is an http error', + ({ + name, + message, + url, + }: { + name: string; + message: string; + url: string; + }) => { + let error = new Error(message) as AxiosError; + error.response = responseBody; + error.response.data.message = message; + error.response.data.error = error; + error.response.config.url = url; + const spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError').mockImplementation(() => true); + const errorCreated = ErrorHandler.createError(error); + expect(errorCreated).toBeInstanceOf(WazuhError); + expect(errorCreated.message).toBe(message); + expect(errorCreated.name).toBe(name); + expect(errorCreated.stack).toBe(error.stack); + spyIshttp.mockRestore(); + }, + ); + }); + + describe('handleError', () => { + + afterEach(() => { + jest.clearAllMocks(); + }) + it('should send the error to the ERROR ORCHESTRATOR service with custom log options when is defined', () => { + const mockedError = new Error('Mocked error'); + ErrorHandler.handleError(mockedError, { + title: 'Custom title', + message: 'Custom message', + }); + const spyErrorOrch = jest.spyOn(ErrorOrchestratorService, 'handleError'); + + let logOptionsExpected = { + error: { + title: 'Custom title', + message: 'Custom message', + error: mockedError, + }, + }; + expect(spyErrorOrch).toHaveBeenCalledWith( + expect.objectContaining(logOptionsExpected), + ); + spyErrorOrch.mockRestore(); + }); + + it.each([ + { + name: 'IndexerApiError', + message: 'Error IndexerApiError', + url: '/elastic/samplealerts', + }, + { + name: 'WazuhApiError', + message: 'Error WazuhApiError', + url: '/api/request', + }, + { + name: 'WazuhReportingError', + message: 'Error WazuhReportingError', + url: '/reports', + }, + { + name: 'HttpError', + url: '/any/url', + message: 'Error HttpError', + }, + { ErrorType: Error, name: 'Error', message: 'Error' }, + { ErrorType: TypeError, name: 'TypeError', message: 'Error TypeError' }, + { ErrorType: EvalError, name: 'EvalError', message: 'Error EvalError' }, + { + ErrorType: ReferenceError, + name: 'ReferenceError', + message: 'Error ReferenceError', + }, + { + ErrorType: SyntaxError, + name: 'SyntaxError', + message: 'Error SyntaxError', + }, + { ErrorType: URIError, name: 'URIError', message: 'Error URIError' }, + ])( + 'should send the "$name" instance to the ERROR ORCHESTRATOR service with the correct log options defined in the error class', + ({ + ErrorType, + name, + message, + url + }: { + ErrorType?: ErrorConstructor; + name: string; + message: string; + url?: string; + }) => { + let error; + let spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError') + if (ErrorType) { + spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError').mockImplementation(() => false); + error = new ErrorType(message); + } else { + spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError').mockImplementation(() => true); + error = new Error(message) as AxiosError; + error.response = responseBody; + error.response.data.message = message; + error.response.data.error = error; + error.response.config.url = url; + } + const errorHandled = ErrorHandler.handleError(error); + const spyErrorOrch = jest.spyOn( + ErrorOrchestratorService, + 'handleError', + ); + + let logOptionsExpected: UIErrorLog = { + error: { + title: '[An error has occurred]', + message: error.message, + error: errorHandled, + }, + level: 'ERROR', + severity: 'UI', + display: true, + store: false, + }; + if (errorHandled instanceof WazuhError) { + logOptionsExpected = errorHandled.logOptions; + } + expect(spyErrorOrch).toBeCalledTimes(1); + expect(spyErrorOrch).toHaveBeenCalledWith(logOptionsExpected); + spyIshttp.mockRestore(); + spyErrorOrch.mockRestore(); + }, + ); + + it.each([ + { + name: 'IndexerApiError', + message: 'Error IndexerApiError', + url: '/elastic/samplealerts', + }, + { + name: 'WazuhApiError', + message: 'Error WazuhApiError', + url: '/api/request', + }, + { + name: 'WazuhReportingError', + message: 'Error WazuhReportingError', + url: '/reports', + }, + { + name: 'HttpError', + url: '/any/url', + message: 'Error HttpError', + }, + { ErrorType: Error, name: 'Error', message: 'Error' }, + { ErrorType: TypeError, name: 'TypeError', message: 'Error TypeError' }, + { ErrorType: EvalError, name: 'EvalError', message: 'Error EvalError' }, + { + ErrorType: ReferenceError, + name: 'ReferenceError', + message: 'Error ReferenceError', + }, + { + ErrorType: SyntaxError, + name: 'SyntaxError', + message: 'Error SyntaxError', + }, + { ErrorType: URIError, name: 'URIError', message: 'Error URIError' }, + ])( + 'should return the created "$name" instance after handle the error', + ({ + ErrorType, + name, + message, + url + }: { + ErrorType?: ErrorConstructor; + name: string; + message: string; + url?: string; + }) => { + let error; + let spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError') + if (ErrorType) { + spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError').mockImplementation(() => false); + error = new ErrorType(message); + } else { + spyIshttp = jest.spyOn(ErrorHandler, 'isHttpError').mockImplementation(() => true); + error = new Error(message) as AxiosError; + error.response = responseBody; + error.response.data.message = message; + error.response.data.error = error; + error.response.config.url = url; + } + const errorReturned = ErrorHandler.createError(error); + const errorFromHandler = ErrorHandler.handleError(error); + expect(errorFromHandler).toEqual(errorReturned); + expect(errorFromHandler).toBeInstanceOf( + ErrorType ? ErrorType : WazuhError, + ); + expect(errorFromHandler.message).toBe(message); + expect(errorFromHandler.name).toBe(name); + spyIshttp.mockRestore(); + } + ); + }); +}); diff --git a/public/react-services/error-management/error-handler/error-handler.ts b/public/react-services/error-management/error-handler/error-handler.ts new file mode 100644 index 0000000000..bd66c2909c --- /dev/null +++ b/public/react-services/error-management/error-handler/error-handler.ts @@ -0,0 +1,150 @@ +import { ErrorFactory } from '../error-factory/error-factory'; +import { + IndexerApiError, + WazuhReportingError, + WazuhApiError, + HttpError, +} from '../error-factory/errors'; +import { IWazuhError, IWazuhErrorConstructor } from '../types'; +import WazuhError from '../error-factory/errors/WazuhError'; +// error orchestrator +import { UIErrorLog } from '../../error-orchestrator/types'; +import { ErrorOrchestratorService } from '../../error-orchestrator/error-orchestrator.service'; +import axios, { AxiosError } from 'axios'; +import { OpenSearchDashboardsResponse } from '../../../../../../src/core/server/http/router/response'; + +interface ILogCustomOptions { + title: string; + message?: string; +} + +interface IUrlRequestedTypes { + [key: string]: IWazuhErrorConstructor; +} + +export class ErrorHandler { + + /** + * Receives an error and create return a new error instance then treat the error + * + * @param error error instance + * @param customLogOptions custom log options to show when the error is presented to the UI (toast|logs|blank-screen) + * @returns + */ + static handleError(error: Error, customLogOptions?: ILogCustomOptions): Error | IWazuhError { + if (!error) { + throw Error('Error must be defined'); + } + const errorCreated = this.createError(error); + this.logError(errorCreated, customLogOptions); + return errorCreated; + } + + /** + * Receives an error and create a new error instance depending on the error type defined or not + * + * @param error + * @returns + */ + static createError(error: Error | AxiosError | string): IWazuhError | Error { + if (!error) { + throw Error('Error must be defined'); + } + if (typeof error === 'string') return new Error(error); + const errorType = this.getErrorType(error); + if (errorType) + return ErrorFactory.create(errorType, { error, message: error.message }); + return error; + } + + /** + * Reveives an error and return a new error instance depending on the error type + * + * @param error + * @returns + */ + private static getErrorType( + error: Error | AxiosError | OpenSearchDashboardsResponse, // ToDo: Get error types + ): IWazuhErrorConstructor | null { + let errorType = null; + // if is http error (axios error) then get new to create a new error instance + if(this.isHttpError(error)){ + errorType = this.getErrorTypeByConfig(error as AxiosError); + } + return errorType; + } + + /** + * Check if the error received is an http error (axios error) + * @param error + * @returns + */ + static isHttpError(error: Error | IWazuhError | AxiosError | OpenSearchDashboardsResponse): boolean { + return axios.isAxiosError(error); + } + + /** + * Get the error type depending on the error config only when the error received is a http error and have the config property + * @param error + * @returns + */ + private static getErrorTypeByConfig(error: AxiosError): IWazuhErrorConstructor | null { + const requestedUrlbyErrorTypes: IUrlRequestedTypes = { + '/api': WazuhApiError, + '/reports': WazuhReportingError, + '/elastic': IndexerApiError, + } + + // get the config object from the error + const requestedUrl = error.response?.config?.url || error.config?.url; + if (!requestedUrl) return HttpError; + + const urls = Object.keys(requestedUrlbyErrorTypes); + for (const url of urls) { + if(requestedUrl.includes(url)) return requestedUrlbyErrorTypes[url]; + } + return HttpError; + } + + /** + * Check if the parameter received is a string + * @param error + */ + static isString(error: Error | string): boolean { + return typeof error === 'string'; + } + + /** + * This method log the error depending on the error type and the log options defined in the error class + * @param error + */ + private static logError(error: Error | IWazuhError, customLogOptions?: ILogCustomOptions) { + // this is a generic error treatment + // this condition is for the native error classes + let defaultErrorLog: UIErrorLog = { + error: { + title: customLogOptions?.title ? customLogOptions?.title : `[An error has occurred]`, + message: customLogOptions?.message ? customLogOptions?.message : error.message, + error: error, + }, + level: 'ERROR', + severity: "UI", + display: true, + store: false, + }; + if (error instanceof WazuhError) { + defaultErrorLog = { + ...error.logOptions, + ...{ + error: { + title: customLogOptions?.title || error.logOptions.error.title || error.message, + message: customLogOptions?.message || error.logOptions.error.message || error.stack as string, + error: error, + } + } + }; + + } + ErrorOrchestratorService.handleError(defaultErrorLog); + } +} diff --git a/public/react-services/error-management/error-handler/hoc/withErrorHandler.test.tsx b/public/react-services/error-management/error-handler/hoc/withErrorHandler.test.tsx new file mode 100644 index 0000000000..1389af69ba --- /dev/null +++ b/public/react-services/error-management/error-handler/hoc/withErrorHandler.test.tsx @@ -0,0 +1,79 @@ +import React, { useEffect, useLayoutEffect, useState } from 'react'; +import { fireEvent, render } from '@testing-library/react'; +import '@testing-library/jest-dom'; + +import { withErrorHandler, ErrorHandlerComponent } from './withErrorHandler'; +import { ErrorHandler } from '../error-handler'; + +const functionWithError = () => { + throw new Error('Error generated'); +}; + +jest.mock('../error-handler', () => ({ + ErrorHandler: { + handleError: jest.fn() + } +})); + +describe('withErrorHandler', () => { + describe('Functional Component', () => { + afterEach(() => { + jest.resetAllMocks(); + }); + + it('should catch error when exist error on ComponentDidMount event and call ErrorHandler', () => { + const Component = (props: any) => { + useEffect(() => { + // Component did mount + functionWithError(); + }, []); + return

Example Component
; + }; + // to avoid react console error when error boundary throw error + const spyReactConsoleError = jest.spyOn(console, 'error'); + spyReactConsoleError.mockImplementation(() => {}); + // spy on componentDidCatch to check if it was called + const spyComponentDidCatch = jest.spyOn(ErrorHandlerComponent.prototype, 'componentDidCatch'); + + const ComponentWithErrorHandler = withErrorHandler(Component); + expect(() => render()).not.toThrowError(); + expect(spyComponentDidCatch).toHaveBeenCalledTimes(1); + expect(spyComponentDidCatch).toHaveBeenCalledWith(expect.any(Error), expect.any(Object)); + // spy on ErrorHandler to check if it was called + expect(ErrorHandler.handleError).toHaveBeenCalledTimes(1); + spyReactConsoleError.mockRestore(); + spyComponentDidCatch.mockRestore(); + }); + + it('should catch error when exist error on ComponentDidUpdate event and call ErrorHandler', () => { + const Component = (props: any) => { + const [count, setCount] = useState(0); + useEffect(() => { + // Component did update + if (count > 0) functionWithError(); + }, [count]); + + return ( +
+ + Example Component +
+ ); + }; + // to avoid react console error when error boundary throw error + const spyReactConsoleError = jest.spyOn(console, 'error'); + spyReactConsoleError.mockImplementation(() => {}); + const spyComponentDidCatch = jest.spyOn(ErrorHandlerComponent.prototype, 'componentDidCatch'); + const ComponentWithErrorHandler = withErrorHandler(Component); + const { getByRole } = render(); + const btnWithError = getByRole('button'); + fireEvent.click(btnWithError); + expect(spyComponentDidCatch).toHaveBeenCalledTimes(1); + expect(spyComponentDidCatch).toHaveBeenCalledWith(expect.any(Error), expect.any(Object)); + expect(ErrorHandler.handleError).toHaveBeenCalledTimes(1); + spyReactConsoleError.mockRestore(); + spyComponentDidCatch.mockRestore(); + }); + + }); +}); diff --git a/public/react-services/error-management/error-handler/hoc/withErrorHandler.tsx b/public/react-services/error-management/error-handler/hoc/withErrorHandler.tsx new file mode 100644 index 0000000000..b757f8dae1 --- /dev/null +++ b/public/react-services/error-management/error-handler/hoc/withErrorHandler.tsx @@ -0,0 +1,55 @@ +import React, { ErrorInfo } from 'react'; +import { ErrorComponentPrompt } from '../../../../components/common/error-boundary-prompt/error-boundary-prompt'; +import { ErrorHandler } from '../../error-handler'; + +interface iErrorHandlerComponentState { + error?: Error | null; + hasError: boolean; + errorInfo?: ErrorInfo | null; +} +export class ErrorHandlerComponent extends React.Component< + { children: any }, + iErrorHandlerComponentState +> { + constructor(props: any) { + super(props); + this.state = { hasError: false, error: null, errorInfo: null }; + } + + componentDidCatch(error: Error, info?: ErrorInfo) { + const errorCreated = ErrorHandler.handleError(error); + this.setState({ hasError: true, error: errorCreated, errorInfo: info }); + } + + /** + * Update state so the next render will show the fallback UI. + * @param error + * @returns + */ + static getDerivedStateFromError(error: Error) { + return { hasError: true, error }; + } + + render() { + const { hasError, error, errorInfo } = this.state; + + if (hasError) { + return ( + + ); + } + return this.props.children; + } +} + +export const withErrorHandler = + (WrappedComponent: React.ComponentType) => (props: any) => { + return ( + + + + ); + }; diff --git a/public/react-services/error-management/error-handler/hooks/useErrorHandler.test.tsx b/public/react-services/error-management/error-handler/hooks/useErrorHandler.test.tsx new file mode 100644 index 0000000000..f5d1d71263 --- /dev/null +++ b/public/react-services/error-management/error-handler/hooks/useErrorHandler.test.tsx @@ -0,0 +1,59 @@ +import { render, waitFor } from '@testing-library/react'; +import '@testing-library/jest-dom'; +import { ErrorHandler } from '../error-handler'; +import { useErrorHandler } from './useErrorHandler'; +import React from 'react'; + +jest.mock('../error-handler', () => ({ + ErrorHandler: { + handleError: jest.fn(), + }, +})); +describe('UseErrorHandler', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + it('should return error instance and pass to ErrorHandler when callback fails', async () => { + const callbackWithError = async () => { + return Promise.reject(new Error('callback error')); + }; + + let Component = () => { + const [res, error] = useErrorHandler(callbackWithError); + return
Mocked component
; + }; + const { container, findByText } = render(); + + await waitFor(async () => { + await findByText('Mocked component'); + }); + + expect(container).toBeInTheDocument(); + expect(ErrorHandler.handleError).toHaveBeenCalledTimes(1); + expect(ErrorHandler.handleError).toHaveBeenCalledWith( + new Error('callback error'), + ); + }); + + it('should return error instance when callback is resolved', async () => { + const callbackWithoutError = async () => { + return Promise.resolve({ + success: true, + }); + }; + + let Component = () => { + const [res, error] = useErrorHandler(callbackWithoutError); + return
Mocked component
; + }; + + const { container, findByText } = render(); + + await waitFor(async () => { + await findByText('Mocked component'); + }); + + expect(container).toBeInTheDocument(); + expect(ErrorHandler.handleError).toHaveBeenCalledTimes(0); + }); +}); diff --git a/public/react-services/error-management/error-handler/hooks/useErrorHandler.ts b/public/react-services/error-management/error-handler/hooks/useErrorHandler.ts new file mode 100644 index 0000000000..c62633a3cd --- /dev/null +++ b/public/react-services/error-management/error-handler/hooks/useErrorHandler.ts @@ -0,0 +1,32 @@ +import { useEffect, useState } from 'react'; +import WazuhError from '../../error-factory/errors/WazuhError'; +import { ErrorHandler } from '../error-handler'; + +/** + * + * @param callback + * @returns + */ +export const useErrorHandler = (callback: Function) => { + const [res, setRes] = useState(null); + const [error, setError] = useState(null); + useEffect(() => { + const handleCallback = async () => { + try { + let res = await callback(); + setRes(res); + setError(null); + } catch (error) { + if (error instanceof Error) { + error = ErrorHandler.handleError(error); + } + setRes(null); + setError(error as Error | WazuhError); + } + } + + handleCallback(); + }, []) + + return [res, error]; +}; diff --git a/public/react-services/error-management/error-handler/index.ts b/public/react-services/error-management/error-handler/index.ts new file mode 100644 index 0000000000..33d323aa3a --- /dev/null +++ b/public/react-services/error-management/error-handler/index.ts @@ -0,0 +1,4 @@ +export * from './error-handler'; +export * from './hooks/useErrorHandler'; +export * from './hoc/withErrorHandler'; +export * from './decorator/error-handler-decorator'; \ No newline at end of file diff --git a/public/react-services/error-management/index.ts b/public/react-services/error-management/index.ts new file mode 100644 index 0000000000..8e9fdcb8ae --- /dev/null +++ b/public/react-services/error-management/index.ts @@ -0,0 +1,2 @@ +export * from './error-factory'; +export * from './error-handler'; \ No newline at end of file diff --git a/public/react-services/error-management/types.ts b/public/react-services/error-management/types.ts new file mode 100644 index 0000000000..e97028b6e4 --- /dev/null +++ b/public/react-services/error-management/types.ts @@ -0,0 +1,24 @@ +import { UIErrorLog } from '../error-orchestrator/types'; + +export interface IWazuhErrorLogOpts extends Omit {} +export interface IErrorOpts { + error: Error; + message: string; + code?: number; +} + +export interface IWazuhError extends Error, IErrorOpts { + error: Error; + message: string; + code?: number; + logOptions: IWazuhErrorLogOpts; +} + +export interface IWazuhErrorConstructor { + new (error: Error, info: IWazuhErrorInfo): IWazuhError; +} + +export interface IWazuhErrorInfo { + message: string; + code?: number; +} diff --git a/public/react-services/error-orchestrator/error-orchestrator-ui.test.ts b/public/react-services/error-orchestrator/error-orchestrator-ui.test.ts index dbf92d6858..05a61e00b2 100644 --- a/public/react-services/error-orchestrator/error-orchestrator-ui.test.ts +++ b/public/react-services/error-orchestrator/error-orchestrator-ui.test.ts @@ -40,7 +40,7 @@ describe('Wazuh Error Orchestrator UI', () => { errorOrchestratorUI.loadErrorLog(options); expect(mockLoglevelInfo).toBeCalled(); - expect(mockLoglevelInfo).toBeCalledWith(mockMessage, mockError); + expect(mockLoglevelInfo).toBeCalledWith('',options.error.error,'\n',options.error); expect(mockLoglevelInfo).toBeCalledTimes(1); }); }); @@ -60,7 +60,7 @@ describe('Wazuh Error Orchestrator UI', () => { errorOrchestratorUI.loadErrorLog(options); expect(mockLoglevelWarning).toBeCalled(); - expect(mockLoglevelWarning).toBeCalledWith(mockMessage, mockError); + expect(mockLoglevelWarning).toBeCalledWith('',options.error.error,'\n',options.error); expect(mockLoglevelWarning).toBeCalledTimes(1); }); }); @@ -80,7 +80,7 @@ describe('Wazuh Error Orchestrator UI', () => { errorOrchestratorUI.loadErrorLog(options); expect(mockLoglevelError).toBeCalled(); - expect(mockLoglevelError).toBeCalledWith(mockMessage, mockError); + expect(mockLoglevelError).toBeCalledWith('',options.error.error,'\n',options.error); expect(mockLoglevelError).toBeCalledTimes(1); }); }); diff --git a/public/react-services/error-orchestrator/error-orchestrator-ui.ts b/public/react-services/error-orchestrator/error-orchestrator-ui.ts index 0aafff2dbb..98681a32af 100644 --- a/public/react-services/error-orchestrator/error-orchestrator-ui.ts +++ b/public/react-services/error-orchestrator/error-orchestrator-ui.ts @@ -26,16 +26,16 @@ export class ErrorOrchestratorUI extends ErrorOrchestratorBase { public displayError(errorLog: UIErrorLog) { switch (errorLog.level) { case UI_LOGGER_LEVELS.INFO: - loglevel.info(errorLog.error.message, errorLog.error.error); + loglevel.info('',errorLog.error.error,'\n',errorLog.error); // this code add a line break to the log message break; case UI_LOGGER_LEVELS.WARNING: - loglevel.warn(errorLog.error.message, errorLog.error.error); + loglevel.warn('',errorLog.error.error,'\n',errorLog.error); // this code add a line break to the log message break; case UI_LOGGER_LEVELS.ERROR: - loglevel.error(errorLog.error.message, errorLog.error.error); + loglevel.error('',errorLog.error.error,'\n',errorLog.error); // this code add a line break to the log message break; default: - console.log('No error level', errorLog.error.message, errorLog.error.error); + console.log('No error level', errorLog.error.message, errorLog.error.error.error, errorLog.error); } } } diff --git a/public/react-services/generic-request.js b/public/react-services/generic-request.js index 6b2a44409d..dad59222d5 100644 --- a/public/react-services/generic-request.js +++ b/public/react-services/generic-request.js @@ -113,8 +113,8 @@ export class GenericRequest { } if (returnError) return Promise.reject(err); return (((err || {}).response || {}).data || {}).message || false - ? Promise.reject(err.response.data.message) - : Promise.reject(err || 'Server did not respond'); + ? Promise.reject(new Error(err.response.data.message)) + : Promise.reject(err || new Error('Server did not respond')); } } } diff --git a/public/react-services/generic-request.test.ts b/public/react-services/generic-request.test.ts new file mode 100644 index 0000000000..07149833fc --- /dev/null +++ b/public/react-services/generic-request.test.ts @@ -0,0 +1,114 @@ +/* + * Wazuh app - Error handler service + * Copyright (C) 2015-2022 Wazuh, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Find more information about this on the LICENSE file. + */ +import { GenericRequest } from './generic-request'; +import { AppState } from './app-state'; + +// axios +import axios, { AxiosResponse } from 'axios'; +jest.mock('axios'); +// kibana services +jest.mock('../kibana-services', () => ({ + ...(jest.requireActual('../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn(), +})); + +// app state +jest.mock('./app-state'); + +// mock window location +const mockResponse = jest.fn(); +Object.defineProperty(window, 'location', { + value: { + hash: { + endsWith: mockResponse, + includes: mockResponse, + }, + href: mockResponse, + assign: mockResponse, + }, + writable: true, +}); + +describe('Generic Request', () => { + afterEach(() => { + jest.restoreAllMocks(); + }); + + afterAll(() => { + jest.restoreAllMocks(); + }); + + it('Should return data when request is successfully completed', async () => { + const resDataMocked = { data: [] }; + (axios as jest.MockedFunction).mockResolvedValue( + Promise.resolve(resDataMocked as AxiosResponse) + ); + let res = await GenericRequest.request('GET', '/api/request'); + expect(res).toEqual(resDataMocked); + }); + + it('Should return ERROR when method or path are empty', async () => { + try { + await GenericRequest.request(null, '/api/request'); + } catch (error) { + expect(error).toBeInstanceOf(Error); + if(error instanceof Error) + expect(error.message).toBe('Missing parameters'); + } + }); + + it('Should return an instance ERROR when the request fails', async () => { + const resError = new Error('Error message'); + (axios as jest.MockedFunction).mockResolvedValue(Promise.reject(resError)); + const currentEmptyApiMock = JSON.stringify({}); + AppState.getCurrentAPI = jest.fn().mockReturnValue(currentEmptyApiMock); + try { + await GenericRequest.request('GET', '/api/request'); + } catch (error) { + expect(error).toBeInstanceOf(Error); + if(error instanceof Error){ + expect(error?.stack).toBeTruthy(); + expect(error?.message).toEqual(resError.message); + expect(error?.stack).toBeTruthy(); + } + expect(typeof error).not.toBe('string'); + } + }); + + it('Should return an instance ERROR when the request fails and have invalid api id', async () => { + const resError = new Error('Error message'); + (axios as jest.MockedFunction).mockResolvedValue(Promise.reject(resError)); + const currentApiMock = JSON.stringify({ id: 'mocked-api-id' }); + AppState.getCurrentAPI = jest.fn().mockReturnValue(currentApiMock); + try { + await GenericRequest.request('GET', '/api/request'); + } catch (error) { + expect(error).toBeInstanceOf(Error); + if(error instanceof Error){ + expect(error.stack).toBeTruthy(); + expect(error.message).toEqual(resError.message); + expect(error.stack).toBeTruthy(); + } + expect(typeof error).not.toBe('string'); + } + }); +}); diff --git a/public/react-services/saved-objects.js b/public/react-services/saved-objects.js index 4aac3b8a9e..3105572fa3 100644 --- a/public/react-services/saved-objects.js +++ b/public/react-services/saved-objects.js @@ -176,8 +176,8 @@ export class SavedObject { if (error && error.response && error.response.status == 404) return false; return Promise.reject( ((error || {}).data || {}).message || false - ? error.data.message - : error.message || `Error getting the '${patternID}' index pattern` + ? new Error(error.data.message) + : new Error(error.message || `Error getting the '${patternID}' index pattern`) ); } } @@ -196,9 +196,7 @@ export class SavedObject { return result; } catch (error) { - throw ((error || {}).data || {}).message || false - ? error.data.message - : error.message || error; + throw ((error || {}).data || {}).message || false ? new Error(error.data.message) : error; } } @@ -218,9 +216,7 @@ export class SavedObject { } ); } catch (error) { - throw ((error || {}).data || {}).message || false - ? error.data.message - : error.message || error; + throw ((error || {}).data || {}).message || false ? new Error(error.data.message) : error; } } diff --git a/public/react-services/saved-objects.test.ts b/public/react-services/saved-objects.test.ts new file mode 100644 index 0000000000..ddcc60b565 --- /dev/null +++ b/public/react-services/saved-objects.test.ts @@ -0,0 +1,77 @@ +import axios, { AxiosError, AxiosResponse } from 'axios'; +import { SavedObject } from './saved-objects'; +import { AppState } from './app-state'; +import { ErrorHandler } from './error-management'; + +jest.mock('./app-state'); + +jest.mock('axios'); + +jest.mock('../kibana-services', () => ({ + ...(jest.requireActual('../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name: string, value: any, options: object) => { + return true; + }, + }), +})); + +// mock window location +const mockResponse = jest.fn(); +Object.defineProperty(window, 'location', { + value: { + hash: { + endsWith: mockResponse, + includes: mockResponse, + }, + href: mockResponse, + assign: mockResponse, + }, + writable: true, +}); + +describe('SavedObjects', () => { + const response: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: '3099 - ERROR3099 - Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: {}, + request: {}, + }; + + describe('existsIndexPattern', () => { + it('Should return ERROR when get request if exist index pattern fails', async () => { + try { + const mockingError = new Error('Error on genericReq') as AxiosError; + mockingError.response = response; + (axios as jest.MockedFunction).mockResolvedValue( + Promise.reject(ErrorHandler.createError(mockingError)), + ); + const currentApiMock = JSON.stringify({ id: 'mocked-api-id' }); + AppState.getCurrentAPI = jest.fn().mockReturnValue(currentApiMock); + await SavedObject.existsIndexPattern('fake-index-pattern'); + } catch (error) { + expect(error).toBeInstanceOf(Error); + expect(typeof error).not.toBe('string'); + if (error instanceof Error) { + expect(error.message).toBe(response.data.message); + } + } + }); + }); +}); diff --git a/public/react-services/wz-api-check.js b/public/react-services/wz-api-check.js index 38cc0f957f..30761a277a 100644 --- a/public/react-services/wz-api-check.js +++ b/public/react-services/wz-api-check.js @@ -43,7 +43,7 @@ export class ApiCheck { const response = await request(options); if (response.error) { - return Promise.reject(response); + return Promise.reject(this.returnErrorInstance(response)); } return response; @@ -52,11 +52,11 @@ export class ApiCheck { const wzMisc = new WzMisc(); wzMisc.setApiIsDown(true); const response = (err.response.data || {}).message || err.message; - return Promise.reject(response); + return Promise.reject(this.returnErrorInstance(response)); } else { return (err || {}).message || false - ? Promise.reject(err.message) - : Promise.reject(err || 'Server did not respond'); + ? Promise.reject(this.returnErrorInstance(err,err.message)) + : Promise.reject(this.returnErrorInstance(err,err || 'Server did not respond')); } } } @@ -82,19 +82,33 @@ export class ApiCheck { const response = await request(options); if (response.error) { - return Promise.reject(response); + return Promise.reject(this.returnErrorInstance(response)); } return response; } catch (err) { if (err.response) { const response = (err.response.data || {}).message || err.message; - return Promise.reject(response); + return Promise.reject(this.returnErrorInstance(response)); } else { return (err || {}).message || false - ? Promise.reject(err.message) - : Promise.reject(err || 'Server did not respond'); + ? Promise.reject(this.returnErrorInstance(err,err.message)) + : Promise.reject(this.returnErrorInstance(err,err || 'Server did not respond')); } } } + + /** + * Customize message and return an error object + * @param error + * @param message + * @returns error + */ + static returnErrorInstance(error, message){ + if(!error || typeof error === 'string'){ + return new Error(message || error); + } + error.message = message + return error + } } diff --git a/public/react-services/wz-api-check.test.ts b/public/react-services/wz-api-check.test.ts new file mode 100644 index 0000000000..012c664543 --- /dev/null +++ b/public/react-services/wz-api-check.test.ts @@ -0,0 +1,74 @@ +import { ApiCheck } from './index'; + +import axios, { AxiosResponse } from 'axios'; +jest.mock('axios'); + +jest.mock('../kibana-services', () => ({ + ...(jest.requireActual('../kibana-services') as object), + getHttp: jest.fn().mockReturnValue({ + basePath: { + get: () => { + return 'http://localhost:5601'; + }, + prepend: (url: string) => { + return `http://localhost:5601${url}`; + }, + }, + }), + getCookies: jest.fn().mockReturnValue({ + set: (name: string, value: any, options: object) => { + return true; + }, + }), +})); + +describe('Wz Api Check', () => { + const response: AxiosResponse = { + data: { + statusCode: 500, + error: 'Internal Server Error', + message: '3099 - ERROR3099 - Wazuh not ready yet', + }, + status: 500, + statusText: 'Internal Server Error', + headers: {}, + config: {}, + request: {}, + }; + + describe('checkStored', () => { + it('should return ERROR instance when request fails', async () => { + try { + (axios as jest.MockedFunction).mockResolvedValue( + Promise.reject({ + response, + }), + ); + await ApiCheck.checkStored('api-2'); + } catch (error) { + expect(error).toBeInstanceOf(Error); + expect(typeof error).not.toBe('string'); + if (error instanceof Error) + expect(error.message).toBe(response.data.message); + } + }); + }); + + describe('checkApi', () => { + it('should return ERROR instance when request fails', async () => { + try { + (axios as jest.MockedFunction).mockResolvedValue( + Promise.reject({ + response, + }), + ); + await ApiCheck.checkApi({ id: 'api-id-mocked' }); + } catch (error) { + expect(error).toBeInstanceOf(Error); + expect(typeof error).not.toBe('string'); + if (error instanceof Error) + expect(error.message).toBe(response.data.message); + } + }); + }); +}); diff --git a/public/react-services/wz-request.ts b/public/react-services/wz-request.ts index 09a010e559..1dfdc197a9 100644 --- a/public/react-services/wz-request.ts +++ b/public/react-services/wz-request.ts @@ -171,7 +171,7 @@ export class WzRequest { * @param message * @returns error */ - static returnErrorInstance(error, message){ + static returnErrorInstance(error: any, message: string | undefined){ if(!error || typeof error === 'string'){ return new Error(message || error); } diff --git a/public/services/request-handler.js b/public/services/request-handler.js index 119668839c..80d2a183fa 100644 --- a/public/services/request-handler.js +++ b/public/services/request-handler.js @@ -38,7 +38,7 @@ export const request = async (options = {}) => { return Promise.reject("Missing parameters"); }; options = { - ...options, cancelToken: source.token + ...options, cancelToken: source?.token }; if (allow) { diff --git a/server/lib/error-response.ts b/server/lib/error-response.ts index 601e0bcec0..f1a574950f 100644 --- a/server/lib/error-response.ts +++ b/server/lib/error-response.ts @@ -25,13 +25,10 @@ * @param {Number} statusCode Error status code * @returns {Object} Error response object */ -export function ErrorResponse( - message = null, - code = null, - statusCode = null, - response -) { - message.includes('password: ') ? message = message.split('password: ')[0] + ' password: ***' : false; +export function ErrorResponse(message = null, code = null, statusCode = null, response) { + message.includes('password: ') + ? (message = message.split('password: ')[0] + ' password: ***') + : false; let filteredMessage = ''; if (code) { const isString = typeof message === 'string'; @@ -45,16 +42,10 @@ export function ErrorResponse( message.includes('EAI_AGAIN')) && code === 3005 ) { - filteredMessage = - 'Wazuh API is not reachable. Please check your url and port.'; + filteredMessage = 'Wazuh API is not reachable. Please check your url and port.'; } else if (isString && message.includes('ECONNREFUSED') && code === 3005) { - filteredMessage = - 'Wazuh API is not reachable. Please check your url and port.'; - } else if ( - isString && - message.toLowerCase().includes('not found') && - code === 3002 - ) { + filteredMessage = 'Wazuh API is not reachable. Please check your url and port.'; + } else if (isString && message.toLowerCase().includes('not found') && code === 3002) { filteredMessage = 'It seems the selected API was deleted.'; } else if ( isString && @@ -79,8 +70,7 @@ export function ErrorResponse( ? `${code || 1000} - ${message}` : `${code || 1000} - Unexpected error`, code: code || 1000, - statusCode: statusCodeResponse - } - }) + statusCode: statusCodeResponse, + }, + }); } -