kuzzle 2.19.2 → 2.19.3
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/lib/api/controllers/adminController.js +94 -80
- package/lib/api/controllers/authController.js +239 -212
- package/lib/api/controllers/baseController.js +89 -51
- package/lib/api/controllers/bulkController.js +62 -49
- package/lib/api/controllers/clusterController.js +6 -8
- package/lib/api/controllers/collectionController.js +140 -129
- package/lib/api/controllers/debugController.d.ts +2 -2
- package/lib/api/controllers/debugController.js +33 -31
- package/lib/api/controllers/documentController.js +365 -274
- package/lib/api/controllers/index.js +13 -13
- package/lib/api/controllers/indexController.js +46 -50
- package/lib/api/controllers/memoryStorageController.js +410 -360
- package/lib/api/controllers/realtimeController.js +37 -36
- package/lib/api/controllers/securityController.js +553 -412
- package/lib/api/controllers/serverController.js +111 -104
- package/lib/api/documentExtractor.js +75 -68
- package/lib/api/funnel.js +411 -312
- package/lib/api/httpRoutes.js +1493 -324
- package/lib/api/openapi/OpenApiManager.d.ts +1 -1
- package/lib/api/openapi/OpenApiManager.js +22 -22
- package/lib/api/openapi/components/document/count.yaml +1 -1
- package/lib/api/openapi/components/document/create.yaml +2 -2
- package/lib/api/openapi/components/document/delete.yaml +1 -1
- package/lib/api/openapi/components/document/deleteByQuery.yaml +1 -1
- package/lib/api/openapi/components/document/exists.yaml +1 -1
- package/lib/api/openapi/components/document/get.yaml +2 -2
- package/lib/api/openapi/components/document/index.js +12 -12
- package/lib/api/openapi/components/document/replace.yaml +1 -1
- package/lib/api/openapi/components/document/scroll.yaml +1 -1
- package/lib/api/openapi/components/document/validate.yaml +1 -1
- package/lib/api/openapi/components/index.d.ts +2 -2
- package/lib/api/openapi/components/index.js +1 -1
- package/lib/api/openapi/components/security/index.js +1 -1
- package/lib/api/openapi/components/security/upsertUser.yaml +2 -3
- package/lib/api/openapi/index.d.ts +1 -1
- package/lib/api/openapi/openApiGenerator.d.ts +1 -1
- package/lib/api/openapi/openApiGenerator.js +7 -7
- package/lib/api/rateLimiter.js +12 -13
- package/lib/api/request/index.d.ts +4 -4
- package/lib/api/request/kuzzleRequest.d.ts +9 -9
- package/lib/api/request/kuzzleRequest.js +89 -87
- package/lib/api/request/requestContext.d.ts +2 -2
- package/lib/api/request/requestContext.js +17 -17
- package/lib/api/request/requestInput.d.ts +1 -1
- package/lib/api/request/requestInput.js +19 -19
- package/lib/api/request/requestResponse.d.ts +4 -4
- package/lib/api/request/requestResponse.js +31 -33
- package/lib/cluster/command.js +48 -44
- package/lib/cluster/idCardHandler.d.ts +1 -1
- package/lib/cluster/idCardHandler.js +15 -15
- package/lib/cluster/index.js +2 -2
- package/lib/cluster/node.js +301 -269
- package/lib/cluster/publisher.js +45 -46
- package/lib/cluster/state.d.ts +5 -5
- package/lib/cluster/state.js +8 -8
- package/lib/cluster/subscriber.js +163 -113
- package/lib/cluster/workers/IDCardRenewer.js +33 -32
- package/lib/config/default.config.d.ts +1 -1
- package/lib/config/default.config.js +212 -171
- package/lib/config/documentEventAliases.js +6 -6
- package/lib/config/index.js +161 -98
- package/lib/config/sdkCompatibility.json +8 -8
- package/lib/core/auth/formatProcessing.js +7 -7
- package/lib/core/auth/passportResponse.js +7 -7
- package/lib/core/auth/passportWrapper.js +34 -30
- package/lib/core/auth/tokenManager.d.ts +2 -2
- package/lib/core/auth/tokenManager.js +11 -10
- package/lib/core/backend/applicationManager.d.ts +1 -1
- package/lib/core/backend/applicationManager.js +2 -2
- package/lib/core/backend/backend.d.ts +3 -3
- package/lib/core/backend/backend.js +34 -31
- package/lib/core/backend/backendCluster.d.ts +2 -2
- package/lib/core/backend/backendCluster.js +5 -5
- package/lib/core/backend/backendConfig.d.ts +2 -2
- package/lib/core/backend/backendConfig.js +3 -3
- package/lib/core/backend/backendController.d.ts +2 -2
- package/lib/core/backend/backendController.js +9 -10
- package/lib/core/backend/backendErrors.d.ts +3 -3
- package/lib/core/backend/backendErrors.js +2 -1
- package/lib/core/backend/backendHook.d.ts +2 -2
- package/lib/core/backend/backendHook.js +5 -5
- package/lib/core/backend/backendImport.d.ts +3 -3
- package/lib/core/backend/backendImport.js +23 -23
- package/lib/core/backend/backendOpenApi.d.ts +2 -2
- package/lib/core/backend/backendOpenApi.js +16 -16
- package/lib/core/backend/backendPipe.d.ts +2 -2
- package/lib/core/backend/backendPipe.js +6 -6
- package/lib/core/backend/backendPlugin.d.ts +4 -4
- package/lib/core/backend/backendPlugin.js +14 -14
- package/lib/core/backend/backendStorage.d.ts +2 -2
- package/lib/core/backend/backendStorage.js +1 -2
- package/lib/core/backend/backendVault.d.ts +2 -2
- package/lib/core/backend/backendVault.js +3 -3
- package/lib/core/backend/index.d.ts +14 -14
- package/lib/core/backend/internalLogger.d.ts +1 -1
- package/lib/core/backend/internalLogger.js +5 -5
- package/lib/core/cache/cacheDbEnum.js +4 -4
- package/lib/core/cache/cacheEngine.js +79 -85
- package/lib/core/network/accessLogger.js +126 -120
- package/lib/core/network/clientConnection.js +5 -5
- package/lib/core/network/context.js +8 -8
- package/lib/core/network/entryPoint.js +100 -85
- package/lib/core/network/httpRouter/index.js +63 -60
- package/lib/core/network/httpRouter/routeHandler.js +18 -19
- package/lib/core/network/httpRouter/routePart.js +23 -19
- package/lib/core/network/protocolManifest.js +3 -3
- package/lib/core/network/protocols/httpMessage.js +8 -10
- package/lib/core/network/protocols/httpwsProtocol.js +305 -250
- package/lib/core/network/protocols/internalProtocol.js +27 -24
- package/lib/core/network/protocols/mqttProtocol.js +106 -96
- package/lib/core/network/protocols/protocol.js +20 -17
- package/lib/core/network/router.js +56 -46
- package/lib/core/plugin/plugin.js +151 -120
- package/lib/core/plugin/pluginContext.d.ts +7 -7
- package/lib/core/plugin/pluginContext.js +48 -44
- package/lib/core/plugin/pluginManifest.js +13 -12
- package/lib/core/plugin/pluginRepository.js +26 -27
- package/lib/core/plugin/pluginsManager.js +425 -304
- package/lib/core/plugin/privilegedContext.js +3 -3
- package/lib/core/realtime/actionEnum.js +1 -1
- package/lib/core/realtime/channel.d.ts +1 -1
- package/lib/core/realtime/channel.js +22 -22
- package/lib/core/realtime/connectionRooms.d.ts +1 -1
- package/lib/core/realtime/hotelClerk.d.ts +2 -2
- package/lib/core/realtime/hotelClerk.js +53 -50
- package/lib/core/realtime/index.js +5 -5
- package/lib/core/realtime/notification/document.js +25 -25
- package/lib/core/realtime/notification/index.js +4 -4
- package/lib/core/realtime/notification/server.js +3 -3
- package/lib/core/realtime/notification/user.js +4 -4
- package/lib/core/realtime/notifier.js +113 -75
- package/lib/core/realtime/room.d.ts +1 -1
- package/lib/core/realtime/subscription.d.ts +1 -1
- package/lib/core/realtime/subscription.js +1 -1
- package/lib/core/security/index.js +8 -8
- package/lib/core/security/profileRepository.d.ts +6 -6
- package/lib/core/security/profileRepository.js +48 -45
- package/lib/core/security/roleRepository.js +127 -115
- package/lib/core/security/securityLoader.js +70 -63
- package/lib/core/security/tokenRepository.js +132 -118
- package/lib/core/security/userRepository.js +104 -88
- package/lib/core/shared/KoncordeWrapper.d.ts +1 -1
- package/lib/core/shared/KoncordeWrapper.js +3 -1
- package/lib/core/shared/abstractManifest.js +22 -23
- package/lib/core/shared/repository.js +69 -67
- package/lib/core/shared/sdk/embeddedSdk.d.ts +2 -2
- package/lib/core/shared/sdk/embeddedSdk.js +36 -32
- package/lib/core/shared/sdk/funnelProtocol.d.ts +1 -1
- package/lib/core/shared/sdk/funnelProtocol.js +11 -11
- package/lib/core/shared/sdk/impersonatedSdk.js +19 -18
- package/lib/core/shared/store.js +127 -32
- package/lib/core/statistics/index.js +2 -2
- package/lib/core/statistics/statistics.js +99 -85
- package/lib/core/storage/clientAdapter.js +219 -136
- package/lib/core/storage/indexCache.js +3 -3
- package/lib/core/storage/storageEngine.js +10 -13
- package/lib/core/storage/storeScopeEnum.js +3 -3
- package/lib/core/validation/baseType.js +12 -10
- package/lib/core/validation/index.js +2 -2
- package/lib/core/validation/types/anything.js +4 -4
- package/lib/core/validation/types/boolean.js +7 -7
- package/lib/core/validation/types/date.js +165 -131
- package/lib/core/validation/types/email.js +18 -21
- package/lib/core/validation/types/enum.js +34 -21
- package/lib/core/validation/types/geoPoint.js +7 -7
- package/lib/core/validation/types/geoShape.js +148 -125
- package/lib/core/validation/types/integer.js +9 -9
- package/lib/core/validation/types/ipAddress.js +17 -19
- package/lib/core/validation/types/numeric.js +36 -29
- package/lib/core/validation/types/object.js +19 -19
- package/lib/core/validation/types/string.js +36 -29
- package/lib/core/validation/types/url.js +17 -19
- package/lib/core/validation/validation.js +422 -378
- package/lib/kerror/codes/1-services.json +7 -1
- package/lib/kerror/codes/4-plugin.json +2 -2
- package/lib/kerror/codes/index.js +85 -63
- package/lib/kerror/errors/badRequestError.d.ts +1 -1
- package/lib/kerror/errors/externalServiceError.d.ts +1 -1
- package/lib/kerror/errors/forbiddenError.d.ts +1 -1
- package/lib/kerror/errors/gatewayTimeoutError.d.ts +1 -1
- package/lib/kerror/errors/index.d.ts +15 -15
- package/lib/kerror/errors/internalError.d.ts +1 -1
- package/lib/kerror/errors/kuzzleError.d.ts +1 -1
- package/lib/kerror/errors/multipleErrorsError.d.ts +1 -1
- package/lib/kerror/errors/multipleErrorsError.js +1 -1
- package/lib/kerror/errors/notFoundError.d.ts +1 -1
- package/lib/kerror/errors/partialError.d.ts +1 -1
- package/lib/kerror/errors/partialError.js +1 -1
- package/lib/kerror/errors/pluginImplementationError.d.ts +1 -1
- package/lib/kerror/errors/pluginImplementationError.js +2 -1
- package/lib/kerror/errors/preconditionError.d.ts +1 -1
- package/lib/kerror/errors/serviceUnavailableError.d.ts +1 -1
- package/lib/kerror/errors/sizeLimitError.d.ts +1 -1
- package/lib/kerror/errors/tooManyRequestsError.d.ts +1 -1
- package/lib/kerror/errors/unauthorizedError.d.ts +1 -1
- package/lib/kerror/index.d.ts +3 -3
- package/lib/kerror/index.js +17 -16
- package/lib/kuzzle/dumpGenerator.js +130 -114
- package/lib/kuzzle/event/kuzzleEventEmitter.js +96 -70
- package/lib/kuzzle/event/pipeRunner.js +25 -24
- package/lib/kuzzle/event/waterfall.js +13 -15
- package/lib/kuzzle/index.js +2 -2
- package/lib/kuzzle/internalIndexHandler.js +80 -59
- package/lib/kuzzle/kuzzle.js +99 -99
- package/lib/kuzzle/kuzzleStateEnum.js +1 -1
- package/lib/kuzzle/log.js +23 -18
- package/lib/kuzzle/vault.js +34 -19
- package/lib/model/security/profile.d.ts +3 -3
- package/lib/model/security/profile.js +38 -37
- package/lib/model/security/rights.js +5 -5
- package/lib/model/security/role.d.ts +3 -3
- package/lib/model/security/role.js +25 -26
- package/lib/model/security/token.d.ts +1 -1
- package/lib/model/security/token.js +4 -4
- package/lib/model/security/user.d.ts +2 -2
- package/lib/model/security/user.js +9 -9
- package/lib/model/storage/apiKey.js +43 -33
- package/lib/model/storage/baseModel.js +49 -45
- package/lib/service/cache/redis.js +60 -55
- package/lib/service/service.js +17 -17
- package/lib/service/storage/elasticsearch.js +839 -755
- package/lib/service/storage/esWrapper.js +103 -86
- package/lib/service/storage/queryTranslator.js +52 -59
- package/lib/types/Controller.d.ts +3 -3
- package/lib/types/ControllerDefinition.d.ts +3 -3
- package/lib/types/DebugModule.d.ts +2 -2
- package/lib/types/DebugModule.js +1 -1
- package/lib/types/Global.d.ts +1 -1
- package/lib/types/HttpStream.d.ts +2 -1
- package/lib/types/HttpStream.js +7 -5
- package/lib/types/Kuzzle.d.ts +1 -1
- package/lib/types/KuzzleDocument.d.ts +1 -1
- package/lib/types/OpenApiDefinition.d.ts +1 -1
- package/lib/types/PasswordPolicy.d.ts +1 -1
- package/lib/types/Plugin.d.ts +6 -6
- package/lib/types/Plugin.js +2 -2
- package/lib/types/Policy.d.ts +1 -1
- package/lib/types/RequestPayload.d.ts +1 -1
- package/lib/types/ResponsePayload.d.ts +1 -1
- package/lib/types/Token.d.ts +1 -1
- package/lib/types/User.d.ts +1 -1
- package/lib/types/config/DumpConfiguration.d.ts +8 -8
- package/lib/types/config/HttpConfiguration.d.ts +1 -1
- package/lib/types/config/KuzzleConfiguration.d.ts +1 -1
- package/lib/types/config/LimitsConfiguration.d.ts +8 -8
- package/lib/types/config/PluginsConfiguration.d.ts +4 -4
- package/lib/types/config/SecurityConfiguration.d.ts +62 -62
- package/lib/types/config/ServerConfiguration.d.ts +55 -55
- package/lib/types/config/ServicesConfiguration.d.ts +2 -2
- package/lib/types/config/internalCache/InternalCacheRedisConfiguration.d.ts +10 -10
- package/lib/types/config/publicCache/PublicCacheRedisConfiguration.d.ts +3 -3
- package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.d.ts +194 -110
- package/lib/types/errors/ErrorDefinition.d.ts +1 -1
- package/lib/types/errors/ErrorDomains.d.ts +1 -1
- package/lib/types/index.d.ts +38 -38
- package/lib/types/realtime/RealtimeScope.d.ts +1 -1
- package/lib/types/realtime/RealtimeUsers.d.ts +1 -1
- package/lib/util/assertType.js +13 -11
- package/lib/util/async.d.ts +1 -0
- package/lib/util/async.js +61 -0
- package/lib/util/asyncStore.js +19 -21
- package/lib/util/bufferedPassThrough.d.ts +2 -2
- package/lib/util/bufferedPassThrough.js +4 -4
- package/lib/util/bytes.js +9 -13
- package/lib/util/crypto.js +1 -1
- package/lib/util/debug.js +5 -5
- package/lib/util/deprecate.js +24 -21
- package/lib/util/didYouMean.js +7 -7
- package/lib/util/dump-collection.d.ts +2 -2
- package/lib/util/dump-collection.js +26 -26
- package/lib/util/esRequest.d.ts +1 -0
- package/lib/util/esRequest.js +62 -0
- package/lib/util/extractFields.js +24 -25
- package/lib/util/inflector.js +5 -5
- package/lib/util/koncordeCompat.d.ts +2 -2
- package/lib/util/koncordeCompat.js +5 -5
- package/lib/util/memoize.js +3 -5
- package/lib/util/mutex.d.ts +19 -1
- package/lib/util/mutex.js +39 -12
- package/lib/util/name-generator.js +1331 -1331
- package/lib/util/promback.js +8 -10
- package/lib/util/readYamlFile.d.ts +1 -1
- package/lib/util/readYamlFile.js +1 -1
- package/lib/util/requestAssertions.js +34 -34
- package/lib/util/safeObject.js +5 -5
- package/lib/util/stackTrace.js +20 -22
- package/lib/util/wildcard.js +15 -15
- package/package.json +6 -6
- package/npm-shrinkwrap.json +0 -19422
|
@@ -61,7 +61,7 @@ const storeScopeEnum_1 = __importDefault(require("../storage/storeScopeEnum"));
|
|
|
61
61
|
const errors_1 = require("../../kerror/errors");
|
|
62
62
|
const index_1 = require("../../../index");
|
|
63
63
|
const backend_1 = require("../backend");
|
|
64
|
-
const contextError = kerror.wrap(
|
|
64
|
+
const contextError = kerror.wrap("plugin", "context");
|
|
65
65
|
class PluginContext {
|
|
66
66
|
constructor(pluginName) {
|
|
67
67
|
this.config = JSON.parse(JSON.stringify(global.kuzzle.config));
|
|
@@ -83,7 +83,7 @@ class PluginContext {
|
|
|
83
83
|
TooManyRequestsError: errors_1.TooManyRequestsError,
|
|
84
84
|
UnauthorizedError: errors_1.UnauthorizedError,
|
|
85
85
|
};
|
|
86
|
-
this.kerror = kerror.wrap(
|
|
86
|
+
this.kerror = kerror.wrap("plugin", pluginName);
|
|
87
87
|
// @deprecated - backward compatibility only
|
|
88
88
|
this.errorsManager = this.kerror;
|
|
89
89
|
/* context.secrets ====================================================== */
|
|
@@ -96,7 +96,7 @@ class PluginContext {
|
|
|
96
96
|
// eslint-disable-next-line no-inner-declarations
|
|
97
97
|
function PluginContextRepository(collection, ObjectConstructor = null) {
|
|
98
98
|
if (!collection) {
|
|
99
|
-
throw contextError.get(
|
|
99
|
+
throw contextError.get("missing_collection");
|
|
100
100
|
}
|
|
101
101
|
const pluginRepository = new pluginRepository_1.default(pluginStore, collection);
|
|
102
102
|
pluginRepository.init({ ObjectConstructor });
|
|
@@ -108,16 +108,15 @@ class PluginContext {
|
|
|
108
108
|
mGet: (...args) => pluginRepository.loadMultiFromDatabase(...args),
|
|
109
109
|
replace: (...args) => pluginRepository.replace(...args),
|
|
110
110
|
search: (...args) => pluginRepository.search(...args),
|
|
111
|
-
update: (...args) => pluginRepository.update(...args)
|
|
111
|
+
update: (...args) => pluginRepository.update(...args),
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
// eslint-disable-next-line no-inner-declarations
|
|
115
115
|
function PluginContextESClient() {
|
|
116
|
-
return elasticsearch_1.default
|
|
117
|
-
.buildClient(global.kuzzle.config.services.storageEngine.client);
|
|
116
|
+
return elasticsearch_1.default.buildClient(global.kuzzle.config.services.storageEngine.client);
|
|
118
117
|
}
|
|
119
118
|
this.constructors = {
|
|
120
|
-
BaseValidationType: require(
|
|
119
|
+
BaseValidationType: require("../validation/baseType"),
|
|
121
120
|
ESClient: PluginContextESClient,
|
|
122
121
|
Koncorde: KoncordeWrapper_1.Koncorde,
|
|
123
122
|
Mutex: mutex_1.Mutex,
|
|
@@ -129,12 +128,12 @@ class PluginContext {
|
|
|
129
128
|
Object.freeze(this.constructors);
|
|
130
129
|
/* context.log ======================================================== */
|
|
131
130
|
this.log = {
|
|
132
|
-
debug: msg => global.kuzzle.log.debug(`[${pluginName}] ${msg}`),
|
|
133
|
-
error: msg => global.kuzzle.log.error(`[${pluginName}] ${msg}`),
|
|
134
|
-
info: msg => global.kuzzle.log.info(`[${pluginName}] ${msg}`),
|
|
135
|
-
silly: msg => global.kuzzle.log.silly(`[${pluginName}] ${msg}`),
|
|
136
|
-
verbose: msg => global.kuzzle.log.verbose(`[${pluginName}] ${msg}`),
|
|
137
|
-
warn: msg => global.kuzzle.log.warn(`[${pluginName}] ${msg}`)
|
|
131
|
+
debug: (msg) => global.kuzzle.log.debug(`[${pluginName}] ${msg}`),
|
|
132
|
+
error: (msg) => global.kuzzle.log.error(`[${pluginName}] ${msg}`),
|
|
133
|
+
info: (msg) => global.kuzzle.log.info(`[${pluginName}] ${msg}`),
|
|
134
|
+
silly: (msg) => global.kuzzle.log.silly(`[${pluginName}] ${msg}`),
|
|
135
|
+
verbose: (msg) => global.kuzzle.log.verbose(`[${pluginName}] ${msg}`),
|
|
136
|
+
warn: (msg) => global.kuzzle.log.warn(`[${pluginName}] ${msg}`),
|
|
138
137
|
};
|
|
139
138
|
Object.freeze(this.log);
|
|
140
139
|
/* context.accessors ================================================== */
|
|
@@ -144,32 +143,32 @@ class PluginContext {
|
|
|
144
143
|
nodeId: global.kuzzle.id,
|
|
145
144
|
sdk: new embeddedSdk_1.EmbeddedSDK(),
|
|
146
145
|
storage: {
|
|
147
|
-
bootstrap: collections => pluginStore.init(collections),
|
|
148
|
-
createCollection: (collection, mappings) =>
|
|
146
|
+
bootstrap: (collections) => pluginStore.init(collections),
|
|
147
|
+
createCollection: (collection, mappings) => pluginStore.createCollection(collection, { mappings }),
|
|
149
148
|
},
|
|
150
149
|
strategies: {
|
|
151
150
|
add: curryAddStrategy(pluginName),
|
|
152
|
-
remove: curryRemoveStrategy(pluginName)
|
|
151
|
+
remove: curryRemoveStrategy(pluginName),
|
|
153
152
|
},
|
|
154
153
|
subscription: {
|
|
155
154
|
register: (connectionId, index, collection, filters) => {
|
|
156
155
|
const request = new index_1.KuzzleRequest({
|
|
157
|
-
action:
|
|
156
|
+
action: "subscribe",
|
|
158
157
|
body: filters,
|
|
159
158
|
collection,
|
|
160
|
-
controller:
|
|
159
|
+
controller: "realtime",
|
|
161
160
|
index,
|
|
162
161
|
}, {
|
|
163
162
|
connectionId: connectionId,
|
|
164
163
|
});
|
|
165
|
-
return global.kuzzle.ask(
|
|
164
|
+
return global.kuzzle.ask("core:realtime:subscribe", request);
|
|
166
165
|
},
|
|
167
|
-
unregister: (connectionId, roomId, notify) => global.kuzzle.ask(
|
|
166
|
+
unregister: (connectionId, roomId, notify) => global.kuzzle.ask("core:realtime:unsubscribe", connectionId, roomId, notify),
|
|
168
167
|
},
|
|
169
|
-
trigger: (eventName, payload) =>
|
|
168
|
+
trigger: (eventName, payload) => global.kuzzle.pipe(`plugin-${pluginName}:${eventName}`, payload),
|
|
170
169
|
validation: {
|
|
171
170
|
addType: global.kuzzle.validation.addType.bind(global.kuzzle.validation),
|
|
172
|
-
validate: global.kuzzle.validation.validate.bind(global.kuzzle.validation)
|
|
171
|
+
validate: global.kuzzle.validation.validate.bind(global.kuzzle.validation),
|
|
173
172
|
},
|
|
174
173
|
};
|
|
175
174
|
// @todo freeze the "accessors" object once we don't have
|
|
@@ -178,33 +177,35 @@ class PluginContext {
|
|
|
178
177
|
}
|
|
179
178
|
exports.PluginContext = PluginContext;
|
|
180
179
|
/**
|
|
181
|
-
|
|
180
|
+
* @param {KuzzleRequest} request
|
|
182
181
|
* @param {Function} [callback]
|
|
183
182
|
*/
|
|
184
183
|
function execute(request, callback) {
|
|
185
|
-
if (callback && typeof callback !==
|
|
186
|
-
const error = contextError.get(
|
|
184
|
+
if (callback && typeof callback !== "function") {
|
|
185
|
+
const error = contextError.get("invalid_callback", typeof callback);
|
|
187
186
|
global.kuzzle.log.error(error);
|
|
188
187
|
return bluebird_1.default.reject(error);
|
|
189
188
|
}
|
|
190
189
|
const promback = new promback_1.default(callback);
|
|
191
|
-
if (!request ||
|
|
192
|
-
|
|
190
|
+
if (!request ||
|
|
191
|
+
(!(request instanceof index_1.KuzzleRequest) && !(request instanceof index_1.Request))) {
|
|
192
|
+
return promback.reject(contextError.get("missing_request"));
|
|
193
193
|
}
|
|
194
|
-
if (request.input.controller ===
|
|
195
|
-
|
|
196
|
-
return promback.reject(contextError.get(
|
|
194
|
+
if (request.input.controller === "realtime" &&
|
|
195
|
+
["subscribe", "unsubscribe"].includes(request.input.action)) {
|
|
196
|
+
return promback.reject(contextError.get("unavailable_realtime", request.input.action));
|
|
197
197
|
}
|
|
198
198
|
request.clearError();
|
|
199
199
|
request.status = 102;
|
|
200
|
-
global.kuzzle.funnel
|
|
201
|
-
.
|
|
200
|
+
global.kuzzle.funnel
|
|
201
|
+
.executePluginRequest(request)
|
|
202
|
+
.then((result) => {
|
|
202
203
|
request.setResult(result, {
|
|
203
|
-
status: request.status === 102 ? 200 : request.status
|
|
204
|
+
status: request.status === 102 ? 200 : request.status,
|
|
204
205
|
});
|
|
205
206
|
promback.resolve(request);
|
|
206
207
|
})
|
|
207
|
-
.catch(err => {
|
|
208
|
+
.catch((err) => {
|
|
208
209
|
promback.reject(err);
|
|
209
210
|
});
|
|
210
211
|
return promback.deferred;
|
|
@@ -222,7 +223,7 @@ function execute(request, callback) {
|
|
|
222
223
|
function instantiateRequest(request, data, options = {}) {
|
|
223
224
|
let _request = request, _data = data, _options = options;
|
|
224
225
|
if (!_request) {
|
|
225
|
-
throw contextError.get(
|
|
226
|
+
throw contextError.get("missing_request_data");
|
|
226
227
|
}
|
|
227
228
|
if (!(_request instanceof index_1.KuzzleRequest)) {
|
|
228
229
|
if (_data) {
|
|
@@ -237,7 +238,7 @@ function instantiateRequest(request, data, options = {}) {
|
|
|
237
238
|
const target = new index_1.KuzzleRequest(_data, _options);
|
|
238
239
|
// forward informations if a request object was supplied
|
|
239
240
|
if (_request) {
|
|
240
|
-
for (const resource of [
|
|
241
|
+
for (const resource of ["_id", "index", "collection"]) {
|
|
241
242
|
if (!target.input.resource[resource]) {
|
|
242
243
|
target.input.resource[resource] = _request.input.resource[resource];
|
|
243
244
|
}
|
|
@@ -274,17 +275,17 @@ function curryAddStrategy(pluginName) {
|
|
|
274
275
|
// be serialized and propagated to other cluster nodes
|
|
275
276
|
// so if a strategy is not defined using an authenticator, we have
|
|
276
277
|
// to reject the call
|
|
277
|
-
if (!(0, safeObject_1.isPlainObject)(strategy)
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
throw contextError.get(
|
|
278
|
+
if (!(0, safeObject_1.isPlainObject)(strategy) ||
|
|
279
|
+
!(0, safeObject_1.isPlainObject)(strategy.config) ||
|
|
280
|
+
typeof strategy.config.authenticator !== "string") {
|
|
281
|
+
throw contextError.get("missing_authenticator", pluginName, name);
|
|
281
282
|
}
|
|
282
|
-
const mutex = new mutex_1.Mutex(
|
|
283
|
+
const mutex = new mutex_1.Mutex("auth:strategies:add", { ttl: 30000 });
|
|
283
284
|
await mutex.lock();
|
|
284
285
|
try {
|
|
285
286
|
// @todo use Plugin.checkName to ensure format
|
|
286
287
|
global.kuzzle.pluginsManager.registerStrategy(pluginName, name, strategy);
|
|
287
|
-
return await global.kuzzle.pipe(
|
|
288
|
+
return await global.kuzzle.pipe("core:auth:strategyAdded", {
|
|
288
289
|
name,
|
|
289
290
|
pluginName,
|
|
290
291
|
strategy,
|
|
@@ -307,11 +308,14 @@ function curryRemoveStrategy(pluginName) {
|
|
|
307
308
|
// either async or catch unregisterStrategy exceptions + return a rejected
|
|
308
309
|
// promise
|
|
309
310
|
return async function removeStrategy(name) {
|
|
310
|
-
const mutex = new mutex_1.Mutex(
|
|
311
|
+
const mutex = new mutex_1.Mutex("auth:strategies:remove", { ttl: 30000 });
|
|
311
312
|
await mutex.lock();
|
|
312
313
|
try {
|
|
313
314
|
global.kuzzle.pluginsManager.unregisterStrategy(pluginName, name);
|
|
314
|
-
return await global.kuzzle.pipe(
|
|
315
|
+
return await global.kuzzle.pipe("core:auth:strategyRemoved", {
|
|
316
|
+
name,
|
|
317
|
+
pluginName,
|
|
318
|
+
});
|
|
315
319
|
}
|
|
316
320
|
finally {
|
|
317
321
|
await mutex.unlock();
|
|
@@ -19,33 +19,34 @@
|
|
|
19
19
|
* limitations under the License.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
"use strict";
|
|
23
23
|
|
|
24
|
-
const _ = require(
|
|
24
|
+
const _ = require("lodash");
|
|
25
25
|
|
|
26
|
-
const kerror = require(
|
|
27
|
-
const AbstractManifest = require(
|
|
26
|
+
const kerror = require("../../kerror").wrap("plugin", "manifest");
|
|
27
|
+
const AbstractManifest = require("../shared/abstractManifest");
|
|
28
28
|
|
|
29
29
|
class PluginManifest extends AbstractManifest {
|
|
30
|
-
constructor
|
|
30
|
+
constructor(pluginPath) {
|
|
31
31
|
super(pluginPath);
|
|
32
32
|
this.privileged = false;
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
load
|
|
35
|
+
load() {
|
|
36
36
|
super.load();
|
|
37
37
|
|
|
38
38
|
// Ensure ES will accept the plugin name as index
|
|
39
|
-
if (
|
|
40
|
-
throw kerror.get(
|
|
39
|
+
if (!/^[\w-]+$/.test(this.name)) {
|
|
40
|
+
throw kerror.get("invalid_name", this.path);
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
if (!
|
|
44
|
-
if (typeof this.raw.privileged !==
|
|
43
|
+
if (!_.isNil(this.raw) && !_.isNil(this.raw.privileged)) {
|
|
44
|
+
if (typeof this.raw.privileged !== "boolean") {
|
|
45
45
|
throw kerror.get(
|
|
46
|
-
|
|
46
|
+
"invalid_privileged",
|
|
47
47
|
this.path,
|
|
48
|
-
typeof this.raw.privileged
|
|
48
|
+
typeof this.raw.privileged
|
|
49
|
+
);
|
|
49
50
|
}
|
|
50
51
|
this.privileged = this.raw.privileged;
|
|
51
52
|
}
|
|
@@ -19,24 +19,24 @@
|
|
|
19
19
|
* limitations under the License.
|
|
20
20
|
*/
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
"use strict";
|
|
23
23
|
|
|
24
|
-
const { merge } = require(
|
|
24
|
+
const { merge } = require("lodash");
|
|
25
25
|
|
|
26
|
-
const { NotFoundError } = require(
|
|
27
|
-
const Repository = require(
|
|
28
|
-
const cacheDbEnum = require(
|
|
26
|
+
const { NotFoundError } = require("../../kerror/errors");
|
|
27
|
+
const Repository = require("../shared/repository");
|
|
28
|
+
const cacheDbEnum = require("../cache/cacheDbEnum");
|
|
29
29
|
|
|
30
30
|
class PluginRepository extends Repository {
|
|
31
|
-
constructor
|
|
31
|
+
constructor(store, collection) {
|
|
32
32
|
super({ cache: cacheDbEnum.NONE, store });
|
|
33
33
|
|
|
34
34
|
this.collection = collection;
|
|
35
35
|
this.ObjectConstructor = Object;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
init
|
|
39
|
-
if (options && typeof options ===
|
|
38
|
+
init(options) {
|
|
39
|
+
if (options && typeof options === "object" && !Array.isArray(options)) {
|
|
40
40
|
if (options.ObjectConstructor) {
|
|
41
41
|
this.ObjectConstructor = options.ObjectConstructor;
|
|
42
42
|
}
|
|
@@ -49,7 +49,7 @@ class PluginRepository extends Repository {
|
|
|
49
49
|
* @param {object} data - The object to serialize
|
|
50
50
|
* @returns {object}
|
|
51
51
|
*/
|
|
52
|
-
serializeToDatabase
|
|
52
|
+
serializeToDatabase(data) {
|
|
53
53
|
// avoid the data var mutation
|
|
54
54
|
const result = merge({}, data);
|
|
55
55
|
|
|
@@ -63,8 +63,8 @@ class PluginRepository extends Repository {
|
|
|
63
63
|
* @param {object} [options]
|
|
64
64
|
* @returns {Promise}
|
|
65
65
|
*/
|
|
66
|
-
create
|
|
67
|
-
const opts = Object.assign({ method:
|
|
66
|
+
create(object, options = {}) {
|
|
67
|
+
const opts = Object.assign({ method: "create" }, options);
|
|
68
68
|
|
|
69
69
|
return this.persistToDatabase(object, opts);
|
|
70
70
|
}
|
|
@@ -74,8 +74,8 @@ class PluginRepository extends Repository {
|
|
|
74
74
|
* @param {object} [options]
|
|
75
75
|
* @returns {Promise}
|
|
76
76
|
*/
|
|
77
|
-
createOrReplace
|
|
78
|
-
const opts = Object.assign({ method:
|
|
77
|
+
createOrReplace(object, options = {}) {
|
|
78
|
+
const opts = Object.assign({ method: "createOrReplace" }, options);
|
|
79
79
|
|
|
80
80
|
return this.persistToDatabase(object, opts);
|
|
81
81
|
}
|
|
@@ -85,8 +85,8 @@ class PluginRepository extends Repository {
|
|
|
85
85
|
* @param {object} [options]
|
|
86
86
|
* @returns {Promise}
|
|
87
87
|
*/
|
|
88
|
-
replace
|
|
89
|
-
const opts = Object.assign({ method:
|
|
88
|
+
replace(object, options = {}) {
|
|
89
|
+
const opts = Object.assign({ method: "replace" }, options);
|
|
90
90
|
|
|
91
91
|
return this.persistToDatabase(object, opts);
|
|
92
92
|
}
|
|
@@ -96,8 +96,8 @@ class PluginRepository extends Repository {
|
|
|
96
96
|
* @param {object} [options]
|
|
97
97
|
* @returns {Promise}
|
|
98
98
|
*/
|
|
99
|
-
update
|
|
100
|
-
const opts = Object.assign({ method:
|
|
99
|
+
update(object, options = {}) {
|
|
100
|
+
const opts = Object.assign({ method: "update" }, options);
|
|
101
101
|
|
|
102
102
|
return this.persistToDatabase(object, opts);
|
|
103
103
|
}
|
|
@@ -109,15 +109,14 @@ class PluginRepository extends Repository {
|
|
|
109
109
|
* @param {string} documentId
|
|
110
110
|
* @returns {Promise}
|
|
111
111
|
*/
|
|
112
|
-
load
|
|
113
|
-
return super.load(documentId)
|
|
114
|
-
.
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
});
|
|
112
|
+
load(documentId) {
|
|
113
|
+
return super.load(documentId).catch((error) => {
|
|
114
|
+
if (this.collection === "users" && error instanceof NotFoundError) {
|
|
115
|
+
return Promise.resolve(null);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
throw error;
|
|
119
|
+
});
|
|
121
120
|
}
|
|
122
121
|
|
|
123
122
|
/**
|
|
@@ -125,7 +124,7 @@ class PluginRepository extends Repository {
|
|
|
125
124
|
* @param {object} [options]
|
|
126
125
|
* @returns {Promise}
|
|
127
126
|
*/
|
|
128
|
-
delete
|
|
127
|
+
delete(documentId, options = {}) {
|
|
129
128
|
return super.delete({ _id: documentId }, options);
|
|
130
129
|
}
|
|
131
130
|
}
|