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
|
@@ -68,7 +68,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
68
68
|
});
|
|
69
69
|
this.module = securityModule;
|
|
70
70
|
this.profiles = new Map();
|
|
71
|
-
super.collection =
|
|
71
|
+
super.collection = "profiles";
|
|
72
72
|
super.ObjectConstructor = profile_1.Profile;
|
|
73
73
|
}
|
|
74
74
|
init() {
|
|
@@ -80,7 +80,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
80
80
|
* @returns {Profile}
|
|
81
81
|
* @throws If already exists or if the policies are invalid
|
|
82
82
|
*/
|
|
83
|
-
global.kuzzle.onAsk(
|
|
83
|
+
global.kuzzle.onAsk("core:security:profile:create", (id, policies, opts) => this.create(id, policies, opts));
|
|
84
84
|
/**
|
|
85
85
|
* Creates a new profile, or replaces it if it already exists
|
|
86
86
|
* @param {String} id
|
|
@@ -89,7 +89,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
89
89
|
* @returns {Profile}
|
|
90
90
|
* @throws If the profile policies are invalid
|
|
91
91
|
*/
|
|
92
|
-
global.kuzzle.onAsk(
|
|
92
|
+
global.kuzzle.onAsk("core:security:profile:createOrReplace", (id, policies, opts) => this.createOrReplace(id, policies, opts));
|
|
93
93
|
/**
|
|
94
94
|
* Deletes an existing profile
|
|
95
95
|
* @param {String} id
|
|
@@ -97,35 +97,35 @@ class ProfileRepository extends repository_1.default {
|
|
|
97
97
|
* @throws If the profile doesn't exist, if it is protected, or if it's
|
|
98
98
|
* still in use
|
|
99
99
|
*/
|
|
100
|
-
global.kuzzle.onAsk(
|
|
100
|
+
global.kuzzle.onAsk("core:security:profile:delete", (id, opts) => this.deleteById(id, opts));
|
|
101
101
|
/**
|
|
102
102
|
* Loads and returns an existing profile
|
|
103
103
|
* @param {String} id - profile identifier
|
|
104
104
|
* @returns {Profile}
|
|
105
105
|
* @throws {NotFoundError} If the profile doesn't exist
|
|
106
106
|
*/
|
|
107
|
-
global.kuzzle.onAsk(
|
|
107
|
+
global.kuzzle.onAsk("core:security:profile:get", (id) => this.load(id));
|
|
108
108
|
/**
|
|
109
109
|
* Invalidates the RAM cache from the given profile ID. If none is provided,
|
|
110
110
|
* the entire cache is emptied.
|
|
111
111
|
*
|
|
112
112
|
* @param {String} [id] - profile identifier
|
|
113
113
|
*/
|
|
114
|
-
global.kuzzle.onAsk(
|
|
114
|
+
global.kuzzle.onAsk("core:security:profile:invalidate", (id) => this.invalidate(id));
|
|
115
115
|
/**
|
|
116
116
|
* Gets multiple profiles
|
|
117
117
|
* @param {Array} ids
|
|
118
118
|
* @returns {Array.<Profile>}
|
|
119
119
|
* @throws If one or more profiles don't exist
|
|
120
120
|
*/
|
|
121
|
-
global.kuzzle.onAsk(
|
|
121
|
+
global.kuzzle.onAsk("core:security:profile:mGet", (ids) => this.loadProfiles(ids));
|
|
122
122
|
/**
|
|
123
123
|
* Fetches the next page of search results
|
|
124
124
|
* @param {String} id - scroll identifier
|
|
125
125
|
* @param {String} [ttl] - refresh the scroll results TTL
|
|
126
126
|
* @returns {Object} Search results
|
|
127
127
|
*/
|
|
128
|
-
global.kuzzle.onAsk(
|
|
128
|
+
global.kuzzle.onAsk("core:security:profile:scroll", (id, ttl) => this.scroll(id, ttl));
|
|
129
129
|
/**
|
|
130
130
|
* Searches profiles
|
|
131
131
|
*
|
|
@@ -134,12 +134,12 @@ class ProfileRepository extends repository_1.default {
|
|
|
134
134
|
*
|
|
135
135
|
* @returns {Object} Search results
|
|
136
136
|
*/
|
|
137
|
-
global.kuzzle.onAsk(
|
|
137
|
+
global.kuzzle.onAsk("core:security:profile:search", (searchBody, opts) => this.search(searchBody, opts));
|
|
138
138
|
/**
|
|
139
139
|
* Removes all existing profiles and invalidates the RAM cache
|
|
140
140
|
* @param {Object} opts (refresh)
|
|
141
141
|
*/
|
|
142
|
-
global.kuzzle.onAsk(
|
|
142
|
+
global.kuzzle.onAsk("core:security:profile:truncate", (opts) => this.truncate(opts));
|
|
143
143
|
/**
|
|
144
144
|
* Updates an existing profile using a partial content
|
|
145
145
|
* @param {String} id - profile identifier to update
|
|
@@ -147,7 +147,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
147
147
|
* @param {Object} opts - refresh, retryOnConflict, userId (used for metadata)
|
|
148
148
|
* @returns {Profile} Updated profile
|
|
149
149
|
*/
|
|
150
|
-
global.kuzzle.onAsk(
|
|
150
|
+
global.kuzzle.onAsk("core:security:profile:update", (id, content, opts) => this.update(id, content, opts));
|
|
151
151
|
}
|
|
152
152
|
/**
|
|
153
153
|
* Loads a Profile
|
|
@@ -181,14 +181,13 @@ class ProfileRepository extends repository_1.default {
|
|
|
181
181
|
*/
|
|
182
182
|
async loadProfiles(profileIds = []) {
|
|
183
183
|
const profiles = [];
|
|
184
|
-
if (profileIds.some(p => typeof p !==
|
|
185
|
-
throw kerror.get(
|
|
184
|
+
if (profileIds.some((p) => typeof p !== "string")) {
|
|
185
|
+
throw kerror.get("api", "assert", "invalid_type", "profileIds", "string[]");
|
|
186
186
|
}
|
|
187
187
|
for (const id of profileIds) {
|
|
188
188
|
let profile = this.profiles.get(id);
|
|
189
189
|
if (!profile) {
|
|
190
|
-
profile = this.loadOneFromDatabase(id)
|
|
191
|
-
.then(p => {
|
|
190
|
+
profile = this.loadOneFromDatabase(id).then((p) => {
|
|
192
191
|
p.optimizedPolicies = this.optimizePolicies(p.policies);
|
|
193
192
|
this.profiles.set(id, p);
|
|
194
193
|
return p;
|
|
@@ -207,7 +206,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
207
206
|
}
|
|
208
207
|
catch (err) {
|
|
209
208
|
if (err.status === 404) {
|
|
210
|
-
throw kerror.get(
|
|
209
|
+
throw kerror.get("security", "profile", "not_found", id);
|
|
211
210
|
}
|
|
212
211
|
throw err;
|
|
213
212
|
}
|
|
@@ -220,7 +219,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
220
219
|
* @param {Object} [opts]
|
|
221
220
|
* @returns {Profile}
|
|
222
221
|
*/
|
|
223
|
-
async _createOrReplace(id, content, { method, refresh =
|
|
222
|
+
async _createOrReplace(id, content, { method, refresh = "false", strict, userId = null, } = {}) {
|
|
224
223
|
const profile = await this.fromDTO({
|
|
225
224
|
// content should be first: ignores _id and _kuzzle_info in it
|
|
226
225
|
...content,
|
|
@@ -244,7 +243,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
244
243
|
*/
|
|
245
244
|
async create(id, content, opts = {}) {
|
|
246
245
|
return this._createOrReplace(id, content, {
|
|
247
|
-
method:
|
|
246
|
+
method: "create",
|
|
248
247
|
...opts,
|
|
249
248
|
});
|
|
250
249
|
}
|
|
@@ -258,7 +257,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
258
257
|
*/
|
|
259
258
|
async createOrReplace(id, content, opts = {}) {
|
|
260
259
|
return this._createOrReplace(id, content, {
|
|
261
|
-
method:
|
|
260
|
+
method: "createOrReplace",
|
|
262
261
|
...opts,
|
|
263
262
|
});
|
|
264
263
|
}
|
|
@@ -284,7 +283,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
284
283
|
},
|
|
285
284
|
});
|
|
286
285
|
return this.validateAndSaveProfile(updated, {
|
|
287
|
-
method:
|
|
286
|
+
method: "update",
|
|
288
287
|
refresh,
|
|
289
288
|
retryOnConflict,
|
|
290
289
|
strict,
|
|
@@ -304,42 +303,42 @@ class ProfileRepository extends repository_1.default {
|
|
|
304
303
|
/**
|
|
305
304
|
* @override
|
|
306
305
|
*/
|
|
307
|
-
async delete(profile, { refresh =
|
|
308
|
-
if ([
|
|
309
|
-
throw kerror.get(
|
|
306
|
+
async delete(profile, { refresh = "false", onAssignedUsers = "fail", userId = "-1" } = {}) {
|
|
307
|
+
if (["admin", "default", "anonymous"].includes(profile._id)) {
|
|
308
|
+
throw kerror.get("security", "profile", "cannot_delete");
|
|
310
309
|
}
|
|
311
310
|
const query = {
|
|
312
311
|
terms: {
|
|
313
|
-
|
|
314
|
-
}
|
|
312
|
+
profileIds: [profile._id],
|
|
313
|
+
},
|
|
315
314
|
};
|
|
316
|
-
if (onAssignedUsers ===
|
|
315
|
+
if (onAssignedUsers === "remove") {
|
|
317
316
|
const batch = [];
|
|
318
317
|
let treated = 0;
|
|
319
|
-
let userPage = await this.module.user.search({ query }, { scroll:
|
|
318
|
+
let userPage = await this.module.user.search({ query }, { scroll: "1m", size: 100 });
|
|
320
319
|
while (treated < userPage.total) {
|
|
321
320
|
batch.length = 0;
|
|
322
321
|
for (const user of userPage.hits) {
|
|
323
|
-
user.profileIds = user.profileIds.filter(e => e !== profile._id);
|
|
322
|
+
user.profileIds = user.profileIds.filter((e) => e !== profile._id);
|
|
324
323
|
if (user.profileIds.length === 0) {
|
|
325
|
-
user.profileIds.push(
|
|
324
|
+
user.profileIds.push("anonymous");
|
|
326
325
|
}
|
|
327
326
|
batch.push(this.module.user.update(user._id, user.profileIds, user, {
|
|
328
327
|
refresh,
|
|
329
|
-
userId
|
|
328
|
+
userId,
|
|
330
329
|
}));
|
|
331
330
|
}
|
|
332
331
|
await bluebird_1.default.all(batch);
|
|
333
332
|
treated += userPage.hits.length;
|
|
334
333
|
if (treated < userPage.total) {
|
|
335
|
-
userPage = await this.module.user.scroll(userPage.scrollId,
|
|
334
|
+
userPage = await this.module.user.scroll(userPage.scrollId, "1m");
|
|
336
335
|
}
|
|
337
336
|
}
|
|
338
337
|
}
|
|
339
338
|
else {
|
|
340
339
|
const hits = await this.module.user.search({ query }, { from: 0, size: 1 });
|
|
341
340
|
if (hits.total > 0) {
|
|
342
|
-
throw kerror.get(
|
|
341
|
+
throw kerror.get("security", "profile", "in_use");
|
|
343
342
|
}
|
|
344
343
|
}
|
|
345
344
|
await this.deleteFromDatabase(profile._id, { refresh });
|
|
@@ -354,7 +353,7 @@ class ProfileRepository extends repository_1.default {
|
|
|
354
353
|
*/
|
|
355
354
|
serializeToDatabase(profile) {
|
|
356
355
|
// avoid the profile var mutation
|
|
357
|
-
return (0, lodash_1.omit)(profile, [
|
|
356
|
+
return (0, lodash_1.omit)(profile, ["_id"]);
|
|
358
357
|
}
|
|
359
358
|
/**
|
|
360
359
|
* Given a Profile object, validates its definition and if OK, persist it to the database.
|
|
@@ -369,17 +368,21 @@ class ProfileRepository extends repository_1.default {
|
|
|
369
368
|
* applied on existing indexes/collections
|
|
370
369
|
* @returns {Promise<Profile>}
|
|
371
370
|
**/
|
|
372
|
-
async validateAndSaveProfile(profile, { method, refresh, retryOnConflict, strict } = {}) {
|
|
373
|
-
const policiesRoles = profile.policies.map(p => p.roleId);
|
|
371
|
+
async validateAndSaveProfile(profile, { method, refresh, retryOnConflict, strict, } = {}) {
|
|
372
|
+
const policiesRoles = profile.policies.map((p) => p.roleId);
|
|
374
373
|
// Assert: all roles must exist
|
|
375
374
|
await this.module.role.loadRoles(policiesRoles);
|
|
376
375
|
await profile.validateDefinition({ strict });
|
|
377
|
-
if (profile._id ===
|
|
378
|
-
|
|
379
|
-
throw kerror.get(
|
|
376
|
+
if (profile._id === "anonymous" &&
|
|
377
|
+
policiesRoles.indexOf("anonymous") === -1) {
|
|
378
|
+
throw kerror.get("security", "profile", "missing_anonymous_role");
|
|
380
379
|
}
|
|
381
380
|
profile.optimizedPolicies = undefined; // Remove optimized policies
|
|
382
|
-
await super.persistToDatabase(profile, {
|
|
381
|
+
await super.persistToDatabase(profile, {
|
|
382
|
+
method,
|
|
383
|
+
refresh,
|
|
384
|
+
retryOnConflict,
|
|
385
|
+
});
|
|
383
386
|
const updatedProfile = await this.loadOneFromDatabase(profile._id);
|
|
384
387
|
// Recompute optimized policies based on new policies
|
|
385
388
|
updatedProfile.optimizedPolicies = this.optimizePolicies(updatedProfile.policies);
|
|
@@ -394,16 +397,16 @@ class ProfileRepository extends repository_1.default {
|
|
|
394
397
|
const profile = await super.fromDTO(dto);
|
|
395
398
|
// force "default" role/policy if the profile does not have any role in it
|
|
396
399
|
if (!profile.policies || profile.policies.length === 0) {
|
|
397
|
-
profile.policies = [{ roleId:
|
|
400
|
+
profile.policies = [{ roleId: "default" }];
|
|
398
401
|
}
|
|
399
|
-
if (profile.constructor._hash(
|
|
400
|
-
profile.constructor._hash = obj => global.kuzzle.hash(obj);
|
|
402
|
+
if (profile.constructor._hash("") === false) {
|
|
403
|
+
profile.constructor._hash = (obj) => global.kuzzle.hash(obj);
|
|
401
404
|
}
|
|
402
|
-
const policiesRoles = profile.policies.map(p => p.roleId);
|
|
405
|
+
const policiesRoles = profile.policies.map((p) => p.roleId);
|
|
403
406
|
const roles = await this.module.role.loadRoles(policiesRoles);
|
|
404
407
|
// Fail if not all roles are found
|
|
405
|
-
if (roles.some(r => r === null)) {
|
|
406
|
-
throw kerror.get(
|
|
408
|
+
if (roles.some((r) => r === null)) {
|
|
409
|
+
throw kerror.get("security", "profile", "cannot_hydrate");
|
|
407
410
|
}
|
|
408
411
|
return profile;
|
|
409
412
|
}
|