@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,300 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const _ = require('lodash');
|
|
4
|
+
const terms = require('../utility/hdbTerms.ts');
|
|
5
|
+
const { handleHDBError, hdbErrors } = require('../utility/errors/hdbError.js');
|
|
6
|
+
const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
|
|
7
|
+
const logger = require('../utility/logging/harper_logger.js');
|
|
8
|
+
|
|
9
|
+
module.exports = {
|
|
10
|
+
getRolePermissions,
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const rolePermsMap = Object.create(null);
|
|
14
|
+
const permsTemplateObj = (permsKey) => ({ key: permsKey, perms: {} });
|
|
15
|
+
|
|
16
|
+
const schemaPermsTemplate = (describePerm = false) => ({
|
|
17
|
+
describe: describePerm,
|
|
18
|
+
tables: {},
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
const permissionsTemplate = (readPerm = false, insertPerm = false, updatePerm = false, deletePerm = false) => ({
|
|
22
|
+
[terms.PERMS_CRUD_ENUM.READ]: readPerm,
|
|
23
|
+
[terms.PERMS_CRUD_ENUM.INSERT]: insertPerm,
|
|
24
|
+
[terms.PERMS_CRUD_ENUM.UPDATE]: updatePerm,
|
|
25
|
+
[terms.PERMS_CRUD_ENUM.DELETE]: deletePerm,
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
const tablePermsTemplate = (
|
|
29
|
+
describePerm = false,
|
|
30
|
+
readPerm = false,
|
|
31
|
+
insertPerm = false,
|
|
32
|
+
updatePerm = false,
|
|
33
|
+
deletePerm = false
|
|
34
|
+
) => ({
|
|
35
|
+
attribute_permissions: [],
|
|
36
|
+
describe: describePerm,
|
|
37
|
+
...permissionsTemplate(readPerm, insertPerm, updatePerm, deletePerm),
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
const attrPermsTemplate = (attrName, perms = permissionsTemplate()) => ({
|
|
41
|
+
attribute_name: attrName,
|
|
42
|
+
describe: getAttributeDescribePerm(perms),
|
|
43
|
+
[READ]: perms[READ],
|
|
44
|
+
[INSERT]: perms[INSERT],
|
|
45
|
+
[UPDATE]: perms[UPDATE],
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
const timestampAttrPermsTemplate = (attrName, readPerm = false) => ({
|
|
49
|
+
attribute_name: attrName,
|
|
50
|
+
describe: readPerm,
|
|
51
|
+
[READ]: readPerm,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
const { READ, INSERT, UPDATE } = terms.PERMS_CRUD_ENUM;
|
|
55
|
+
const crudPermKeys = Object.values(terms.PERMS_CRUD_ENUM);
|
|
56
|
+
//we do not need/track DELETE permissions on the attribute level
|
|
57
|
+
const attrCrudPermKeys = [READ, INSERT, UPDATE];
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Takes role object and evaluates and updates stored permissions based on the more restrictive logic now in place
|
|
61
|
+
* NOTE: Values are stored in a memoization framework so they can be quickly accessed if the arguments/parameters for the
|
|
62
|
+
* function call have not changed
|
|
63
|
+
*
|
|
64
|
+
* @param role
|
|
65
|
+
* @returns {{updated permissions object value}}
|
|
66
|
+
*/
|
|
67
|
+
function getRolePermissions(role) {
|
|
68
|
+
let roleName;
|
|
69
|
+
try {
|
|
70
|
+
if (role.permission.super_user) {
|
|
71
|
+
//Super users have full CRUD access to non-system schema items so no translation is required
|
|
72
|
+
return role.permission;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
//permissions only need to be translated for non-system schema items - system specific ops are handled outside of this process
|
|
76
|
+
const nonSysSchema = { ...global.hdb_schema };
|
|
77
|
+
delete nonSysSchema[terms.SYSTEM_SCHEMA_NAME];
|
|
78
|
+
roleName = role.role;
|
|
79
|
+
//creates the unique memoization key for the role's permission based on the role updatedtime and non-system
|
|
80
|
+
// schema - if either have changed since the last time the function was called for the role, we re-run the
|
|
81
|
+
// translation to get an updated permissions set
|
|
82
|
+
const permsKey = JSON.stringify([role['__updatedtime__'], nonSysSchema]);
|
|
83
|
+
|
|
84
|
+
//If key exists already, we can return the cached value
|
|
85
|
+
if (rolePermsMap[roleName] && rolePermsMap[roleName].key === permsKey) {
|
|
86
|
+
return rolePermsMap[roleName].perms;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
//If the key does not exist, we need new perms
|
|
90
|
+
const newRolePerms = translateRolePermissions(role, nonSysSchema);
|
|
91
|
+
|
|
92
|
+
//If the role has not been memoized yet, we create a value in the cache for it and set the key OR just set the new key
|
|
93
|
+
if (!rolePermsMap[roleName]) {
|
|
94
|
+
rolePermsMap[roleName] = permsTemplateObj(permsKey);
|
|
95
|
+
} else {
|
|
96
|
+
rolePermsMap[roleName].key = permsKey;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
//Set the new perms return value into the cache
|
|
100
|
+
rolePermsMap[roleName].perms = newRolePerms;
|
|
101
|
+
|
|
102
|
+
return newRolePerms;
|
|
103
|
+
} catch (e) {
|
|
104
|
+
if (
|
|
105
|
+
!role[terms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME] ||
|
|
106
|
+
role[terms.TIME_STAMP_NAMES_ENUM.UPDATED_TIME] < terms.PERMS_UPDATE_RELEASE_TIMESTAMP
|
|
107
|
+
) {
|
|
108
|
+
const logMsg = `Role permissions for role '${roleName}' must be updated to align with new structure from the 2.2.0 release.`;
|
|
109
|
+
logger.error(logMsg);
|
|
110
|
+
logger.debug(e);
|
|
111
|
+
throw handleHDBError(new Error(), HDB_ERROR_MSGS.OUTDATED_PERMS_TRANSLATION_ERROR, HTTP_STATUS_CODES.BAD_REQUEST);
|
|
112
|
+
} else {
|
|
113
|
+
const logMsg = `There was an error while translating role permissions for role: ${roleName}.\n ${e.stack}`;
|
|
114
|
+
logger.error(logMsg);
|
|
115
|
+
throw handleHDBError(new Error());
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* If a perms value is not memoized, this method takes the role and schema and translates final permissions to set for the role
|
|
122
|
+
* and memoize
|
|
123
|
+
*
|
|
124
|
+
* @param role
|
|
125
|
+
* @param schema
|
|
126
|
+
* @returns {{translatedRolePermsObj}}
|
|
127
|
+
*/
|
|
128
|
+
function translateRolePermissions(role, schema) {
|
|
129
|
+
const finalPermissions = Object.create(null);
|
|
130
|
+
finalPermissions.super_user = false;
|
|
131
|
+
|
|
132
|
+
const perms = role.permission;
|
|
133
|
+
finalPermissions[terms.SYSTEM_SCHEMA_NAME] = perms[terms.SYSTEM_SCHEMA_NAME];
|
|
134
|
+
finalPermissions.structure_user = perms.structure_user;
|
|
135
|
+
// Preserve operations allowlist and its pre-expanded Set so the gate check in
|
|
136
|
+
// verifyPerms still has access after role.permission is replaced with fullRolePerms.
|
|
137
|
+
finalPermissions.operations = perms.operations;
|
|
138
|
+
finalPermissions._expandedOperations = perms._expandedOperations;
|
|
139
|
+
const structureUser =
|
|
140
|
+
Array.isArray(role.permission.structure_user) || role.permission.structure_user === true
|
|
141
|
+
? role.permission.structure_user
|
|
142
|
+
: [];
|
|
143
|
+
|
|
144
|
+
Object.keys(schema).forEach((s) => {
|
|
145
|
+
if (structureUser === true || structureUser.indexOf(s) > -1) {
|
|
146
|
+
finalPermissions[s] = createStructureUserPermissions(schema[s]);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
finalPermissions[s] = schemaPermsTemplate();
|
|
150
|
+
if (perms[s]) {
|
|
151
|
+
if (perms[s].describe) finalPermissions[s].describe = true; // preserve describe
|
|
152
|
+
//translate schema.tables to permissions
|
|
153
|
+
Object.keys(schema[s]).forEach((t) => {
|
|
154
|
+
if (perms[s].tables[t]) {
|
|
155
|
+
//need to evaluate individual table perms AND attr perms
|
|
156
|
+
const table_perms = perms[s].tables[t];
|
|
157
|
+
const tableSchema = schema[s][t];
|
|
158
|
+
|
|
159
|
+
const updatedTablePerms = getTableAttrPerms(table_perms, tableSchema);
|
|
160
|
+
//we need to set a read value on each schema for easy evaluation during describe ops - if any
|
|
161
|
+
// CRUD op is set to true for a table in a schema, we set the schema READ perm to true
|
|
162
|
+
if (!finalPermissions[s].describe) {
|
|
163
|
+
crudPermKeys.forEach((key) => {
|
|
164
|
+
if (updatedTablePerms[key]) {
|
|
165
|
+
finalPermissions[s].describe = true;
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
finalPermissions[s].tables[t] = updatedTablePerms;
|
|
170
|
+
} else {
|
|
171
|
+
//if table is not included in role permissions, table perms set to false
|
|
172
|
+
finalPermissions[s].tables[t] = tablePermsTemplate();
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
} else {
|
|
176
|
+
//if schema is not included in role permissions, all table perms set to false
|
|
177
|
+
Object.keys(schema[s]).forEach((t) => {
|
|
178
|
+
finalPermissions[s].tables[t] = tablePermsTemplate();
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
return finalPermissions;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* build out full access to describe & CRUD for all tables under a schema (used for structureUser)
|
|
188
|
+
* @param {Object} schema - The schema metadata
|
|
189
|
+
* @returns {{tables: {}, describe: boolean}}
|
|
190
|
+
*/
|
|
191
|
+
function createStructureUserPermissions(schema) {
|
|
192
|
+
let finalPermissions = schemaPermsTemplate(true);
|
|
193
|
+
Object.keys(schema).forEach((t) => {
|
|
194
|
+
finalPermissions.tables[t] = tablePermsTemplate(true, true, true, true, true);
|
|
195
|
+
});
|
|
196
|
+
|
|
197
|
+
return finalPermissions;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Returns table-specific perms based on the existing permissions and schema for that table
|
|
202
|
+
*
|
|
203
|
+
* @param table_perms
|
|
204
|
+
* @param tableSchema
|
|
205
|
+
* @returns {{tableSpecificPerms}}
|
|
206
|
+
*/
|
|
207
|
+
function getTableAttrPerms(table_perms, tableSchema) {
|
|
208
|
+
const { attribute_permissions } = table_perms;
|
|
209
|
+
const hasAttrPermissions = attribute_permissions?.length > 0;
|
|
210
|
+
|
|
211
|
+
if (hasAttrPermissions) {
|
|
212
|
+
//if table has attribute_permissions set, we need to loop through the table's schema and set attr-level perms
|
|
213
|
+
// based on the attr perms provided OR, if no perms provided for an attr, set attr perms to false
|
|
214
|
+
const finalTablePerms = { ...table_perms };
|
|
215
|
+
finalTablePerms.attribute_permissions = [];
|
|
216
|
+
const attrRMap = attribute_permissions.reduce((acc, item) => {
|
|
217
|
+
const { attribute_name } = item;
|
|
218
|
+
let attrPerms = item;
|
|
219
|
+
//if an system timestamp attr is included, we only set perms for READ and silently ignore/remove others
|
|
220
|
+
if (terms.TIME_STAMP_NAMES.includes(attribute_name)) {
|
|
221
|
+
attrPerms = timestampAttrPermsTemplate(attribute_name, item[READ]);
|
|
222
|
+
}
|
|
223
|
+
acc[attribute_name] = attrPerms;
|
|
224
|
+
return acc;
|
|
225
|
+
}, {});
|
|
226
|
+
|
|
227
|
+
const tableHash = tableSchema.primaryKey || tableSchema.hash_attribute;
|
|
228
|
+
const hashAttrPerm = !!attrRMap[tableHash];
|
|
229
|
+
//We need to check if all attribute permissions passed for a table are false because, if so, we do not need to
|
|
230
|
+
// force read permission for the table's hash value. If they are not and the hash value is not included in the
|
|
231
|
+
// attr perms, we need to make sure the user has read permission for the hash attr
|
|
232
|
+
const finalHashAttrPerms = attrPermsTemplate(tableHash);
|
|
233
|
+
|
|
234
|
+
tableSchema.attributes.forEach(({ attribute }) => {
|
|
235
|
+
if (attrRMap[attribute]) {
|
|
236
|
+
//if there is a permission set passed for current attribute, set it to the final perms object
|
|
237
|
+
let attrPermObj = attrRMap[attribute];
|
|
238
|
+
attrPermObj.describe = getAttributeDescribePerm(attrPermObj);
|
|
239
|
+
finalTablePerms.attribute_permissions.push(attrPermObj);
|
|
240
|
+
//if hash attr perms are not provided, check current CRUD perms values and make sure hashAttr is provided
|
|
241
|
+
// perms for any CRUD values that are set to true for other attributes
|
|
242
|
+
if (!hashAttrPerm) {
|
|
243
|
+
checkForHashPerms(attrPermObj, finalHashAttrPerms);
|
|
244
|
+
}
|
|
245
|
+
} else if (attribute !== tableHash) {
|
|
246
|
+
//if the attr isn't included in attr perms and isn't the hash, we set all perms to false
|
|
247
|
+
let attrPerms;
|
|
248
|
+
if (terms.TIME_STAMP_NAMES.includes(attribute)) {
|
|
249
|
+
attrPerms = timestampAttrPermsTemplate(attribute);
|
|
250
|
+
} else {
|
|
251
|
+
attrPerms = attrPermsTemplate(attribute);
|
|
252
|
+
}
|
|
253
|
+
finalTablePerms.attribute_permissions.push(attrPerms);
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
//final step is to ensure we include the correct hash attribute permissions in the final permissions object - if
|
|
258
|
+
// hash attr perms are included in the initial perms set, that will be handled above and we can skip this step
|
|
259
|
+
if (!hashAttrPerm) {
|
|
260
|
+
finalTablePerms.attribute_permissions.push(finalHashAttrPerms);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
finalTablePerms.describe = getSchemaTableDescribePerm(finalTablePerms);
|
|
264
|
+
return finalTablePerms;
|
|
265
|
+
} else {
|
|
266
|
+
table_perms.describe = getSchemaTableDescribePerm(table_perms);
|
|
267
|
+
return table_perms;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
/**
|
|
272
|
+
* This method takes a perm object and returns a boolean value for whether or not the schema item should be included in
|
|
273
|
+
* a describe operation for the role being evaluated
|
|
274
|
+
*
|
|
275
|
+
* @param permObj - the perm object to evaluate CRUD permissions for
|
|
276
|
+
* @returns {boolean} - returns TRUE if there is at least one CRUD perm set to TRUE
|
|
277
|
+
*/
|
|
278
|
+
function getSchemaTableDescribePerm(permObj) {
|
|
279
|
+
return crudPermKeys.filter((perm) => permObj[perm]).length > 0;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
function getAttributeDescribePerm(permObj) {
|
|
283
|
+
return attrCrudPermKeys.filter((perm) => permObj[perm]).length > 0;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Checks the attribute permissions object and updates the final hash attribute permissions, if necessary
|
|
288
|
+
*
|
|
289
|
+
* @param attrPermObj - perms for attribute being evaluated
|
|
290
|
+
* @param hashPerms - final perms object to update based on attribute being evaluated
|
|
291
|
+
* @returns {hashPerms} - final permissions object that will be assigned to the hash attribute
|
|
292
|
+
*/
|
|
293
|
+
function checkForHashPerms(attrPermObj, hashPerms) {
|
|
294
|
+
attrCrudPermKeys.forEach((perm) => {
|
|
295
|
+
if (attrPermObj[perm] && !hashPerms[perm]) {
|
|
296
|
+
hashPerms[perm] = true;
|
|
297
|
+
hashPerms.describe = true;
|
|
298
|
+
}
|
|
299
|
+
});
|
|
300
|
+
}
|
package/security/role.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const insert = require('../dataLayer/insert.js');
|
|
4
|
+
const search = require('../dataLayer/search.js');
|
|
5
|
+
const delete_ = require('../dataLayer/delete.js');
|
|
6
|
+
const validation = require('../validation/role_validation.js');
|
|
7
|
+
const signalling = require('../utility/signalling.js');
|
|
8
|
+
const util = require('util');
|
|
9
|
+
const terms = require('../utility/hdbTerms.ts');
|
|
10
|
+
const hdbUtils = require('../utility/common_utils.js');
|
|
11
|
+
const { databases } = require('../resources/databases.ts');
|
|
12
|
+
const pSearchSearchByValue = search.searchByValue;
|
|
13
|
+
const pSearchSearchByHash = search.searchByHash;
|
|
14
|
+
const pDeleteDelete = util.promisify(delete_.delete);
|
|
15
|
+
const SearchObject = require('../dataLayer/SearchObject.js');
|
|
16
|
+
const SearchByHashObject = require('../dataLayer/SearchByHashObject.js');
|
|
17
|
+
const { hdbErrors, handleHDBError } = require('../utility/errors/hdbError.js');
|
|
18
|
+
const { HDB_ERROR_MSGS, HTTP_STATUS_CODES } = hdbErrors;
|
|
19
|
+
const { UserEventMsg } = require('../server/threads/itc.js');
|
|
20
|
+
|
|
21
|
+
module.exports = {
|
|
22
|
+
addRole,
|
|
23
|
+
alterRole,
|
|
24
|
+
dropRole,
|
|
25
|
+
listRoles,
|
|
26
|
+
getRoleByName,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function scrubRoleDetails(role) {
|
|
30
|
+
try {
|
|
31
|
+
if (role.hdb_auth_header) {
|
|
32
|
+
delete role.hdb_auth_header;
|
|
33
|
+
}
|
|
34
|
+
if (role.HDB_INTERNAL_PATH) {
|
|
35
|
+
delete role.HDB_INTERNAL_PATH;
|
|
36
|
+
}
|
|
37
|
+
if (role.operation) {
|
|
38
|
+
delete role.operation;
|
|
39
|
+
}
|
|
40
|
+
if (role.hdb_user) {
|
|
41
|
+
delete role.hdb_user;
|
|
42
|
+
}
|
|
43
|
+
} catch {
|
|
44
|
+
//no-op, failure is ok
|
|
45
|
+
}
|
|
46
|
+
return role;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
async function addRole(role) {
|
|
50
|
+
let validationResp = validation.addRoleValidation(role);
|
|
51
|
+
if (validationResp) {
|
|
52
|
+
throw validationResp;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
role = scrubRoleDetails(role);
|
|
56
|
+
|
|
57
|
+
let searchObj = {
|
|
58
|
+
schema: 'system',
|
|
59
|
+
table: 'hdb_role',
|
|
60
|
+
attribute: 'role',
|
|
61
|
+
value: role.role,
|
|
62
|
+
hash_attribute: 'id',
|
|
63
|
+
get_attributes: ['*'],
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
let searchRole;
|
|
67
|
+
try {
|
|
68
|
+
// here, and for other interactions, need convert to real array
|
|
69
|
+
searchRole = Array.from((await pSearchSearchByValue(searchObj)) || []);
|
|
70
|
+
} catch (err) {
|
|
71
|
+
throw handleHDBError(err);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (searchRole && searchRole.length > 0) {
|
|
75
|
+
throw handleHDBError(
|
|
76
|
+
new Error(),
|
|
77
|
+
HDB_ERROR_MSGS.ROLE_ALREADY_EXISTS(role.role),
|
|
78
|
+
HTTP_STATUS_CODES.CONFLICT,
|
|
79
|
+
undefined,
|
|
80
|
+
undefined,
|
|
81
|
+
true
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (!role.id) role.id = role.role;
|
|
86
|
+
|
|
87
|
+
let insertObject = {
|
|
88
|
+
operation: 'insert',
|
|
89
|
+
schema: 'system',
|
|
90
|
+
table: 'hdb_role',
|
|
91
|
+
hash_attribute: 'id',
|
|
92
|
+
records: [role],
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
await insert.insert(insertObject);
|
|
96
|
+
|
|
97
|
+
signalling.signalUserChange(new UserEventMsg(process.pid));
|
|
98
|
+
|
|
99
|
+
role = scrubRoleDetails(role);
|
|
100
|
+
return role;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async function alterRole(role) {
|
|
104
|
+
let validationResp = validation.alterRoleValidation(role);
|
|
105
|
+
if (validationResp) {
|
|
106
|
+
throw validationResp;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
role = scrubRoleDetails(role);
|
|
110
|
+
|
|
111
|
+
let updateObject = {
|
|
112
|
+
operation: 'update',
|
|
113
|
+
schema: 'system',
|
|
114
|
+
table: 'hdb_role',
|
|
115
|
+
records: [role],
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
let updateResponse;
|
|
119
|
+
try {
|
|
120
|
+
updateResponse = await insert.update(updateObject);
|
|
121
|
+
} catch (err) {
|
|
122
|
+
throw handleHDBError(err);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
if (updateResponse && updateResponse?.message === 'updated 0 of 1 records') {
|
|
126
|
+
throw handleHDBError(new Error(), 'Invalid role id', HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
await signalling.signalUserChange(new UserEventMsg(process.pid));
|
|
130
|
+
return role;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function dropRole(role) {
|
|
134
|
+
let validationResp = validation.dropRoleValidation(role);
|
|
135
|
+
if (validationResp) {
|
|
136
|
+
throw handleHDBError(new Error(), validationResp, HTTP_STATUS_CODES.BAD_REQUEST, undefined, undefined, true);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
let roleIdSearch = new SearchByHashObject(
|
|
140
|
+
terms.SYSTEM_SCHEMA_NAME,
|
|
141
|
+
terms.SYSTEM_TABLE_NAMES.ROLE_TABLE_NAME,
|
|
142
|
+
[role.id],
|
|
143
|
+
['role']
|
|
144
|
+
);
|
|
145
|
+
let roleName = Array.from(await pSearchSearchByHash(roleIdSearch));
|
|
146
|
+
|
|
147
|
+
if (roleName.length === 0) {
|
|
148
|
+
throw handleHDBError(
|
|
149
|
+
new Error(),
|
|
150
|
+
HDB_ERROR_MSGS.ROLE_NOT_FOUND,
|
|
151
|
+
HTTP_STATUS_CODES.NOT_FOUND,
|
|
152
|
+
undefined,
|
|
153
|
+
undefined,
|
|
154
|
+
true
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
let searchUserByRoleid = new SearchObject(
|
|
159
|
+
terms.SYSTEM_SCHEMA_NAME,
|
|
160
|
+
terms.SYSTEM_TABLE_NAMES.USER_TABLE_NAME,
|
|
161
|
+
'role',
|
|
162
|
+
role.id,
|
|
163
|
+
undefined,
|
|
164
|
+
['username', 'active']
|
|
165
|
+
);
|
|
166
|
+
let foundUsers = Array.from(await pSearchSearchByValue(searchUserByRoleid));
|
|
167
|
+
let activeUsers = false;
|
|
168
|
+
if (hdbUtils.isEmptyOrZeroLength(foundUsers) === false) {
|
|
169
|
+
for (let k = 0; k < foundUsers.length; k++) {
|
|
170
|
+
if (foundUsers[k].active === true) {
|
|
171
|
+
activeUsers = true;
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
if (activeUsers === true) {
|
|
178
|
+
throw handleHDBError(
|
|
179
|
+
new Error(),
|
|
180
|
+
`Cannot drop role ${roleName[0].role} as it has active user(s) tied to this role`,
|
|
181
|
+
HTTP_STATUS_CODES.CONFLICT,
|
|
182
|
+
undefined,
|
|
183
|
+
undefined,
|
|
184
|
+
true
|
|
185
|
+
);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
let deleteObject = {
|
|
189
|
+
table: 'hdb_role',
|
|
190
|
+
schema: 'system',
|
|
191
|
+
hash_values: [role.id],
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
await pDeleteDelete(deleteObject);
|
|
195
|
+
|
|
196
|
+
signalling.signalUserChange(new UserEventMsg(process.pid));
|
|
197
|
+
return `${roleName[0].role} successfully deleted`;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async function getRoleByName(roleName) {
|
|
201
|
+
for await (const role of databases.system.hdb_role.search([{ attribute: 'role', value: roleName }])) {
|
|
202
|
+
return role;
|
|
203
|
+
}
|
|
204
|
+
return null;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
async function listRoles() {
|
|
208
|
+
let searchObj = {
|
|
209
|
+
table: 'hdb_role',
|
|
210
|
+
schema: 'system',
|
|
211
|
+
hash_attribute: 'id',
|
|
212
|
+
attribute: 'id',
|
|
213
|
+
value: '*',
|
|
214
|
+
get_attributes: ['*'],
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
return pSearchSearchByValue(searchObj);
|
|
218
|
+
}
|