kuzzle 2.16.11 → 2.17.2
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 +3 -3
- package/lib/api/controllers/authController.js +12 -12
- package/lib/api/controllers/baseController.js +60 -3
- package/lib/api/controllers/clusterController.js +1 -1
- package/lib/api/controllers/collectionController.js +7 -5
- package/lib/api/controllers/documentController.js +130 -17
- package/lib/api/controllers/indexController.js +1 -1
- package/lib/api/controllers/memoryStorageController.js +39 -38
- package/lib/api/controllers/realtimeController.js +1 -1
- package/lib/api/controllers/securityController.js +50 -50
- package/lib/api/controllers/serverController.js +73 -27
- package/lib/api/documentExtractor.js +3 -3
- package/lib/api/funnel.js +44 -21
- package/lib/api/httpRoutes.js +9 -4
- package/lib/api/openapi/OpenApiManager.d.ts +11 -0
- package/lib/api/openapi/OpenApiManager.js +96 -0
- package/lib/api/openapi/{document → components/document}/count.yaml +2 -2
- package/lib/api/openapi/{document → components/document}/create.yaml +2 -2
- package/lib/api/openapi/{document → components/document}/createOrReplace.yaml +2 -2
- package/lib/api/openapi/{document → components/document}/delete.yaml +1 -1
- package/lib/api/openapi/{document → components/document}/deleteByQuery.yaml +2 -2
- package/lib/api/openapi/{document → components/document}/exists.yaml +1 -1
- package/lib/api/openapi/{document → components/document}/get.yaml +1 -1
- package/lib/api/openapi/{document → components/document}/index.d.ts +2 -0
- package/lib/api/openapi/{document → components/document}/index.js +7 -2
- package/lib/api/openapi/{document → components/document}/replace.yaml +2 -2
- package/lib/api/openapi/{document → components/document}/scroll.yaml +1 -1
- package/lib/api/openapi/{document → components/document}/update.yaml +2 -2
- package/lib/api/openapi/components/document/validate.yaml +42 -0
- package/lib/api/openapi/components/index.d.ts +2 -0
- package/lib/api/openapi/components/index.js +18 -0
- package/lib/api/openapi/{payloads.yaml → components/payloads.yaml} +0 -0
- package/lib/api/openapi/index.d.ts +1 -2
- package/lib/api/openapi/index.js +1 -5
- package/lib/api/openapi/openApiGenerator.d.ts +7 -0
- package/lib/api/openapi/openApiGenerator.js +133 -0
- package/lib/api/request/kuzzleRequest.js +8 -6
- package/lib/cluster/node.js +9 -9
- package/lib/cluster/publisher.js +1 -1
- package/lib/cluster/state.js +20 -4
- package/lib/cluster/subscriber.js +1 -1
- package/lib/cluster/workers/IDCardRenewer.js +2 -2
- package/lib/config/default.config.js +1 -0
- package/lib/config/index.js +6 -6
- package/lib/core/auth/passportResponse.js +6 -6
- package/lib/core/auth/passportWrapper.js +5 -5
- package/lib/core/backend/backend.d.ts +11 -3
- package/lib/core/backend/backend.js +22 -17
- package/lib/core/backend/backendConfig.d.ts +5 -1
- package/lib/core/backend/backendConfig.js +25 -2
- package/lib/core/backend/backendController.js +21 -5
- package/lib/core/backend/backendErrors.d.ts +58 -0
- package/lib/core/backend/backendErrors.js +121 -0
- package/lib/core/backend/backendHook.js +21 -5
- package/lib/core/backend/backendImport.js +21 -5
- package/lib/core/backend/backendOpenApi.d.ts +9 -0
- package/lib/core/backend/backendOpenApi.js +69 -0
- package/lib/core/backend/backendPipe.js +21 -5
- package/lib/core/backend/backendPlugin.js +22 -3
- package/lib/core/backend/backendVault.js +21 -2
- package/lib/core/backend/index.d.ts +2 -0
- package/lib/core/backend/index.js +2 -0
- package/lib/core/network/accessLogger.js +6 -6
- package/lib/core/network/clientConnection.js +1 -1
- package/lib/core/network/entryPoint.js +5 -5
- package/lib/core/network/httpRouter/index.js +5 -5
- package/lib/core/network/httpRouter/routeHandler.js +3 -3
- package/lib/core/network/httpRouter/routePart.js +5 -5
- package/lib/core/network/protocolManifest.js +1 -1
- package/lib/core/network/protocols/httpMessage.js +2 -2
- package/lib/core/network/protocols/httpwsProtocol.js +228 -50
- package/lib/core/network/protocols/mqttProtocol.js +3 -3
- package/lib/core/network/protocols/protocol.js +3 -3
- package/lib/core/network/router.js +7 -6
- package/lib/core/plugin/plugin.js +38 -64
- package/lib/core/plugin/pluginContext.js +22 -3
- package/lib/core/plugin/pluginManifest.js +3 -3
- package/lib/core/plugin/pluginRepository.js +5 -5
- package/lib/core/plugin/pluginsManager.js +29 -28
- package/lib/core/realtime/channel.js +20 -4
- package/lib/core/realtime/hotelClerk.js +24 -5
- package/lib/core/realtime/notification/server.js +1 -1
- package/lib/core/realtime/notification/user.js +1 -1
- package/lib/core/realtime/notifier.js +5 -5
- package/lib/core/security/index.js +1 -1
- package/lib/core/security/profileRepository.d.ts +176 -0
- package/lib/core/security/profileRepository.js +445 -443
- package/lib/core/security/roleRepository.js +16 -16
- package/lib/core/security/securityLoader.js +2 -2
- package/lib/core/security/tokenRepository.js +11 -11
- package/lib/core/security/userRepository.js +8 -8
- package/lib/core/shared/abstractManifest.js +4 -4
- package/lib/core/shared/repository.js +5 -5
- package/lib/core/shared/sdk/embeddedSdk.js +21 -2
- package/lib/core/shared/sdk/funnelProtocol.js +1 -1
- package/lib/core/shared/sdk/impersonatedSdk.js +1 -1
- package/lib/core/shared/store.js +30 -23
- package/lib/core/statistics/statistics.js +17 -17
- package/lib/core/storage/clientAdapter.js +45 -10
- package/lib/core/storage/indexCache.js +20 -4
- package/lib/core/validation/baseType.js +5 -5
- package/lib/core/validation/types/anything.js +1 -1
- package/lib/core/validation/types/boolean.js +2 -2
- package/lib/core/validation/types/date.js +9 -9
- package/lib/core/validation/types/email.js +5 -5
- package/lib/core/validation/types/enum.js +6 -6
- package/lib/core/validation/types/geoPoint.js +2 -2
- package/lib/core/validation/types/geoShape.js +28 -25
- package/lib/core/validation/types/integer.js +4 -4
- package/lib/core/validation/types/ipAddress.js +7 -6
- package/lib/core/validation/types/numeric.js +4 -4
- package/lib/core/validation/types/object.js +5 -5
- package/lib/core/validation/types/string.js +5 -5
- package/lib/core/validation/types/url.js +7 -6
- package/lib/core/validation/validation.js +95 -84
- package/lib/kerror/codes/1-services.json +12 -0
- package/lib/kerror/codes/2-api.json +12 -0
- package/lib/kerror/codes/3-network.json +12 -0
- package/lib/kerror/codes/4-plugin.json +6 -0
- package/lib/kerror/codes/index.js +11 -11
- package/lib/kerror/errors/multipleErrorsError.d.ts +1 -1
- package/lib/kerror/errors/multipleErrorsError.js +3 -3
- package/lib/kerror/index.d.ts +82 -0
- package/lib/kerror/index.js +176 -143
- package/lib/kuzzle/dumpGenerator.js +3 -3
- package/lib/kuzzle/event/kuzzleEventEmitter.js +4 -4
- package/lib/kuzzle/event/pipeRunner.js +1 -1
- package/lib/kuzzle/event/waterfall.js +6 -6
- package/lib/kuzzle/kuzzle.js +59 -9
- package/lib/kuzzle/log.js +3 -3
- package/lib/kuzzle/vault.js +3 -3
- package/lib/model/security/profile.d.ts +54 -0
- package/lib/model/security/profile.js +192 -232
- package/lib/model/security/rights.js +1 -1
- package/lib/model/security/role.d.ts +40 -0
- package/lib/model/security/role.js +174 -190
- package/lib/model/security/user.d.ts +29 -0
- package/lib/model/security/user.js +103 -52
- package/lib/model/storage/apiKey.js +2 -2
- package/lib/model/storage/baseModel.js +3 -3
- package/lib/service/cache/redis.js +7 -7
- package/lib/service/storage/elasticsearch.js +152 -90
- package/lib/service/storage/esWrapper.js +2 -3
- package/lib/types/ControllerDefinition.d.ts +3 -3
- package/lib/types/ControllerRights.d.ts +22 -0
- package/lib/types/ControllerRights.js +23 -0
- package/lib/types/HttpStream.d.ts +32 -0
- package/lib/types/HttpStream.js +70 -0
- package/lib/types/OpenApiDefinition.d.ts +43 -0
- package/lib/types/{config/StorageService/StorageServiceElasticsearchConfiguration.js → OpenApiDefinition.js} +1 -1
- package/lib/types/Plugin.js +20 -4
- package/lib/types/Policy.d.ts +25 -0
- package/lib/types/{InternalLogger.js → Policy.js} +2 -2
- package/lib/types/PolicyRestrictions.d.ts +21 -0
- package/lib/types/PolicyRestrictions.js +23 -0
- package/lib/types/Target.d.ts +15 -0
- package/lib/types/Target.js +23 -0
- package/lib/types/config/KuzzleConfiguration.d.ts +4 -0
- package/lib/types/config/ServicesConfiguration.d.ts +2 -2
- package/lib/types/config/{StorageService/StorageServiceElasticsearchConfiguration.d.ts → storageEngine/StorageEngineElasticsearchConfiguration.d.ts} +10 -3
- package/lib/types/config/storageEngine/StorageEngineElasticsearchConfiguration.js +3 -0
- package/lib/types/errors/ErrorDefinition.d.ts +27 -0
- package/lib/types/errors/ErrorDefinition.js +3 -0
- package/lib/types/errors/ErrorDomains.d.ts +17 -0
- package/lib/types/errors/ErrorDomains.js +3 -0
- package/lib/types/index.d.ts +9 -1
- package/lib/types/index.js +9 -1
- package/lib/util/array.d.ts +11 -0
- package/lib/util/array.js +57 -0
- package/lib/util/assertType.js +6 -6
- package/lib/util/bufferedPassThrough.d.ts +76 -0
- package/lib/util/bufferedPassThrough.js +161 -0
- package/lib/util/deprecate.js +7 -5
- package/lib/util/didYouMean.js +1 -1
- package/lib/util/dump-collection.d.ts +3 -0
- package/lib/util/dump-collection.js +284 -0
- package/lib/util/extractFields.js +2 -2
- package/lib/util/inflector.d.ts +8 -0
- package/lib/util/inflector.js +16 -0
- package/lib/util/mutex.js +21 -2
- package/lib/util/requestAssertions.js +7 -7
- package/lib/util/wildcard.js +55 -0
- package/package-lock.json +535 -75
- package/package.json +5 -3
- package/lib/api/openApiGenerator.d.ts +0 -7
- package/lib/api/openApiGenerator.js +0 -197
- package/lib/types/InternalLogger.d.ts +0 -25
|
@@ -38,7 +38,7 @@ const { generateRandomName } = require('../../util/name-generator');
|
|
|
38
38
|
* @class SecurityController
|
|
39
39
|
*/
|
|
40
40
|
class SecurityController extends NativeController {
|
|
41
|
-
constructor() {
|
|
41
|
+
constructor () {
|
|
42
42
|
super([
|
|
43
43
|
'checkRights',
|
|
44
44
|
'createApiKey',
|
|
@@ -136,7 +136,7 @@ class SecurityController extends NativeController {
|
|
|
136
136
|
const expiresIn = request.input.args.expiresIn || -1;
|
|
137
137
|
const refresh = request.getRefresh('wait_for');
|
|
138
138
|
const userId = request.getString('userId');
|
|
139
|
-
const apiKeyId = request.getId({ ifMissing: '
|
|
139
|
+
const apiKeyId = request.getId({ ifMissing: 'generate' });
|
|
140
140
|
const description = request.getBodyString('description');
|
|
141
141
|
|
|
142
142
|
const user = await this.ask('core:security:user:get', userId);
|
|
@@ -229,9 +229,9 @@ class SecurityController extends NativeController {
|
|
|
229
229
|
* @returns {Promise}
|
|
230
230
|
*/
|
|
231
231
|
async getProfileMapping () {
|
|
232
|
-
const {properties} = await global.kuzzle.internalIndex.getMapping('profiles');
|
|
232
|
+
const { properties } = await global.kuzzle.internalIndex.getMapping('profiles');
|
|
233
233
|
|
|
234
|
-
return {mapping: properties};
|
|
234
|
+
return { mapping: properties };
|
|
235
235
|
}
|
|
236
236
|
|
|
237
237
|
/**
|
|
@@ -252,9 +252,9 @@ class SecurityController extends NativeController {
|
|
|
252
252
|
* @returns {Promise}
|
|
253
253
|
*/
|
|
254
254
|
async getUserMapping () {
|
|
255
|
-
const {properties} = await global.kuzzle.internalIndex.getMapping('users');
|
|
255
|
+
const { properties } = await global.kuzzle.internalIndex.getMapping('users');
|
|
256
256
|
|
|
257
|
-
return {mapping: properties};
|
|
257
|
+
return { mapping: properties };
|
|
258
258
|
}
|
|
259
259
|
|
|
260
260
|
/**
|
|
@@ -275,7 +275,7 @@ class SecurityController extends NativeController {
|
|
|
275
275
|
* @param {Request} request
|
|
276
276
|
* @returns {Promise<Object>}
|
|
277
277
|
*/
|
|
278
|
-
async getRole(request) {
|
|
278
|
+
async getRole (request) {
|
|
279
279
|
const id = request.getId();
|
|
280
280
|
|
|
281
281
|
const role = await this.ask('core:security:role:get', id);
|
|
@@ -289,7 +289,7 @@ class SecurityController extends NativeController {
|
|
|
289
289
|
* @param {Request} request
|
|
290
290
|
* @returns {Promise<Object>}
|
|
291
291
|
*/
|
|
292
|
-
async mGetRoles(request) {
|
|
292
|
+
async mGetRoles (request) {
|
|
293
293
|
const ids = request.getBodyArray('ids');
|
|
294
294
|
const roles = await this.ask('core:security:role:mGet', ids);
|
|
295
295
|
|
|
@@ -305,7 +305,7 @@ class SecurityController extends NativeController {
|
|
|
305
305
|
async refresh (request) {
|
|
306
306
|
const collection = request.getCollection();
|
|
307
307
|
|
|
308
|
-
if (!this.securityCollections.includes(collection)) {
|
|
308
|
+
if (! this.securityCollections.includes(collection)) {
|
|
309
309
|
throw kerror.get(
|
|
310
310
|
'api',
|
|
311
311
|
'assert',
|
|
@@ -360,7 +360,7 @@ class SecurityController extends NativeController {
|
|
|
360
360
|
* @param {Request} request
|
|
361
361
|
* @returns {Promise<Object>}
|
|
362
362
|
*/
|
|
363
|
-
async createOrReplaceRole(request) {
|
|
363
|
+
async createOrReplaceRole (request) {
|
|
364
364
|
const id = request.getId();
|
|
365
365
|
const body = request.getBody();
|
|
366
366
|
const userId = request.getKuid();
|
|
@@ -402,7 +402,7 @@ class SecurityController extends NativeController {
|
|
|
402
402
|
* @param {Request} request
|
|
403
403
|
* @returns {Promise<Object>}
|
|
404
404
|
*/
|
|
405
|
-
async deleteRole(request) {
|
|
405
|
+
async deleteRole (request) {
|
|
406
406
|
const id = request.getId();
|
|
407
407
|
|
|
408
408
|
await this.ask('core:security:role:delete', id, {
|
|
@@ -422,7 +422,7 @@ class SecurityController extends NativeController {
|
|
|
422
422
|
* @param {Request} request
|
|
423
423
|
* @returns {Promise<Object>}
|
|
424
424
|
*/
|
|
425
|
-
async getProfile(request) {
|
|
425
|
+
async getProfile (request) {
|
|
426
426
|
const id = request.getId();
|
|
427
427
|
|
|
428
428
|
const profile = await this.ask('core:security:profile:get', id);
|
|
@@ -436,7 +436,7 @@ class SecurityController extends NativeController {
|
|
|
436
436
|
* @param {Request} request
|
|
437
437
|
* @returns {Promise<Object>}
|
|
438
438
|
*/
|
|
439
|
-
async mGetProfiles(request) {
|
|
439
|
+
async mGetProfiles (request) {
|
|
440
440
|
const ids = request.getBodyArray('ids');
|
|
441
441
|
|
|
442
442
|
const profiles = await this.ask('core:security:profile:mGet', ids);
|
|
@@ -512,7 +512,7 @@ class SecurityController extends NativeController {
|
|
|
512
512
|
* @param {Request} request
|
|
513
513
|
* @returns {Promise<Object>}
|
|
514
514
|
*/
|
|
515
|
-
async deleteProfile(request) {
|
|
515
|
+
async deleteProfile (request) {
|
|
516
516
|
const id = request.getId();
|
|
517
517
|
const userId = request.getKuid();
|
|
518
518
|
const options = {
|
|
@@ -579,7 +579,7 @@ class SecurityController extends NativeController {
|
|
|
579
579
|
* @param {Request} request
|
|
580
580
|
* @returns {Promise<Object>}
|
|
581
581
|
*/
|
|
582
|
-
async getUser(request) {
|
|
582
|
+
async getUser (request) {
|
|
583
583
|
const id = request.getId();
|
|
584
584
|
const user = await this.ask('core:security:user:get', id);
|
|
585
585
|
|
|
@@ -592,7 +592,7 @@ class SecurityController extends NativeController {
|
|
|
592
592
|
* @param {Request} request
|
|
593
593
|
* @returns {Promise.<Object>}
|
|
594
594
|
*/
|
|
595
|
-
async mGetUsers(request) {
|
|
595
|
+
async mGetUsers (request) {
|
|
596
596
|
let ids;
|
|
597
597
|
|
|
598
598
|
if ( request.input.body
|
|
@@ -616,7 +616,7 @@ class SecurityController extends NativeController {
|
|
|
616
616
|
* @param {Request} request
|
|
617
617
|
* @returns {Promise<Object>}
|
|
618
618
|
*/
|
|
619
|
-
async getProfileRights(request) {
|
|
619
|
+
async getProfileRights (request) {
|
|
620
620
|
const id = request.getId();
|
|
621
621
|
|
|
622
622
|
const profile = await this.ask('core:security:profile:get', id);
|
|
@@ -637,7 +637,7 @@ class SecurityController extends NativeController {
|
|
|
637
637
|
* @param {Request} request
|
|
638
638
|
* @returns {Promise<Object>}
|
|
639
639
|
*/
|
|
640
|
-
async getUserRights(request) {
|
|
640
|
+
async getUserRights (request) {
|
|
641
641
|
const id = request.getId();
|
|
642
642
|
|
|
643
643
|
const user = await this.ask('core:security:user:get', id);
|
|
@@ -658,7 +658,7 @@ class SecurityController extends NativeController {
|
|
|
658
658
|
* @param {Request} request
|
|
659
659
|
* @returns {Promise<Object>}
|
|
660
660
|
*/
|
|
661
|
-
async getUserStrategies(request) {
|
|
661
|
+
async getUserStrategies (request) {
|
|
662
662
|
const userId = request.getId();
|
|
663
663
|
const checkPromises = [];
|
|
664
664
|
|
|
@@ -695,7 +695,7 @@ class SecurityController extends NativeController {
|
|
|
695
695
|
* @param {Request} request
|
|
696
696
|
* @returns {Promise<Object>}
|
|
697
697
|
*/
|
|
698
|
-
async searchUsers(request) {
|
|
698
|
+
async searchUsers (request) {
|
|
699
699
|
const size = this._getSearchPageSize(request);
|
|
700
700
|
const { from, scrollTTL, searchBody } = request.getSearchParams();
|
|
701
701
|
const lang = request.getLangParam();
|
|
@@ -751,7 +751,7 @@ class SecurityController extends NativeController {
|
|
|
751
751
|
* @param {Request} request
|
|
752
752
|
* @returns {Promise<Object>}
|
|
753
753
|
*/
|
|
754
|
-
async deleteUser(request) {
|
|
754
|
+
async deleteUser (request) {
|
|
755
755
|
const id = request.getId();
|
|
756
756
|
const options = { refresh: request.getRefresh('wait_for') };
|
|
757
757
|
|
|
@@ -768,7 +768,7 @@ class SecurityController extends NativeController {
|
|
|
768
768
|
* @param {Request} request
|
|
769
769
|
* @returns {Promise<Object>}
|
|
770
770
|
*/
|
|
771
|
-
async createUser(request) {
|
|
771
|
+
async createUser (request) {
|
|
772
772
|
const content = request.getBodyObject('content');
|
|
773
773
|
const profileIds = get(content, 'profileIds');
|
|
774
774
|
const humanReadableId = request.getString('kuid', 'human') !== 'uuid';
|
|
@@ -777,7 +777,7 @@ class SecurityController extends NativeController {
|
|
|
777
777
|
throw kerror.get('api', 'assert', 'missing_argument', 'body.content.profileIds');
|
|
778
778
|
}
|
|
779
779
|
|
|
780
|
-
if (!Array.isArray(profileIds)) {
|
|
780
|
+
if (! Array.isArray(profileIds)) {
|
|
781
781
|
throw kerror.get('api', 'assert', 'invalid_type', 'body.content.profileIds', 'array');
|
|
782
782
|
}
|
|
783
783
|
|
|
@@ -790,7 +790,7 @@ class SecurityController extends NativeController {
|
|
|
790
790
|
* @param {Request} request
|
|
791
791
|
* @returns {Promise<Object>}
|
|
792
792
|
*/
|
|
793
|
-
async createRestrictedUser(request) {
|
|
793
|
+
async createRestrictedUser (request) {
|
|
794
794
|
const content = request.getBodyObject('content', {});
|
|
795
795
|
const humanReadableId = request.getString('kuid', 'human') !== 'uuid';
|
|
796
796
|
|
|
@@ -811,7 +811,7 @@ class SecurityController extends NativeController {
|
|
|
811
811
|
* @param {Request} request
|
|
812
812
|
* @returns {Promise<Object>}
|
|
813
813
|
*/
|
|
814
|
-
async updateUser(request) {
|
|
814
|
+
async updateUser (request) {
|
|
815
815
|
const id = request.getId();
|
|
816
816
|
const content = request.getBody();
|
|
817
817
|
const userId = request.getKuid();
|
|
@@ -865,7 +865,7 @@ class SecurityController extends NativeController {
|
|
|
865
865
|
* @param {Request} request
|
|
866
866
|
* @returns {Promise<Object>}
|
|
867
867
|
*/
|
|
868
|
-
async updateProfile(request) {
|
|
868
|
+
async updateProfile (request) {
|
|
869
869
|
const id = request.getId();
|
|
870
870
|
const body = request.getBody();
|
|
871
871
|
const userId = request.getKuid();
|
|
@@ -887,7 +887,7 @@ class SecurityController extends NativeController {
|
|
|
887
887
|
* @param {Request} request
|
|
888
888
|
* @returns {Promise<Object>}
|
|
889
889
|
*/
|
|
890
|
-
async updateRole(request) {
|
|
890
|
+
async updateRole (request) {
|
|
891
891
|
const id = request.getId();
|
|
892
892
|
const body = request.getBody();
|
|
893
893
|
const userId = request.getKuid();
|
|
@@ -951,7 +951,7 @@ class SecurityController extends NativeController {
|
|
|
951
951
|
* @param {Request} request
|
|
952
952
|
* @returns {Promise<Object>}
|
|
953
953
|
*/
|
|
954
|
-
mDeleteProfiles(request) {
|
|
954
|
+
mDeleteProfiles (request) {
|
|
955
955
|
return this._mDelete('profile', request);
|
|
956
956
|
}
|
|
957
957
|
|
|
@@ -961,7 +961,7 @@ class SecurityController extends NativeController {
|
|
|
961
961
|
* @param {Request} request
|
|
962
962
|
* @returns {Promise<Object>}
|
|
963
963
|
*/
|
|
964
|
-
mDeleteRoles(request) {
|
|
964
|
+
mDeleteRoles (request) {
|
|
965
965
|
return this._mDelete('role', request);
|
|
966
966
|
}
|
|
967
967
|
|
|
@@ -971,7 +971,7 @@ class SecurityController extends NativeController {
|
|
|
971
971
|
* @param {Request} request
|
|
972
972
|
* @returns {Promise<Object>}
|
|
973
973
|
*/
|
|
974
|
-
mDeleteUsers(request) {
|
|
974
|
+
mDeleteUsers (request) {
|
|
975
975
|
return this._mDelete('user', request);
|
|
976
976
|
}
|
|
977
977
|
|
|
@@ -981,7 +981,7 @@ class SecurityController extends NativeController {
|
|
|
981
981
|
* @param {Request} request
|
|
982
982
|
* @returns {Promise<Object>}
|
|
983
983
|
*/
|
|
984
|
-
async scrollUsers(request) {
|
|
984
|
+
async scrollUsers (request) {
|
|
985
985
|
const id = request.getString('scrollId');
|
|
986
986
|
const ttl = request.getScrollTTLParam();
|
|
987
987
|
|
|
@@ -998,7 +998,7 @@ class SecurityController extends NativeController {
|
|
|
998
998
|
* @param {Request} request
|
|
999
999
|
* @returns {Promise<Object>}
|
|
1000
1000
|
*/
|
|
1001
|
-
async scrollProfiles(request) {
|
|
1001
|
+
async scrollProfiles (request) {
|
|
1002
1002
|
const id = request.getString('scrollId');
|
|
1003
1003
|
const ttl = request.getScrollTTLParam();
|
|
1004
1004
|
|
|
@@ -1013,7 +1013,7 @@ class SecurityController extends NativeController {
|
|
|
1013
1013
|
* @param {Request} request
|
|
1014
1014
|
* @returns {Promise<Object>}
|
|
1015
1015
|
*/
|
|
1016
|
-
async createCredentials(request) {
|
|
1016
|
+
async createCredentials (request) {
|
|
1017
1017
|
const id = request.getId();
|
|
1018
1018
|
const body = request.getBody();
|
|
1019
1019
|
const strategy = request.getString('strategy');
|
|
@@ -1037,7 +1037,7 @@ class SecurityController extends NativeController {
|
|
|
1037
1037
|
* @param {Request} request
|
|
1038
1038
|
* @returns {Promise<Object>}
|
|
1039
1039
|
*/
|
|
1040
|
-
async updateCredentials(request) {
|
|
1040
|
+
async updateCredentials (request) {
|
|
1041
1041
|
const id = request.getId();
|
|
1042
1042
|
const body = request.getBody();
|
|
1043
1043
|
const strategy = request.getString('strategy');
|
|
@@ -1062,7 +1062,7 @@ class SecurityController extends NativeController {
|
|
|
1062
1062
|
* @param {Request} request
|
|
1063
1063
|
* @returns {Promise.<Object>}
|
|
1064
1064
|
*/
|
|
1065
|
-
async hasCredentials(request) {
|
|
1065
|
+
async hasCredentials (request) {
|
|
1066
1066
|
const id = request.getId();
|
|
1067
1067
|
const strategy = request.getString('strategy');
|
|
1068
1068
|
|
|
@@ -1077,7 +1077,7 @@ class SecurityController extends NativeController {
|
|
|
1077
1077
|
* @param {Request} request
|
|
1078
1078
|
* @returns {Promise.<Object>}
|
|
1079
1079
|
*/
|
|
1080
|
-
async validateCredentials(request) {
|
|
1080
|
+
async validateCredentials (request) {
|
|
1081
1081
|
const strategy = request.getString('strategy');
|
|
1082
1082
|
|
|
1083
1083
|
this.assertIsStrategyRegistered(strategy);
|
|
@@ -1096,7 +1096,7 @@ class SecurityController extends NativeController {
|
|
|
1096
1096
|
* @param {Request} request
|
|
1097
1097
|
* @returns {Promise<Object>}
|
|
1098
1098
|
*/
|
|
1099
|
-
async deleteCredentials(request) {
|
|
1099
|
+
async deleteCredentials (request) {
|
|
1100
1100
|
const id = request.getId();
|
|
1101
1101
|
const strategy = request.getString('strategy');
|
|
1102
1102
|
|
|
@@ -1108,14 +1108,14 @@ class SecurityController extends NativeController {
|
|
|
1108
1108
|
|
|
1109
1109
|
global.kuzzle.log.info(`[SECURITY] User "${request.getKuid()}" applied action "${request.input.action}" on user "${id}."`);
|
|
1110
1110
|
|
|
1111
|
-
return {acknowledged: true};
|
|
1111
|
+
return { acknowledged: true };
|
|
1112
1112
|
}
|
|
1113
1113
|
|
|
1114
1114
|
/**
|
|
1115
1115
|
* @param {Request} request
|
|
1116
1116
|
* @returns {Promise<Object>}
|
|
1117
1117
|
*/
|
|
1118
|
-
async getCredentials(request) {
|
|
1118
|
+
async getCredentials (request) {
|
|
1119
1119
|
const id = request.getId();
|
|
1120
1120
|
const strategy = request.getString('strategy');
|
|
1121
1121
|
|
|
@@ -1134,7 +1134,7 @@ class SecurityController extends NativeController {
|
|
|
1134
1134
|
* @param {Request} request
|
|
1135
1135
|
* @returns {Promise<Object>}
|
|
1136
1136
|
*/
|
|
1137
|
-
async getCredentialsById(request) {
|
|
1137
|
+
async getCredentialsById (request) {
|
|
1138
1138
|
const id = request.getId();
|
|
1139
1139
|
const strategy = request.getString('strategy');
|
|
1140
1140
|
|
|
@@ -1153,7 +1153,7 @@ class SecurityController extends NativeController {
|
|
|
1153
1153
|
* @param {Request} request
|
|
1154
1154
|
* @returns {Promise<Object>}
|
|
1155
1155
|
*/
|
|
1156
|
-
async getCredentialFields(request) {
|
|
1156
|
+
async getCredentialFields (request) {
|
|
1157
1157
|
const strategy = request.getString('strategy');
|
|
1158
1158
|
|
|
1159
1159
|
this.assertIsStrategyRegistered(strategy);
|
|
@@ -1164,7 +1164,7 @@ class SecurityController extends NativeController {
|
|
|
1164
1164
|
/**
|
|
1165
1165
|
* @returns {Promise<Object>}
|
|
1166
1166
|
*/
|
|
1167
|
-
async getAllCredentialFields() {
|
|
1167
|
+
async getAllCredentialFields () {
|
|
1168
1168
|
const strategyFields = {};
|
|
1169
1169
|
|
|
1170
1170
|
global.kuzzle.pluginsManager.listStrategies()
|
|
@@ -1180,7 +1180,7 @@ class SecurityController extends NativeController {
|
|
|
1180
1180
|
* @param {Request} request
|
|
1181
1181
|
* @returns {Promise.<null>}
|
|
1182
1182
|
*/
|
|
1183
|
-
async revokeTokens(request) {
|
|
1183
|
+
async revokeTokens (request) {
|
|
1184
1184
|
const id = request.getId();
|
|
1185
1185
|
|
|
1186
1186
|
await this.ask('core:security:token:deleteByKuid', id);
|
|
@@ -1207,7 +1207,7 @@ class SecurityController extends NativeController {
|
|
|
1207
1207
|
|
|
1208
1208
|
await Bluebird.map(
|
|
1209
1209
|
ids,
|
|
1210
|
-
id => this.ask(`core:security:${type}:delete`, id, {refresh})
|
|
1210
|
+
id => this.ask(`core:security:${type}:delete`, id, { refresh })
|
|
1211
1211
|
.then(() => successes.push(id))
|
|
1212
1212
|
.catch(err => errors.push(err)));
|
|
1213
1213
|
|
|
@@ -1231,7 +1231,7 @@ class SecurityController extends NativeController {
|
|
|
1231
1231
|
* @returns {Promise}
|
|
1232
1232
|
* @private
|
|
1233
1233
|
*/
|
|
1234
|
-
async _persistUser(request, profileIds, content, { humanReadableId=true } = {}) {
|
|
1234
|
+
async _persistUser (request, profileIds, content, { humanReadableId = true } = {}) {
|
|
1235
1235
|
const credentials = request.getBodyObject('credentials', {});
|
|
1236
1236
|
const strategies = Object.keys(credentials);
|
|
1237
1237
|
const generator = humanReadableId
|
|
@@ -1253,7 +1253,7 @@ class SecurityController extends NativeController {
|
|
|
1253
1253
|
});
|
|
1254
1254
|
|
|
1255
1255
|
for (const strategy of strategies) {
|
|
1256
|
-
if (!global.kuzzle.pluginsManager.listStrategies().includes(strategy)) {
|
|
1256
|
+
if (! global.kuzzle.pluginsManager.listStrategies().includes(strategy)) {
|
|
1257
1257
|
throw kerror.get(
|
|
1258
1258
|
'security',
|
|
1259
1259
|
'credentials',
|
|
@@ -1293,12 +1293,12 @@ class SecurityController extends NativeController {
|
|
|
1293
1293
|
|
|
1294
1294
|
for (const strategy of strategies) {
|
|
1295
1295
|
try {
|
|
1296
|
-
const validate = this.getStrategyMethod(strategy,'validate');
|
|
1296
|
+
const validate = this.getStrategyMethod(strategy, 'validate');
|
|
1297
1297
|
|
|
1298
1298
|
await validate(request, credentials[strategy], id, strategy, false);
|
|
1299
1299
|
}
|
|
1300
1300
|
catch (error) {
|
|
1301
|
-
creationFailure = {error, validation: true};
|
|
1301
|
+
creationFailure = { error, validation: true };
|
|
1302
1302
|
break;
|
|
1303
1303
|
}
|
|
1304
1304
|
|
|
@@ -1309,7 +1309,7 @@ class SecurityController extends NativeController {
|
|
|
1309
1309
|
createdStrategies.push(strategy);
|
|
1310
1310
|
}
|
|
1311
1311
|
catch (error) {
|
|
1312
|
-
creationFailure = {error, validation: false};
|
|
1312
|
+
creationFailure = { error, validation: false };
|
|
1313
1313
|
break;
|
|
1314
1314
|
}
|
|
1315
1315
|
}
|
|
@@ -1379,7 +1379,7 @@ class SecurityController extends NativeController {
|
|
|
1379
1379
|
* @param {number} limit
|
|
1380
1380
|
* @throws
|
|
1381
1381
|
*/
|
|
1382
|
-
_getSearchPageSize(request) {
|
|
1382
|
+
_getSearchPageSize (request) {
|
|
1383
1383
|
const size = request.getInteger(
|
|
1384
1384
|
'size',
|
|
1385
1385
|
global.kuzzle.config.limits.documentsFetchCount);
|
|
@@ -23,9 +23,9 @@
|
|
|
23
23
|
|
|
24
24
|
const os = require('os');
|
|
25
25
|
const jsonToYaml = require('json2yaml');
|
|
26
|
+
const packagejson = require('../../../package.json');
|
|
26
27
|
|
|
27
28
|
const { NativeController } = require('./baseController');
|
|
28
|
-
const { generateOpenApi } = require('../openApiGenerator');
|
|
29
29
|
|
|
30
30
|
const kerror = require('../../kerror');
|
|
31
31
|
|
|
@@ -33,9 +33,10 @@ const kerror = require('../../kerror');
|
|
|
33
33
|
* @class ServerController
|
|
34
34
|
*/
|
|
35
35
|
class ServerController extends NativeController {
|
|
36
|
-
constructor() {
|
|
36
|
+
constructor () {
|
|
37
37
|
super([
|
|
38
38
|
'adminExists',
|
|
39
|
+
'capabilities',
|
|
39
40
|
'getAllStats',
|
|
40
41
|
'getConfig',
|
|
41
42
|
'getLastStats',
|
|
@@ -48,12 +49,28 @@ class ServerController extends NativeController {
|
|
|
48
49
|
'openapi',
|
|
49
50
|
]);
|
|
50
51
|
|
|
51
|
-
this.
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
this._info = {
|
|
53
|
+
elasticsearch: null,
|
|
54
|
+
redis: null,
|
|
54
55
|
};
|
|
55
56
|
}
|
|
56
57
|
|
|
58
|
+
/**
|
|
59
|
+
* Init ServerController
|
|
60
|
+
* Used to perform asynchronous initialization safely: the funnel will wait
|
|
61
|
+
* for all controllers to be initialized before accepting requests.
|
|
62
|
+
*
|
|
63
|
+
* @returns {Promise}
|
|
64
|
+
*/
|
|
65
|
+
async init () {
|
|
66
|
+
const [storageInfo, cacheInfo] = await Promise.all([
|
|
67
|
+
global.kuzzle.ask('core:storage:public:info:get'),
|
|
68
|
+
global.kuzzle.ask('core:cache:public:info:get'),
|
|
69
|
+
]);
|
|
70
|
+
this._info.elasticsearch = storageInfo;
|
|
71
|
+
this._info.redis = cacheInfo;
|
|
72
|
+
}
|
|
73
|
+
|
|
57
74
|
/**
|
|
58
75
|
* Returns the statistics frame from a date
|
|
59
76
|
*
|
|
@@ -110,6 +127,39 @@ class ServerController extends NativeController {
|
|
|
110
127
|
return config;
|
|
111
128
|
}
|
|
112
129
|
|
|
130
|
+
/**
|
|
131
|
+
* Returns the Kuzzle capabilities
|
|
132
|
+
* @returns {Promise<Object>}
|
|
133
|
+
*/
|
|
134
|
+
async capabilities () {
|
|
135
|
+
const config = JSON.parse(JSON.stringify(global.kuzzle.config));
|
|
136
|
+
const publicApi = await this.publicApi();
|
|
137
|
+
const services = {};
|
|
138
|
+
const plugins = {};
|
|
139
|
+
|
|
140
|
+
for (const plugin of config.plugins.common.include) {
|
|
141
|
+
plugins[plugin] = {
|
|
142
|
+
version: packagejson.dependencies[plugin]
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
for (const [name, info] of Object.entries(config.services)) {
|
|
147
|
+
if (info.backend !== undefined) {
|
|
148
|
+
services[name] = {
|
|
149
|
+
backend: info.backend,
|
|
150
|
+
version: this._info[info.backend].version,
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
return {
|
|
156
|
+
limits: config.limits,
|
|
157
|
+
plugins: plugins,
|
|
158
|
+
routes: publicApi,
|
|
159
|
+
services: services,
|
|
160
|
+
version: config.version,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
113
163
|
/**
|
|
114
164
|
* Checks if an admin user Exists
|
|
115
165
|
*
|
|
@@ -140,7 +190,7 @@ class ServerController extends NativeController {
|
|
|
140
190
|
if (typeof request.input.args.services === 'string') {
|
|
141
191
|
services = request.input.args.services.split(',');
|
|
142
192
|
}
|
|
143
|
-
if (!services || services.includes('internalCache')) {
|
|
193
|
+
if (! services || services.includes('internalCache')) {
|
|
144
194
|
try {
|
|
145
195
|
await global.kuzzle.ask('core:cache:internal:info:get');
|
|
146
196
|
result.services.internalCache = 'green';
|
|
@@ -151,7 +201,7 @@ class ServerController extends NativeController {
|
|
|
151
201
|
result.status = 'red';
|
|
152
202
|
}
|
|
153
203
|
}
|
|
154
|
-
if (!services || services.includes('memoryStorage')) {
|
|
204
|
+
if (! services || services.includes('memoryStorage')) {
|
|
155
205
|
try {
|
|
156
206
|
await global.kuzzle.ask('core:cache:public:info:get');
|
|
157
207
|
result.services.memoryStorage = 'green';
|
|
@@ -162,7 +212,7 @@ class ServerController extends NativeController {
|
|
|
162
212
|
result.status = 'red';
|
|
163
213
|
}
|
|
164
214
|
}
|
|
165
|
-
if (!services || services.includes('storageEngine')) {
|
|
215
|
+
if (! services || services.includes('storageEngine')) {
|
|
166
216
|
try {
|
|
167
217
|
const response = await global.kuzzle.ask('core:storage:public:info:get');
|
|
168
218
|
|
|
@@ -247,7 +297,19 @@ class ServerController extends NativeController {
|
|
|
247
297
|
|
|
248
298
|
async openapi (request) {
|
|
249
299
|
const format = request.getString('format', 'json');
|
|
250
|
-
const
|
|
300
|
+
const scope = request.getString('scope', 'kuzzle');
|
|
301
|
+
|
|
302
|
+
let definition;
|
|
303
|
+
|
|
304
|
+
if (scope === 'kuzzle') {
|
|
305
|
+
definition = await global.kuzzle.ask('core:api:openapi:kuzzle');
|
|
306
|
+
}
|
|
307
|
+
else if (scope === 'app') {
|
|
308
|
+
definition = await global.kuzzle.ask('core:api:openapi:app');
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
throw kerror.get('api', 'assert', 'unexpected_argument', scope, ['kuzzle', 'app']);
|
|
312
|
+
}
|
|
251
313
|
|
|
252
314
|
request.response.configure({
|
|
253
315
|
format: 'raw',
|
|
@@ -255,23 +317,7 @@ class ServerController extends NativeController {
|
|
|
255
317
|
status: 200,
|
|
256
318
|
});
|
|
257
319
|
|
|
258
|
-
return
|
|
259
|
-
}
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Lazy loading of OpenAPI definition.
|
|
263
|
-
*
|
|
264
|
-
* Mainly because we need to wait all plugin to be loaded
|
|
265
|
-
* to generate the definition.
|
|
266
|
-
*/
|
|
267
|
-
getOpenApiDefinition (format) {
|
|
268
|
-
if (! this._openApiDefinition[format]) {
|
|
269
|
-
this._openApiDefinition[format] = format === 'json'
|
|
270
|
-
? generateOpenApi()
|
|
271
|
-
: jsonToYaml.stringify(generateOpenApi());
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
return this._openApiDefinition[format];
|
|
320
|
+
return format === 'json' ? definition : jsonToYaml.stringify(definition);
|
|
275
321
|
}
|
|
276
322
|
|
|
277
323
|
/**
|
|
@@ -293,7 +339,7 @@ class ServerController extends NativeController {
|
|
|
293
339
|
const actionList = {};
|
|
294
340
|
|
|
295
341
|
for (const action of controller._actions) {
|
|
296
|
-
actionList[action] = { action
|
|
342
|
+
actionList[action] = { action, controller: name };
|
|
297
343
|
|
|
298
344
|
// resolve associated http route for each actions
|
|
299
345
|
const routes = httpRoutes.filter(route => {
|
|
@@ -229,7 +229,7 @@ const extractors = ([
|
|
|
229
229
|
}, {});
|
|
230
230
|
|
|
231
231
|
class DocumentExtractor {
|
|
232
|
-
constructor(request) {
|
|
232
|
+
constructor (request) {
|
|
233
233
|
this.request = request;
|
|
234
234
|
|
|
235
235
|
const extractor = extractors[request.input.action];
|
|
@@ -248,11 +248,11 @@ class DocumentExtractor {
|
|
|
248
248
|
}
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
-
extract() {
|
|
251
|
+
extract () {
|
|
252
252
|
return this.extractMethod(this.request);
|
|
253
253
|
}
|
|
254
254
|
|
|
255
|
-
insert(documents) {
|
|
255
|
+
insert (documents) {
|
|
256
256
|
return this.insertMethod(documents, this.request);
|
|
257
257
|
}
|
|
258
258
|
}
|