@harperfast/harper 5.0.0-alpha.10 → 5.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/BinObjects.js +17 -0
- package/bin/cliOperations.js +157 -0
- package/bin/copyDb.ts +280 -0
- package/bin/harper.js +156 -0
- package/bin/install.js +15 -0
- package/bin/lite.js +5 -0
- package/bin/restart.js +201 -0
- package/bin/run.js +409 -0
- package/bin/status.js +65 -0
- package/bin/stop.js +22 -0
- package/bin/upgrade.js +134 -0
- package/components/Application.ts +646 -0
- package/components/ApplicationScope.ts +49 -0
- package/components/Component.ts +53 -0
- package/components/ComponentV1.ts +342 -0
- package/components/DEFAULT_CONFIG.ts +18 -0
- package/components/EntryHandler.ts +227 -0
- package/components/Logger.ts +14 -0
- package/components/OptionsWatcher.ts +354 -0
- package/components/PluginModule.ts +6 -0
- package/components/Scope.ts +329 -0
- package/components/componentLoader.ts +529 -0
- package/components/deriveCommonPatternBase.ts +31 -0
- package/components/deriveGlobOptions.ts +44 -0
- package/components/deriveURLPath.ts +57 -0
- package/components/operations.js +658 -0
- package/components/operationsValidation.js +246 -0
- package/components/packageComponent.ts +39 -0
- package/components/requestRestart.ts +26 -0
- package/components/resolveBaseURLPath.ts +38 -0
- package/components/status/ComponentStatus.ts +110 -0
- package/components/status/ComponentStatusRegistry.ts +251 -0
- package/components/status/api.ts +153 -0
- package/components/status/crossThread.ts +405 -0
- package/components/status/errors.ts +152 -0
- package/components/status/index.ts +44 -0
- package/components/status/internal.ts +65 -0
- package/components/status/registry.ts +12 -0
- package/components/status/types.ts +96 -0
- package/config/RootConfigWatcher.ts +59 -0
- package/config/configHelpers.ts +11 -0
- package/config/configUtils.js +967 -0
- package/config/harperConfigEnvVars.ts +641 -0
- package/dataLayer/CreateAttributeObject.js +25 -0
- package/dataLayer/CreateTableObject.js +11 -0
- package/dataLayer/DataLayerObjects.js +43 -0
- package/dataLayer/DeleteBeforeObject.js +22 -0
- package/dataLayer/DeleteObject.js +25 -0
- package/dataLayer/DropAttributeObject.js +11 -0
- package/dataLayer/GetBackupObject.js +22 -0
- package/dataLayer/InsertObject.js +24 -0
- package/dataLayer/ReadAuditLogObject.js +24 -0
- package/dataLayer/SQLSearch.js +1335 -0
- package/dataLayer/SearchByConditionsObject.js +61 -0
- package/dataLayer/SearchByHashObject.js +21 -0
- package/dataLayer/SearchObject.js +45 -0
- package/dataLayer/SqlSearchObject.js +14 -0
- package/dataLayer/UpdateObject.js +23 -0
- package/dataLayer/UpsertObject.js +23 -0
- package/dataLayer/bulkLoad.js +813 -0
- package/dataLayer/dataObjects/BulkLoadObjects.js +27 -0
- package/dataLayer/dataObjects/UpsertObject.js +23 -0
- package/dataLayer/delete.js +164 -0
- package/dataLayer/export.js +381 -0
- package/dataLayer/getBackup.js +40 -0
- package/dataLayer/harperBridge/BridgeMethods.js +81 -0
- package/dataLayer/harperBridge/ResourceBridge.ts +633 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateReturnObj.js +28 -0
- package/dataLayer/harperBridge/bridgeUtility/insertUpdateValidate.js +88 -0
- package/dataLayer/harperBridge/harperBridge.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/LMDBBridge.js +119 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/DeleteAuditLogsBeforeResults.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateAttribute.js +112 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateRecords.js +67 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateSchema.js +31 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbCreateTable.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteAuditLogsBefore.js +98 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDeleteRecords.js +89 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropAttribute.js +109 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropSchema.js +107 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbDropTable.js +137 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbFlush.js +35 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetBackup.js +111 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByHash.js +28 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbGetDataByValue.js +29 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbReadAuditLog.js +207 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByConditions.js +156 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByHash.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbSearchByValue.js +30 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbTransaction.js +19 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpdateRecords.js +64 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbMethods/lmdbUpsertRecords.js +70 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBCreateAttributeObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBDeleteTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBInsertTransactionObject.js +22 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBTransactionObject.js +23 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpdateTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/LMDBUpsertTransactionObject.js +24 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/TableSizeObject.js +25 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializeHashSearch.js +21 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/initializePaths.js +157 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCheckForNewAttributes.js +94 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbCreateTransactionsAuditEnvironment.js +39 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbGetTableSize.js +34 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbProcessRows.js +100 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbSearch.js +371 -0
- package/dataLayer/harperBridge/lmdbBridge/lmdbUtility/lmdbWriteTransaction.js +109 -0
- package/dataLayer/hdbInfoController.js +254 -0
- package/dataLayer/insert.js +266 -0
- package/dataLayer/readAuditLog.js +59 -0
- package/dataLayer/schema.js +366 -0
- package/dataLayer/schemaDescribe.js +289 -0
- package/dataLayer/search.js +60 -0
- package/dataLayer/transaction.js +17 -0
- package/dataLayer/update.js +124 -0
- package/dist/components/Logger.d.ts +12 -0
- package/dist/components/Logger.js +3 -0
- package/dist/components/Logger.js.map +1 -0
- package/dist/components/Scope.d.ts +14 -4
- package/dist/components/Scope.js +18 -10
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +16 -9
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/operations.js +2 -2
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +1 -1
- package/dist/config/configUtils.js +1 -1
- package/dist/config/configUtils.js.map +1 -1
- package/dist/dataLayer/CreateTableObject.d.ts +2 -2
- package/dist/dataLayer/CreateTableObject.js +2 -2
- package/dist/dataLayer/CreateTableObject.js.map +1 -1
- package/dist/dataLayer/delete.d.ts +1 -1
- package/dist/dataLayer/schema.js +6 -5
- package/dist/dataLayer/schema.js.map +1 -1
- package/dist/dataLayer/schemaDescribe.js +1 -1
- package/dist/dataLayer/schemaDescribe.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +1 -1
- package/dist/resources/IterableEventQueue.d.ts +1 -1
- package/dist/resources/LMDBTransaction.d.ts +5 -1
- package/dist/resources/Resource.d.ts +1 -1
- package/dist/resources/RocksIndexStore.d.ts +3 -3
- package/dist/resources/RocksTransactionLogStore.d.ts +6 -3
- package/dist/resources/Table.d.ts +15 -6
- package/dist/resources/Table.js +4 -1
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +32 -22
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/analytics/write.js +3 -6
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/auditStore.d.ts +3 -3
- package/dist/resources/blob.d.ts +25 -2
- package/dist/resources/databases.d.ts +12 -2
- package/dist/resources/databases.js +22 -19
- package/dist/resources/databases.js.map +1 -1
- package/dist/resources/search.js +11 -5
- package/dist/resources/search.js.map +1 -1
- package/dist/resources/transaction.d.ts +2 -1
- package/dist/security/auth.js +1 -1
- package/dist/security/auth.js.map +1 -1
- package/dist/security/cryptoHash.d.ts +2 -2
- package/dist/security/jsLoader.js +243 -66
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.js +4 -5
- package/dist/security/keys.js.map +1 -1
- package/dist/security/user.js +3 -3
- package/dist/security/user.js.map +1 -1
- package/dist/server/REST.js +16 -2
- package/dist/server/REST.js.map +1 -1
- package/dist/server/Server.d.ts +2 -1
- package/dist/server/Server.js.map +1 -1
- package/dist/server/fastifyRoutes/plugins/hdbCore.d.ts +6 -1
- package/dist/server/fastifyRoutes.js +2 -0
- package/dist/server/fastifyRoutes.js.map +1 -1
- package/dist/server/http.js +12 -6
- package/dist/server/http.js.map +1 -1
- package/dist/server/jobs/JobObject.d.ts +3 -3
- package/dist/server/loadRootComponents.js +1 -0
- package/dist/server/loadRootComponents.js.map +1 -1
- package/dist/server/operationsServer.js +3 -1
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/JSONStream.d.ts +3 -3
- package/dist/server/serverHelpers/Request.d.ts +5 -5
- package/dist/server/serverHelpers/requestTimePlugin.d.ts +1 -1
- package/dist/server/threads/manageThreads.d.ts +2 -2
- package/dist/server/threads/manageThreads.js +50 -35
- package/dist/server/threads/manageThreads.js.map +1 -1
- package/dist/server/threads/socketRouter.d.ts +1 -1
- package/dist/sqlTranslator/deleteTranslator.d.ts +1 -1
- package/dist/utility/AWS/AWSConnector.d.ts +3 -2
- package/dist/utility/common_utils.d.ts +3 -3
- package/dist/utility/environment/systemInformation.d.ts +1 -0
- package/dist/utility/functions/date/dateFunctions.d.ts +11 -11
- package/dist/utility/globalSchema.d.ts +1 -1
- package/dist/utility/hdbTerms.d.ts +3 -0
- package/dist/utility/hdbTerms.js +3 -0
- package/dist/utility/hdbTerms.js.map +1 -1
- package/dist/utility/installation.d.ts +2 -4
- package/dist/utility/installation.js.map +1 -1
- package/dist/utility/lmdb/commonUtility.d.ts +1 -0
- package/dist/utility/lmdb/deleteUtility.d.ts +1 -0
- package/dist/utility/lmdb/environmentUtility.d.ts +1 -0
- package/dist/utility/lmdb/searchUtility.d.ts +2 -1
- package/dist/utility/lmdb/writeUtility.d.ts +1 -0
- package/dist/utility/logging/harper_logger.d.ts +6 -6
- package/dist/utility/processManagement/processManagement.d.ts +1 -1
- package/dist/utility/processManagement/servicesConfig.d.ts +12 -6
- package/dist/validation/common_validators.d.ts +4 -3
- package/dist/validation/configValidator.d.ts +3 -2
- package/index.d.ts +56 -0
- package/index.js +41 -0
- package/json/systemSchema.json +373 -0
- package/launchServiceScripts/launchHarperDB.js +3 -0
- package/launchServiceScripts/utility/checkNodeVersion.js +15 -0
- package/package.json +21 -3
- package/resources/DatabaseTransaction.ts +378 -0
- package/resources/ErrorResource.ts +57 -0
- package/resources/IterableEventQueue.ts +94 -0
- package/resources/LMDBTransaction.ts +349 -0
- package/resources/RecordEncoder.ts +702 -0
- package/resources/RequestTarget.ts +134 -0
- package/resources/Resource.ts +789 -0
- package/resources/ResourceInterface.ts +221 -0
- package/resources/ResourceInterfaceV2.ts +53 -0
- package/resources/ResourceV2.ts +67 -0
- package/resources/Resources.ts +162 -0
- package/resources/RocksIndexStore.ts +70 -0
- package/resources/RocksTransactionLogStore.ts +352 -0
- package/resources/Table.ts +4527 -0
- package/resources/analytics/hostnames.ts +72 -0
- package/resources/analytics/metadata.ts +10 -0
- package/resources/analytics/read.ts +252 -0
- package/resources/analytics/write.ts +803 -0
- package/resources/auditStore.ts +556 -0
- package/resources/blob.ts +1268 -0
- package/resources/crdt.ts +125 -0
- package/resources/dataLoader.ts +527 -0
- package/resources/databases.ts +1290 -0
- package/resources/graphql.ts +221 -0
- package/resources/indexes/HierarchicalNavigableSmallWorld.ts +638 -0
- package/resources/indexes/customIndexes.ts +7 -0
- package/resources/indexes/vector.ts +38 -0
- package/resources/jsResource.ts +86 -0
- package/resources/loadEnv.ts +22 -0
- package/resources/login.ts +18 -0
- package/resources/openApi.ts +409 -0
- package/resources/registrationDeprecated.ts +8 -0
- package/resources/replayLogs.ts +136 -0
- package/resources/roles.ts +98 -0
- package/resources/search.ts +1301 -0
- package/resources/tracked.ts +584 -0
- package/resources/transaction.ts +89 -0
- package/resources/transactionBroadcast.ts +258 -0
- package/security/auth.ts +376 -0
- package/security/certificateVerification/certificateVerificationSource.ts +84 -0
- package/security/certificateVerification/configValidation.ts +107 -0
- package/security/certificateVerification/crlVerification.ts +623 -0
- package/security/certificateVerification/index.ts +121 -0
- package/security/certificateVerification/ocspVerification.ts +148 -0
- package/security/certificateVerification/pkijs-ed25519-patch.ts +188 -0
- package/security/certificateVerification/types.ts +128 -0
- package/security/certificateVerification/verificationConfig.ts +138 -0
- package/security/certificateVerification/verificationUtils.ts +447 -0
- package/security/cryptoHash.js +42 -0
- package/security/data_objects/PermissionAttributeResponseObject.js +15 -0
- package/security/data_objects/PermissionResponseObject.js +115 -0
- package/security/data_objects/PermissionTableResponseObject.js +20 -0
- package/security/fastifyAuth.js +169 -0
- package/security/impersonation.ts +160 -0
- package/security/jsLoader.ts +716 -0
- package/security/keys.js +948 -0
- package/security/permissionsTranslator.js +300 -0
- package/security/role.js +218 -0
- package/security/tokenAuthentication.ts +228 -0
- package/security/user.ts +449 -0
- package/server/DurableSubscriptionsSession.ts +503 -0
- package/server/REST.ts +407 -0
- package/server/Server.ts +89 -0
- package/server/fastifyRoutes/helpers/getCORSOptions.js +36 -0
- package/server/fastifyRoutes/helpers/getHeaderTimeoutConfig.js +15 -0
- package/server/fastifyRoutes/helpers/getServerOptions.js +33 -0
- package/server/fastifyRoutes/plugins/hdbCore.js +39 -0
- package/server/fastifyRoutes.ts +205 -0
- package/server/graphqlQuerying.ts +700 -0
- package/server/http.ts +640 -0
- package/server/itc/serverHandlers.js +161 -0
- package/server/itc/utility/ITCEventObject.js +10 -0
- package/server/jobs/JobObject.js +24 -0
- package/server/jobs/jobProcess.js +69 -0
- package/server/jobs/jobRunner.js +162 -0
- package/server/jobs/jobs.js +304 -0
- package/server/loadRootComponents.js +44 -0
- package/server/mqtt.ts +485 -0
- package/server/nodeName.ts +75 -0
- package/server/operationsServer.ts +313 -0
- package/server/serverHelpers/Headers.ts +108 -0
- package/server/serverHelpers/JSONStream.ts +269 -0
- package/server/serverHelpers/OperationFunctionObject.ts +13 -0
- package/server/serverHelpers/Request.ts +158 -0
- package/server/serverHelpers/contentTypes.ts +637 -0
- package/server/serverHelpers/requestTimePlugin.js +57 -0
- package/server/serverHelpers/serverHandlers.js +148 -0
- package/server/serverHelpers/serverUtilities.ts +473 -0
- package/server/serverRegistry.ts +8 -0
- package/server/static.ts +187 -0
- package/server/status/definitions.ts +37 -0
- package/server/status/index.ts +125 -0
- package/server/storageReclamation.ts +93 -0
- package/server/threads/itc.js +89 -0
- package/server/threads/manageThreads.js +594 -0
- package/server/threads/socketRouter.ts +360 -0
- package/server/threads/threadServer.js +279 -0
- package/server/throttle.ts +73 -0
- package/sqlTranslator/SelectValidator.js +330 -0
- package/sqlTranslator/alasqlFunctionImporter.js +62 -0
- package/sqlTranslator/deleteTranslator.js +67 -0
- package/sqlTranslator/index.js +242 -0
- package/sqlTranslator/sql_statement_bucket.js +472 -0
- package/static/defaultConfig.yaml +3 -0
- package/studio/web/HDBDogOnly.svg +78 -0
- package/studio/web/assets/PPRadioGrotesk-Bold-DDaUYG8E.woff +0 -0
- package/studio/web/assets/fa-brands-400-CEJbCg16.woff +0 -0
- package/studio/web/assets/fa-brands-400-CSYNqBb_.ttf +0 -0
- package/studio/web/assets/fa-brands-400-DnkPfk3o.eot +0 -0
- package/studio/web/assets/fa-brands-400-UxlILjvJ.woff2 +0 -0
- package/studio/web/assets/fa-brands-400-cH1MgKbP.svg +3717 -0
- package/studio/web/assets/fa-regular-400-BhTwtT8w.eot +0 -0
- package/studio/web/assets/fa-regular-400-D1vz6WBx.ttf +0 -0
- package/studio/web/assets/fa-regular-400-DFnMcJPd.woff +0 -0
- package/studio/web/assets/fa-regular-400-DGzu1beS.woff2 +0 -0
- package/studio/web/assets/fa-regular-400-gwj8Pxq-.svg +801 -0
- package/studio/web/assets/fa-solid-900-B4ZZ7kfP.svg +5034 -0
- package/studio/web/assets/fa-solid-900-B6Axprfb.eot +0 -0
- package/studio/web/assets/fa-solid-900-BUswJgRo.woff2 +0 -0
- package/studio/web/assets/fa-solid-900-DOXgCApm.woff +0 -0
- package/studio/web/assets/fa-solid-900-mxuxnBEa.ttf +0 -0
- package/studio/web/assets/index-BTgXJX9d.js +235 -0
- package/studio/web/assets/index-BTgXJX9d.js.map +1 -0
- package/studio/web/assets/index-C-GXfcup.js +37 -0
- package/studio/web/assets/index-C-GXfcup.js.map +1 -0
- package/studio/web/assets/index-PFlNdimM.js +2 -0
- package/studio/web/assets/index-PFlNdimM.js.map +1 -0
- package/studio/web/assets/index-Y2g_iFpU.css +1 -0
- package/studio/web/assets/index-jiPwkrsB.css +1 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js +266 -0
- package/studio/web/assets/index.lazy-C3TJZJ4o.js.map +1 -0
- package/studio/web/assets/profiler-DotzgiCJ.js +2 -0
- package/studio/web/assets/profiler-DotzgiCJ.js.map +1 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js +6 -0
- package/studio/web/assets/react-redux-VxUEx_mU.js.map +1 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js +3 -0
- package/studio/web/assets/startRecording-B_9J9Csd.js.map +1 -0
- package/studio/web/fabric-signup-background.webp +0 -0
- package/studio/web/fabric-signup-text.png +0 -0
- package/studio/web/favicon_purple.png +0 -0
- package/studio/web/github-icon.svg +15 -0
- package/studio/web/harper-fabric_black.png +0 -0
- package/studio/web/harper-fabric_white.png +0 -0
- package/studio/web/harper-studio_white.png +0 -0
- package/studio/web/index.html +16 -0
- package/studio/web/running.css +148 -0
- package/studio/web/running.html +147 -0
- package/studio/web/running.js +111 -0
- package/upgrade/UpgradeObjects.js +13 -0
- package/upgrade/directives/directivesController.js +90 -0
- package/upgrade/directivesManager.js +139 -0
- package/upgrade/upgradePrompt.js +124 -0
- package/upgrade/upgradeUtilities.js +28 -0
- package/utility/AWS/AWSConnector.js +29 -0
- package/utility/OperationFunctionCaller.js +63 -0
- package/utility/assignCmdEnvVariables.js +62 -0
- package/utility/common_utils.js +867 -0
- package/utility/environment/environmentManager.js +208 -0
- package/utility/environment/systemInformation.js +355 -0
- package/utility/errors/commonErrors.js +267 -0
- package/utility/errors/hdbError.js +146 -0
- package/utility/functions/date/dateFunctions.js +65 -0
- package/utility/functions/geo.js +355 -0
- package/utility/functions/sql/alaSQLExtension.js +104 -0
- package/utility/globalSchema.js +35 -0
- package/utility/hdbTerms.ts +819 -0
- package/utility/install/checkJWTTokensExist.js +62 -0
- package/utility/install/harperdb.conf +15 -0
- package/utility/install/harperdb.service +14 -0
- package/utility/install/installer.js +635 -0
- package/utility/installation.ts +30 -0
- package/utility/lmdb/DBIDefinition.js +20 -0
- package/utility/lmdb/DeleteRecordsResponseObject.js +25 -0
- package/utility/lmdb/InsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/OpenDBIObject.js +31 -0
- package/utility/lmdb/OpenEnvironmentObject.js +41 -0
- package/utility/lmdb/UpdateRecordsResponseObject.js +25 -0
- package/utility/lmdb/UpsertRecordsResponseObject.js +22 -0
- package/utility/lmdb/cleanLMDBMap.js +65 -0
- package/utility/lmdb/commonUtility.js +119 -0
- package/utility/lmdb/deleteUtility.js +128 -0
- package/utility/lmdb/environmentUtility.js +477 -0
- package/utility/lmdb/searchCursorFunctions.js +187 -0
- package/utility/lmdb/searchUtility.js +918 -0
- package/utility/lmdb/terms.js +57 -0
- package/utility/lmdb/writeUtility.js +407 -0
- package/utility/logging/harper_logger.js +876 -0
- package/utility/logging/logRotator.js +157 -0
- package/utility/logging/logger.ts +24 -0
- package/utility/logging/readLog.js +355 -0
- package/utility/logging/transactionLog.js +57 -0
- package/utility/mount_hdb.js +59 -0
- package/utility/npmUtilities.js +102 -0
- package/utility/operationPermissions.ts +112 -0
- package/utility/operation_authorization.js +836 -0
- package/utility/packageUtils.js +55 -0
- package/utility/password.ts +99 -0
- package/utility/processManagement/processManagement.js +187 -0
- package/utility/processManagement/servicesConfig.js +56 -0
- package/utility/scripts/restartHdb.js +24 -0
- package/utility/scripts/user_data.sh +13 -0
- package/utility/signalling.js +36 -0
- package/utility/terms/certificates.js +81 -0
- package/utility/when.ts +20 -0
- package/v1.d.ts +39 -0
- package/v1.js +41 -0
- package/v2.d.ts +39 -0
- package/v2.js +41 -0
- package/validation/bulkDeleteValidator.js +24 -0
- package/validation/check_permissions.js +19 -0
- package/validation/common_validators.js +95 -0
- package/validation/configValidator.js +331 -0
- package/validation/deleteValidator.js +15 -0
- package/validation/fileLoadValidator.js +153 -0
- package/validation/insertValidator.js +40 -0
- package/validation/installValidator.js +37 -0
- package/validation/readLogValidator.js +64 -0
- package/validation/role_validation.js +320 -0
- package/validation/schemaMetadataValidator.js +42 -0
- package/validation/searchValidator.js +166 -0
- package/validation/statusValidator.ts +66 -0
- package/validation/transactionLogValidator.js +33 -0
- package/validation/user_validation.js +55 -0
- package/validation/validationWrapper.js +105 -0
- package/dist/resources/analytics/profile.d.ts +0 -2
- package/dist/resources/analytics/profile.js +0 -144
- package/dist/resources/analytics/profile.js.map +0 -1
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
const clone = require('clone');
|
|
2
|
+
const validator = require('./validationWrapper.js');
|
|
3
|
+
const commonUtils = require('../utility/common_utils.js');
|
|
4
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
const joi = require('joi');
|
|
7
|
+
const { string } = joi.types();
|
|
8
|
+
const { hdbErrors, handleHDBError } = require('../utility/errors/hdbError.js');
|
|
9
|
+
const { HTTP_STATUS_CODES } = hdbErrors;
|
|
10
|
+
|
|
11
|
+
const { commonValidators } = require('./common_validators.js');
|
|
12
|
+
|
|
13
|
+
const isRequiredString = ' is required';
|
|
14
|
+
|
|
15
|
+
const actions = ['insert', 'update', 'upsert'];
|
|
16
|
+
const constraints = {
|
|
17
|
+
database: {
|
|
18
|
+
presence: false,
|
|
19
|
+
format: commonValidators.schema_format,
|
|
20
|
+
length: commonValidators.schema_length,
|
|
21
|
+
},
|
|
22
|
+
schema: {
|
|
23
|
+
presence: false,
|
|
24
|
+
format: commonValidators.schema_format,
|
|
25
|
+
length: commonValidators.schema_length,
|
|
26
|
+
},
|
|
27
|
+
table: {
|
|
28
|
+
presence: true,
|
|
29
|
+
format: commonValidators.schema_format,
|
|
30
|
+
length: commonValidators.schema_length,
|
|
31
|
+
},
|
|
32
|
+
action: {
|
|
33
|
+
inclusion: {
|
|
34
|
+
within: actions,
|
|
35
|
+
message: 'is required and must be either insert, update, or upsert',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
file_path: {},
|
|
39
|
+
csv_url: {
|
|
40
|
+
url: {
|
|
41
|
+
allowLocal: true,
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
data: {},
|
|
45
|
+
passthrough_headers: {},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
const baseJoiSchema = {
|
|
49
|
+
schema: string.required(),
|
|
50
|
+
table: string.required(),
|
|
51
|
+
action: string.valid('insert', 'update', 'upsert'),
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const { AWS_ACCESS_KEY, AWS_SECRET, AWS_BUCKET, AWS_FILE_KEY, REGION } = hdbTerms.S3_BUCKET_AUTH_KEYS;
|
|
55
|
+
|
|
56
|
+
const s3Constraints = {
|
|
57
|
+
s3: {
|
|
58
|
+
presence: true,
|
|
59
|
+
},
|
|
60
|
+
[`s3.${AWS_ACCESS_KEY}`]: {
|
|
61
|
+
presence: true,
|
|
62
|
+
type: 'String',
|
|
63
|
+
},
|
|
64
|
+
[`s3.${AWS_SECRET}`]: {
|
|
65
|
+
presence: true,
|
|
66
|
+
type: 'String',
|
|
67
|
+
},
|
|
68
|
+
[`s3.${AWS_BUCKET}`]: {
|
|
69
|
+
presence: true,
|
|
70
|
+
type: 'String',
|
|
71
|
+
},
|
|
72
|
+
[`s3.${AWS_FILE_KEY}`]: {
|
|
73
|
+
presence: true,
|
|
74
|
+
type: 'String',
|
|
75
|
+
hasValidFileExt: ['.csv', '.json'],
|
|
76
|
+
},
|
|
77
|
+
[`s3.${REGION}`]: {
|
|
78
|
+
presence: true,
|
|
79
|
+
type: 'String',
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
const dataConstraints = clone(constraints);
|
|
84
|
+
dataConstraints.data.presence = {
|
|
85
|
+
message: isRequiredString,
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
const fileConstraints = clone(constraints);
|
|
89
|
+
fileConstraints.file_path.presence = {
|
|
90
|
+
message: isRequiredString,
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
const s3FileConstraints = Object.assign(clone(constraints), s3Constraints);
|
|
94
|
+
|
|
95
|
+
const urlSchema = clone(baseJoiSchema);
|
|
96
|
+
urlSchema.csv_url = string.uri().messages({ 'string.uri': "'csv_url' must be a valid url" }).required();
|
|
97
|
+
urlSchema.passthrough_headers = joi.object();
|
|
98
|
+
|
|
99
|
+
function dataObject(object) {
|
|
100
|
+
let validateRes = validator.validateObject(object, dataConstraints);
|
|
101
|
+
return postValidateChecks(object, validateRes);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function urlObject(object) {
|
|
105
|
+
let validateRes = validator.validateBySchema(object, joi.object(urlSchema));
|
|
106
|
+
return postValidateChecks(object, validateRes);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function fileObject(object) {
|
|
110
|
+
let validateRes = validator.validateObject(object, fileConstraints);
|
|
111
|
+
return postValidateChecks(object, validateRes);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function s3FileObject(object) {
|
|
115
|
+
let validateRes = validator.validateObject(object, s3FileConstraints);
|
|
116
|
+
return postValidateChecks(object, validateRes);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Post validate module checks, confirms schema and table exist.
|
|
121
|
+
* If file upload - checks that it exists, permissions and size.
|
|
122
|
+
*/
|
|
123
|
+
function postValidateChecks(object, validateRes) {
|
|
124
|
+
if (!validateRes) {
|
|
125
|
+
let msg = commonUtils.checkGlobalSchemaTable(object.schema, object.table);
|
|
126
|
+
if (msg) {
|
|
127
|
+
return handleHDBError(new Error(), msg, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
if (object.operation === hdbTerms.OPERATIONS_ENUM.CSV_FILE_LOAD) {
|
|
131
|
+
try {
|
|
132
|
+
fs.accessSync(object.file_path, fs.constants.R_OK | fs.constants.F_OK);
|
|
133
|
+
} catch (err) {
|
|
134
|
+
if (err.code === hdbTerms.NODE_ERROR_CODES.ENOENT) {
|
|
135
|
+
return handleHDBError(err, `No such file or directory ${err.path}`, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
if (err.code === hdbTerms.NODE_ERROR_CODES.EACCES) {
|
|
139
|
+
return handleHDBError(err, `Permission denied ${err.path}`, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
140
|
+
}
|
|
141
|
+
return handleHDBError(err);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return validateRes;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
module.exports = {
|
|
149
|
+
dataObject,
|
|
150
|
+
urlObject,
|
|
151
|
+
fileObject,
|
|
152
|
+
s3FileObject,
|
|
153
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const { hdbTable, hdbDatabase } = require('./common_validators.js');
|
|
2
|
+
const validator = require('./validationWrapper.js');
|
|
3
|
+
const Joi = require('joi');
|
|
4
|
+
const INVALID_ATTRIBUTE_NAMES = {
|
|
5
|
+
undefined: 'undefined',
|
|
6
|
+
null: 'null',
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const customRecordsVal = (value, helpers) => {
|
|
10
|
+
const attributes = Object.keys(value);
|
|
11
|
+
const attributesLength = attributes.length;
|
|
12
|
+
let errorMsg = undefined;
|
|
13
|
+
for (let i = 0; i < attributesLength; i++) {
|
|
14
|
+
const attribute = attributes[i];
|
|
15
|
+
if (!attribute || attribute.length === 0 || INVALID_ATTRIBUTE_NAMES[attribute] !== undefined) {
|
|
16
|
+
if (errorMsg === undefined) {
|
|
17
|
+
errorMsg = `Invalid attribute name: '${attribute}'`;
|
|
18
|
+
} else {
|
|
19
|
+
errorMsg += `. Invalid attribute name: '${attribute}'`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
if (errorMsg) {
|
|
25
|
+
return helpers.message(errorMsg);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return value;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const insertSchema = Joi.object({
|
|
32
|
+
database: hdbDatabase,
|
|
33
|
+
schema: hdbDatabase,
|
|
34
|
+
table: hdbTable,
|
|
35
|
+
records: Joi.array().items(Joi.object().custom(customRecordsVal)).required(),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
module.exports = function (insertObject) {
|
|
39
|
+
return validator.validateBySchema(insertObject, insertSchema);
|
|
40
|
+
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const Joi = require('joi');
|
|
4
|
+
const { string, number } = Joi.types();
|
|
5
|
+
const fs = require('fs-extra');
|
|
6
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const validator = require('../validation/validationWrapper.js');
|
|
9
|
+
|
|
10
|
+
module.exports = installValidator;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Used to validate any command or environment variables used passed to install.
|
|
14
|
+
* @param param
|
|
15
|
+
* @returns {*}
|
|
16
|
+
*/
|
|
17
|
+
function installValidator(param) {
|
|
18
|
+
const installSchema = Joi.object({
|
|
19
|
+
[hdbTerms.INSTALL_PROMPTS.ROOTPATH]: Joi.custom(validateRootAvailable),
|
|
20
|
+
[hdbTerms.INSTALL_PROMPTS.OPERATIONSAPI_NETWORK_PORT]: Joi.alternatives([number.min(0), string]).allow(
|
|
21
|
+
'null',
|
|
22
|
+
null
|
|
23
|
+
),
|
|
24
|
+
[hdbTerms.INSTALL_PROMPTS.TC_AGREEMENT]: string.valid('yes', 'YES', 'Yes'),
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
return validator.validateBySchema(param, installSchema);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function validateRootAvailable(value, helpers) {
|
|
31
|
+
if (
|
|
32
|
+
fs.existsSync(path.join(value, 'system/hdb_user/data.mdb')) ||
|
|
33
|
+
fs.existsSync(path.join(value, 'system/hdb_user.mdb'))
|
|
34
|
+
) {
|
|
35
|
+
return helpers.message(`'${value}' is already in use. Please enter a different path.`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const envMangr = require('../utility/environment/environmentManager.js');
|
|
4
|
+
const Joi = require('joi');
|
|
5
|
+
const validator = require('./validationWrapper.js');
|
|
6
|
+
const moment = require('moment');
|
|
7
|
+
const fs = require('fs-extra');
|
|
8
|
+
const path = require('path');
|
|
9
|
+
const _ = require('lodash');
|
|
10
|
+
const hdbTerms = require('../utility/hdbTerms.ts');
|
|
11
|
+
const { LOG_LEVELS } = require('../utility/hdbTerms.ts');
|
|
12
|
+
|
|
13
|
+
const LOG_DATE_FORMAT = 'YYYY-MM-DD hh:mm:ss';
|
|
14
|
+
const INSTALL_LOG_LOCATION = path.resolve(__dirname, `../logs`);
|
|
15
|
+
|
|
16
|
+
module.exports = function (object) {
|
|
17
|
+
return validator.validateBySchema(object, readLogSchema);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const readLogSchema = Joi.object({
|
|
21
|
+
from: Joi.custom(validateDatetime),
|
|
22
|
+
until: Joi.custom(validateDatetime),
|
|
23
|
+
to: Joi.custom(validateDatetime),
|
|
24
|
+
level: Joi.valid(
|
|
25
|
+
LOG_LEVELS.NOTIFY,
|
|
26
|
+
LOG_LEVELS.FATAL,
|
|
27
|
+
LOG_LEVELS.ERROR,
|
|
28
|
+
LOG_LEVELS.WARN,
|
|
29
|
+
LOG_LEVELS.INFO,
|
|
30
|
+
LOG_LEVELS.DEBUG,
|
|
31
|
+
LOG_LEVELS.TRACE
|
|
32
|
+
),
|
|
33
|
+
order: Joi.valid('asc', 'desc'),
|
|
34
|
+
limit: Joi.number().min(1),
|
|
35
|
+
start: Joi.number().min(0),
|
|
36
|
+
log_name: Joi.custom(validateReadLogPath),
|
|
37
|
+
filter: Joi.string(),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
function validateDatetime(value, helpers) {
|
|
41
|
+
if (moment(value, moment.ISO_8601).format(LOG_DATE_FORMAT) === 'Invalid date') {
|
|
42
|
+
return helpers.message(`'${helpers.state.path[0]}' date '${value}' is invalid.`);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function validateReadLogPath(value, helpers) {
|
|
47
|
+
const processLogName = _.invert(hdbTerms.LOG_NAMES);
|
|
48
|
+
if (processLogName[value] === undefined) {
|
|
49
|
+
return helpers.message(`'log_name' '${value}' is invalid.`);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const logPath = envMangr.get(hdbTerms.HDB_SETTINGS_NAMES.LOG_PATH_KEY);
|
|
53
|
+
const logName = value === undefined ? hdbTerms.LOG_NAMES.HDB : value;
|
|
54
|
+
const readLogPath =
|
|
55
|
+
logName === hdbTerms.LOG_NAMES.INSTALL
|
|
56
|
+
? path.join(INSTALL_LOG_LOCATION, hdbTerms.LOG_NAMES.INSTALL)
|
|
57
|
+
: path.join(logPath, logName);
|
|
58
|
+
|
|
59
|
+
let exists = fs.existsSync(readLogPath);
|
|
60
|
+
if (exists) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return helpers.message(`'log_name' '${value}' does not exist.`);
|
|
64
|
+
}
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
const validate = require('validate.js'),
|
|
2
|
+
validator = require('./validationWrapper.js'),
|
|
3
|
+
terms = require('../utility/hdbTerms.ts'),
|
|
4
|
+
{ validateOperations } = require('../utility/operationPermissions.ts'),
|
|
5
|
+
{ handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
|
|
6
|
+
|
|
7
|
+
const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
|
|
8
|
+
|
|
9
|
+
const constraintsTemplate = () => ({
|
|
10
|
+
role: {
|
|
11
|
+
presence: true,
|
|
12
|
+
format: '[\\w\\-\\_]+',
|
|
13
|
+
},
|
|
14
|
+
id: {
|
|
15
|
+
presence: true,
|
|
16
|
+
format: '[\\w\\-\\_]+',
|
|
17
|
+
},
|
|
18
|
+
permission: {
|
|
19
|
+
presence: true,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const STRUCTURE_USER_ENUM = {
|
|
24
|
+
STRUCTURE_USER: 'structure_user',
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const OPERATIONS_KEY = 'operations';
|
|
28
|
+
|
|
29
|
+
const ROLE_TYPES = Object.values(terms.ROLE_TYPES_ENUM);
|
|
30
|
+
const ATTR_PERMS_KEY = 'attribute_permissions';
|
|
31
|
+
const ATTR_NAME_KEY = 'attribute_name';
|
|
32
|
+
const { PERMS_CRUD_ENUM } = terms;
|
|
33
|
+
const TABLE_PERM_KEYS = [ATTR_PERMS_KEY, ...Object.values(PERMS_CRUD_ENUM)];
|
|
34
|
+
const ATTR_CRU_KEYS = [PERMS_CRUD_ENUM.READ, PERMS_CRUD_ENUM.INSERT, PERMS_CRUD_ENUM.UPDATE];
|
|
35
|
+
const ATTR_PERMS_KEYS = [ATTR_NAME_KEY, ...ATTR_CRU_KEYS];
|
|
36
|
+
|
|
37
|
+
function addRoleValidation(object) {
|
|
38
|
+
const constraints = constraintsTemplate();
|
|
39
|
+
constraints.role.presence = true;
|
|
40
|
+
constraints.id.presence = false;
|
|
41
|
+
constraints.permission.presence = true;
|
|
42
|
+
return customValidate(object, constraints);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function alterRoleValidation(object) {
|
|
46
|
+
const constraints = constraintsTemplate();
|
|
47
|
+
constraints.role.presence = false;
|
|
48
|
+
constraints.id.presence = true;
|
|
49
|
+
constraints.permission.presence = true;
|
|
50
|
+
return customValidate(object, constraints);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function dropRoleValidation(object) {
|
|
54
|
+
const constraints = constraintsTemplate();
|
|
55
|
+
constraints.role.presence = false;
|
|
56
|
+
constraints.id.presence = true;
|
|
57
|
+
constraints.permission.presence = false;
|
|
58
|
+
return validator.validateObject(object, constraints);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
const ALLOWED_JSON_KEYS = ['operation', 'role', 'id', 'permission', 'hdb_user', 'access'];
|
|
62
|
+
|
|
63
|
+
function customValidate(object, constraints) {
|
|
64
|
+
let validationErrors = {
|
|
65
|
+
main_permissions: [],
|
|
66
|
+
schema_permissions: {},
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const jsonMsgKeys = Object.keys(object);
|
|
70
|
+
|
|
71
|
+
//Check to confirm that keys in JSON body are valid
|
|
72
|
+
const invalidKeys = [];
|
|
73
|
+
for (let i = 0, arrLength = jsonMsgKeys.length; i < arrLength; i++) {
|
|
74
|
+
if (!ALLOWED_JSON_KEYS.includes(jsonMsgKeys[i])) {
|
|
75
|
+
invalidKeys.push(jsonMsgKeys[i]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (invalidKeys.length > 0) {
|
|
79
|
+
addPermError(HDB_ERROR_MSGS.INVALID_ROLE_JSON_KEYS(invalidKeys), validationErrors);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
let validateResult = validator.validateObject(object, constraints);
|
|
83
|
+
if (validateResult) {
|
|
84
|
+
validateResult.message.split(',').forEach((validationErr) => {
|
|
85
|
+
addPermError(validationErr, validationErrors);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//need this check to avoid unexpected errors if someone doesn't have permissions key included in request
|
|
90
|
+
if (object.permission) {
|
|
91
|
+
//check if role is SU or CU and has perms included
|
|
92
|
+
const suPermsError = validateNoSUPerms(object);
|
|
93
|
+
if (suPermsError) {
|
|
94
|
+
addPermError(suPermsError, validationErrors);
|
|
95
|
+
}
|
|
96
|
+
//check if cu or su values, if included, are booleans
|
|
97
|
+
ROLE_TYPES.forEach((role) => {
|
|
98
|
+
if (object.permission[role] && !validate.isBoolean(object.permission[role])) {
|
|
99
|
+
addPermError(HDB_ERROR_MSGS.SU_CU_ROLE_BOOLEAN_ERROR(role), validationErrors);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
for (let item in object.permission) {
|
|
105
|
+
if (ROLE_TYPES.indexOf(item) < 0) {
|
|
106
|
+
//validate the user type 'structure_user'. acceptable data type is boolean or array of strings (this would be array of accepted schemas to interact with)
|
|
107
|
+
if (item === STRUCTURE_USER_ENUM.STRUCTURE_USER) {
|
|
108
|
+
let structureUserPerm = object.permission[item];
|
|
109
|
+
|
|
110
|
+
//boolean is valid, move on
|
|
111
|
+
if (typeof structureUserPerm === 'boolean') {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
//array is valid check to make sure each entry is actually a schema.
|
|
116
|
+
if (Array.isArray(structureUserPerm)) {
|
|
117
|
+
for (let k = 0, length = structureUserPerm.length; k < length; k++) {
|
|
118
|
+
let schemaPerm = structureUserPerm[k];
|
|
119
|
+
if (!global.hdb_schema[schemaPerm]) {
|
|
120
|
+
addPermError(HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(schemaPerm), validationErrors);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
//if we end up here then this is an invalid data type
|
|
127
|
+
addPermError(HDB_ERROR_MSGS.STRUCTURE_USER_ROLE_TYPE_ERROR(item), validationErrors);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// validate operations: must be an array of valid operation names and/or group names
|
|
132
|
+
if (item === OPERATIONS_KEY) {
|
|
133
|
+
const opUserPerm = object.permission[item];
|
|
134
|
+
|
|
135
|
+
if (!Array.isArray(opUserPerm)) {
|
|
136
|
+
addPermError(HDB_ERROR_MSGS.OPERATIONS_MUST_BE_ARRAY, validationErrors);
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const invalidOp = validateOperations(opUserPerm);
|
|
141
|
+
if (invalidOp !== null) {
|
|
142
|
+
addPermError(HDB_ERROR_MSGS.INVALID_OPERATIONS_OP(invalidOp), validationErrors);
|
|
143
|
+
}
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
let schema = object.permission[item];
|
|
148
|
+
//validate that schema exists
|
|
149
|
+
if (!item || !global.hdb_schema[item]) {
|
|
150
|
+
addPermError(HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(item), validationErrors);
|
|
151
|
+
continue;
|
|
152
|
+
}
|
|
153
|
+
if (schema.tables) {
|
|
154
|
+
for (let t in schema.tables) {
|
|
155
|
+
let table = schema.tables[t];
|
|
156
|
+
//validate that table exists in schema
|
|
157
|
+
if (!t || !global.hdb_schema[item][t]) {
|
|
158
|
+
addPermError(HDB_ERROR_MSGS.TABLE_NOT_FOUND(item, t), validationErrors);
|
|
159
|
+
continue;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
//validate all table perm keys are valid
|
|
163
|
+
Object.keys(table).forEach((tableKey) => {
|
|
164
|
+
if (!TABLE_PERM_KEYS.includes(tableKey)) {
|
|
165
|
+
addPermError(HDB_ERROR_MSGS.INVALID_PERM_KEY(tableKey), validationErrors, item, t);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
//validate table CRUD perms
|
|
170
|
+
Object.values(PERMS_CRUD_ENUM).forEach((permKey) => {
|
|
171
|
+
if (!validate.isDefined(table[permKey])) {
|
|
172
|
+
addPermError(HDB_ERROR_MSGS.TABLE_PERM_MISSING(permKey), validationErrors, item, t);
|
|
173
|
+
} else if (!validate.isBoolean(table[permKey])) {
|
|
174
|
+
addPermError(HDB_ERROR_MSGS.TABLE_PERM_NOT_BOOLEAN(permKey), validationErrors, item, t);
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
//validate table ATTRIBUTE_PERMISSIONS perm
|
|
179
|
+
if (table.attribute_permissions === undefined) {
|
|
180
|
+
addPermError(HDB_ERROR_MSGS.ATTR_PERMS_ARRAY_MISSING, validationErrors, item, t);
|
|
181
|
+
continue;
|
|
182
|
+
} else if (!(Array.isArray(table.attribute_permissions) || table.attribute_permissions === null)) {
|
|
183
|
+
addPermError(HDB_ERROR_MSGS.ATTR_PERMS_NOT_ARRAY, validationErrors, item, t);
|
|
184
|
+
continue;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//need this check here to ensure no unexpected errors if key is missing in table perms obj
|
|
188
|
+
if (table.attribute_permissions) {
|
|
189
|
+
let tableAttributeNames = global.hdb_schema[item][t].attributes.map(({ attribute }) => attribute);
|
|
190
|
+
const attrPermsCheck = {
|
|
191
|
+
read: false,
|
|
192
|
+
insert: false,
|
|
193
|
+
update: false,
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
for (let r in table.attribute_permissions) {
|
|
197
|
+
let permission = table.attribute_permissions[r];
|
|
198
|
+
|
|
199
|
+
Object.keys(permission).forEach((key) => {
|
|
200
|
+
//Leaving this second check for "DELETE" in for now since we've decided to silently
|
|
201
|
+
// allow it to remain in the attr permission object even though we do not use it
|
|
202
|
+
if (!ATTR_PERMS_KEYS.includes(key) && key !== PERMS_CRUD_ENUM.DELETE) {
|
|
203
|
+
addPermError(HDB_ERROR_MSGS.INVALID_ATTR_PERM_KEY(key), validationErrors, item, t);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
//validate that attribute_name is included
|
|
208
|
+
if (!validate.isDefined(permission.attribute_name)) {
|
|
209
|
+
addPermError(HDB_ERROR_MSGS.ATTR_PERM_MISSING_NAME, validationErrors, item, t);
|
|
210
|
+
continue;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
const attrName = permission.attribute_name;
|
|
214
|
+
//validate that attr exists in schema for table
|
|
215
|
+
if (!tableAttributeNames.includes(attrName)) {
|
|
216
|
+
addPermError(HDB_ERROR_MSGS.INVALID_ATTRIBUTE_IN_PERMS(attrName), validationErrors, item, t);
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
//validate table attribute CRU perms
|
|
221
|
+
ATTR_CRU_KEYS.forEach((permKey) => {
|
|
222
|
+
if (!validate.isDefined(permission[permKey])) {
|
|
223
|
+
addPermError(HDB_ERROR_MSGS.ATTR_PERM_MISSING(permKey, attrName), validationErrors, item, t);
|
|
224
|
+
} else if (!validate.isBoolean(permission[permKey])) {
|
|
225
|
+
addPermError(HDB_ERROR_MSGS.ATTR_PERM_NOT_BOOLEAN(permKey, attrName), validationErrors, item, t);
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
//confirm that false table perms are not set to true for an attribute
|
|
230
|
+
if (!attrPermsCheck.read && permission.read === true) {
|
|
231
|
+
attrPermsCheck.read = true;
|
|
232
|
+
}
|
|
233
|
+
if (!attrPermsCheck.insert && permission.insert === true) {
|
|
234
|
+
attrPermsCheck.insert = true;
|
|
235
|
+
}
|
|
236
|
+
if (!attrPermsCheck.update && permission.update === true) {
|
|
237
|
+
attrPermsCheck.update = true;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//validate that there is no mismatching perms between table and attrs
|
|
241
|
+
if (
|
|
242
|
+
(table.read === false && attrPermsCheck.read === true) ||
|
|
243
|
+
(table.insert === false && attrPermsCheck.insert === true) ||
|
|
244
|
+
(table.update === false && attrPermsCheck.update === true)
|
|
245
|
+
) {
|
|
246
|
+
const schemaName = `${item}.${t}`;
|
|
247
|
+
addPermError(HDB_ERROR_MSGS.MISMATCHED_TABLE_ATTR_PERMS(schemaName), validationErrors, item, t);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
return generateRolePermResponse(validationErrors);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
module.exports = {
|
|
259
|
+
addRoleValidation,
|
|
260
|
+
alterRoleValidation,
|
|
261
|
+
dropRoleValidation,
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* Validates that permissions object for CU or SU roles do not also include permissions
|
|
266
|
+
* @param obj
|
|
267
|
+
* @returns {string|null}
|
|
268
|
+
*/
|
|
269
|
+
function validateNoSUPerms(obj) {
|
|
270
|
+
const { operation, permission } = obj;
|
|
271
|
+
if (operation === terms.OPERATIONS_ENUM.ADD_ROLE || operation === terms.OPERATIONS_ENUM.ALTER_ROLE) {
|
|
272
|
+
//Check if role type is super user
|
|
273
|
+
const isSuRole = permission.super_user === true;
|
|
274
|
+
const hasPerms = Object.keys(permission).length > 1;
|
|
275
|
+
if (hasPerms && isSuRole) {
|
|
276
|
+
return HDB_ERROR_MSGS.SU_CU_ROLE_NO_PERMS_ALLOWED(terms.ROLE_TYPES_ENUM.SUPER_USER);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* Builds final permissions object error response to return if validation fails
|
|
284
|
+
*
|
|
285
|
+
* @param validationErrors
|
|
286
|
+
* @returns {null|HdbError}
|
|
287
|
+
*/
|
|
288
|
+
function generateRolePermResponse(validationErrors) {
|
|
289
|
+
const { main_permissions, schema_permissions } = validationErrors;
|
|
290
|
+
if (main_permissions.length > 0 || Object.keys(schema_permissions).length > 0) {
|
|
291
|
+
let validationMessage = {
|
|
292
|
+
error: HDB_ERROR_MSGS.ROLE_PERMS_ERROR,
|
|
293
|
+
...validationErrors,
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
return handleHDBError(new Error(), validationMessage, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
297
|
+
} else {
|
|
298
|
+
return null;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Adds perm validation error to the correct category for the final validation error response
|
|
304
|
+
* @param err
|
|
305
|
+
* @param invalidPermsObj
|
|
306
|
+
* @param schema
|
|
307
|
+
* @param table
|
|
308
|
+
*/
|
|
309
|
+
function addPermError(err, invalidPermsObj, schema, table) {
|
|
310
|
+
if (!schema) {
|
|
311
|
+
invalidPermsObj.main_permissions.push(err);
|
|
312
|
+
} else {
|
|
313
|
+
const schemaKey = table ? schema + '_' + table : schema;
|
|
314
|
+
if (!invalidPermsObj.schema_permissions[schemaKey]) {
|
|
315
|
+
invalidPermsObj.schema_permissions[schemaKey] = [err];
|
|
316
|
+
} else {
|
|
317
|
+
invalidPermsObj.schema_permissions[schemaKey].push(err);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const schemaDescribe = require('../dataLayer/schemaDescribe.js');
|
|
4
|
+
const { hdbErrors } = require('../utility/errors/hdbError.js');
|
|
5
|
+
const { getDatabases } = require('../resources/databases.ts');
|
|
6
|
+
|
|
7
|
+
module.exports = {
|
|
8
|
+
checkSchemaExists,
|
|
9
|
+
checkSchemaTableExists,
|
|
10
|
+
schemaDescribe,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Checks the global hdbSchema for a schema and table
|
|
15
|
+
* @param schemaName
|
|
16
|
+
* @param tableName
|
|
17
|
+
* @returns string returns a thrown message if schema and or table does not exist
|
|
18
|
+
*/
|
|
19
|
+
async function checkSchemaExists(schemaName) {
|
|
20
|
+
let databases = getDatabases();
|
|
21
|
+
if (!databases[schemaName]) {
|
|
22
|
+
return hdbErrors.HDB_ERROR_MSGS.SCHEMA_NOT_FOUND(schemaName);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Checks the global hdbSchema for a schema and table
|
|
28
|
+
* @param schemaName
|
|
29
|
+
* @param tableName
|
|
30
|
+
* @returns string returns a thrown message if schema and or table does not exist
|
|
31
|
+
*/
|
|
32
|
+
async function checkSchemaTableExists(schemaName, tableName) {
|
|
33
|
+
let invalidSchema = await checkSchemaExists(schemaName);
|
|
34
|
+
if (invalidSchema) {
|
|
35
|
+
return invalidSchema;
|
|
36
|
+
}
|
|
37
|
+
let databases = getDatabases();
|
|
38
|
+
|
|
39
|
+
if (!databases[schemaName][tableName]) {
|
|
40
|
+
return hdbErrors.HDB_ERROR_MSGS.TABLE_NOT_FOUND(schemaName, tableName);
|
|
41
|
+
}
|
|
42
|
+
}
|