diff --git a/common/errorCodes.js b/common/errorCodes.js new file mode 100644 index 00000000..993d2a2e --- /dev/null +++ b/common/errorCodes.js @@ -0,0 +1,4 @@ +module.exports = { + ERR_MISSING_PASSPHRASE: 'ERR_MISSING_PASSPHRASE', + ERR_OSSL_BAD_DECRYPT: 'ERR_OSSL_BAD_DECRYPT', +}; diff --git a/reverse_engineering/helpers/errorMessages.js b/common/errorMessages.js similarity index 83% rename from reverse_engineering/helpers/errorMessages.js rename to common/errorMessages.js index e25d3772..dbfad274 100644 --- a/reverse_engineering/helpers/errorMessages.js +++ b/common/errorMessages.js @@ -5,4 +5,5 @@ module.exports = { 'Incorrect Okta username/password or MFA is enabled. Please, check credentials or use the "Identity Provider SSO (via external browser)" for MFA auth', OKTA_MFA_ERROR: 'Native Okta auth doesn\'t support MFA. Please, use the "Identity Provider SSO (via external browser)" auth instead', + KEY_PAIR_ERROR: 'Please check that the passphrase is provided and matches the key.', }; diff --git a/forward_engineering/api.js b/forward_engineering/api.js index 811f73c0..2ee794df 100644 --- a/forward_engineering/api.js +++ b/forward_engineering/api.js @@ -1,9 +1,10 @@ const _ = require('lodash'); -const { commentDropStatements } = require('./helpers/commentHelpers/commentDropStatements'); -const { DROP_STATEMENTS } = require('./helpers/constants'); -const { getAlterScript } = require('./helpers/alterScriptFromDeltaHelper'); -const { applyToInstance } = require('./helpers/applyToInstanceHelper'); -const reApi = require('../reverse_engineering/api'); +const { commentDropStatements } = require('./helpers/commentHelpers/commentDropStatements.js'); +const { DROP_STATEMENTS } = require('./helpers/constants.js'); +const { getAlterScript } = require('./helpers/alterScriptFromDeltaHelper.js'); +const { applyToInstance } = require('./helpers/applyToInstanceHelper.js'); +const reApi = require('../reverse_engineering/api.js'); +const { handleError } = require('./helpers/handleError.js'); module.exports = { generateScript(data, logger, callback, app) { @@ -57,14 +58,7 @@ module.exports = { .then(result => { callback(null, result); }) - .catch(error => { - const err = { - message: error.message, - stack: error.stack, - }; - logger.log('error', err, 'Error when applying to instance'); - callback(err); - }); + .catch(error => handleError(logger, error, callback)); }, async getExternalBrowserUrl(connectionInfo, logger, cb, app) { diff --git a/forward_engineering/helpers/handleError.js b/forward_engineering/helpers/handleError.js new file mode 100644 index 00000000..e6992289 --- /dev/null +++ b/forward_engineering/helpers/handleError.js @@ -0,0 +1,22 @@ +const errorMessages = require('../../common/errorMessages.js'); +const errorCodes = require('../../common/errorCodes.js'); + +const handleError = (logger, error, callback) => { + logger.log('error', error, 'Error when applying to instance'); + + if (error.code === errorCodes.ERR_MISSING_PASSPHRASE || error.code === errorCodes.ERR_OSSL_BAD_DECRYPT) { + return callback({ + message: errorMessages.KEY_PAIR_ERROR, + type: 'simpleError', + }); + } + + return callback({ + message: error.message, + stack: error.stack, + }); +}; + +module.exports = { + handleError, +}; diff --git a/reverse_engineering/api.js b/reverse_engineering/api.js index c65d4b9a..aecacee5 100644 --- a/reverse_engineering/api.js +++ b/reverse_engineering/api.js @@ -3,6 +3,8 @@ const _ = require('lodash'); const snowflakeHelper = require('./helpers/snowflakeHelper'); const ssoHelper = require('./helpers/ssoHelper'); +const errorMessages = require('../common/errorMessages.js'); +const errorCodes = require('../common/errorCodes.js'); const connect = async (connectionInfo, logger, cb) => { logger.clear(); @@ -270,9 +272,17 @@ const getSampleDocSize = (count, recordSamplingSettings) => { }; const handleError = (logger, error, cb) => { - const message = _.isString(error) ? error : _.get(error, 'message', 'Reverse Engineering error'); logger.log('error', { error }, 'Reverse Engineering error'); + if (error.code === errorCodes.ERR_MISSING_PASSPHRASE || error.code === errorCodes.ERR_OSSL_BAD_DECRYPT) { + return cb({ + message: errorMessages.KEY_PAIR_ERROR, + type: 'simpleError', + }); + } + + const message = _.isString(error) ? error : _.get(error, 'message', 'Reverse Engineering error'); + return cb({ message }); }; diff --git a/reverse_engineering/helpers/connections/connection.js b/reverse_engineering/helpers/connections/connection.js index 581e9555..a22b4efa 100644 --- a/reverse_engineering/helpers/connections/connection.js +++ b/reverse_engineering/helpers/connections/connection.js @@ -1,6 +1,6 @@ const snowflake = require('snowflake-sdk'); -const errorMessages = require('../errorMessages.js'); +const errorMessages = require('../../../common/errorMessages.js'); const { CONNECTION_TIMED_OUT_CODE } = require('./constants.js'); const noConnectionError = { message: errorMessages.CONNECTION_ERROR }; diff --git a/reverse_engineering/helpers/connections/oktaConnection.js b/reverse_engineering/helpers/connections/oktaConnection.js index d8a1aa68..6079d767 100644 --- a/reverse_engineering/helpers/connections/oktaConnection.js +++ b/reverse_engineering/helpers/connections/oktaConnection.js @@ -12,7 +12,7 @@ const { HACKOLADE_APPLICATION, } = require('./constants.js'); const { getAccountName, getRole } = require('../common.js'); -const errorMessages = require('../errorMessages.js'); +const errorMessages = require('../../../common/errorMessages.js'); const authByOkta = async ({ account, diff --git a/reverse_engineering/helpers/snowflakeHelper.js b/reverse_engineering/helpers/snowflakeHelper.js index d72c1227..ca51d265 100644 --- a/reverse_engineering/helpers/snowflakeHelper.js +++ b/reverse_engineering/helpers/snowflakeHelper.js @@ -3,7 +3,7 @@ const snowflake = require('snowflake-sdk'); const axios = require('axios'); const uuid = require('uuid'); const BSON = require('bson'); -const errorMessages = require('./errorMessages.js'); +const errorMessages = require('../../common/errorMessages.js'); const { getRole, getAccountName, removeQuotes } = require('./common.js'); const { authByOkta } = require('./connections/oktaConnection.js'); const { authByExternalBrowser } = require('./connections/externalBrowserConnection.js'); diff --git a/tsconfig.json b/tsconfig.json index c5275b03..d09022c5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -26,6 +26,6 @@ "forceConsistentCasingInFileNames": true, "typeRoots": ["./node_modules/@types", "./types"] }, - "include": ["reverse_engineering", "forward_engineering"], + "include": ["reverse_engineering", "forward_engineering", "common"], "exclude": ["**/node_modules/**", "release/**/*"] }