From 87e518cea498edb535e8bad3c4bdcaf7b003f1de Mon Sep 17 00:00:00 2001 From: Yoann Abbes Date: Fri, 24 Apr 2020 09:05:34 +0200 Subject: [PATCH 1/3] Add security:refresh --- doc/7/controllers/security/refresh/index.md | 43 +++++++++++++++++++ .../security/refresh/snippets/refresh.js | 6 +++ .../refresh/snippets/refresh.test.yml | 5 +++ src/controllers/Security.js | 7 +++ test/controllers/security.test.js | 19 ++++++++ 5 files changed, 80 insertions(+) create mode 100644 doc/7/controllers/security/refresh/index.md create mode 100644 doc/7/controllers/security/refresh/snippets/refresh.js create mode 100644 doc/7/controllers/security/refresh/snippets/refresh.test.yml diff --git a/doc/7/controllers/security/refresh/index.md b/doc/7/controllers/security/refresh/index.md new file mode 100644 index 000000000..ae12b91fd --- /dev/null +++ b/doc/7/controllers/security/refresh/index.md @@ -0,0 +1,43 @@ +--- +code: true +type: page +title: refresh +--- + +# refresh + + + +Forces an immediate [reindexation](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/docs-refresh.html) of the provided security collection. + +The available security collections are: `users`, `profiles`, `roles`. + +When writing or deleting documents in Kuzzle, the changes need to be indexed before being reflected in the search results. +By default, this operation can take up to 1 second. + +::: warning +Forcing immediate refreshes comes with performance costs, and should only performed when absolutely necessary. +::: + + + +```js +refresh(collection); +``` + +--- + + +## Arguments + +- `collection`: collection name to refresh + +--- + +## Resolves + +Resolves when the refresh has been done. + +## Usage + +<<< ./snippets/refresh.js \ No newline at end of file diff --git a/doc/7/controllers/security/refresh/snippets/refresh.js b/doc/7/controllers/security/refresh/snippets/refresh.js new file mode 100644 index 000000000..32bd8498f --- /dev/null +++ b/doc/7/controllers/security/refresh/snippets/refresh.js @@ -0,0 +1,6 @@ +try { + await kuzzle.security.refresh('users'); + console.log('Success'); +} catch (e) { + console.error(e); +} \ No newline at end of file diff --git a/doc/7/controllers/security/refresh/snippets/refresh.test.yml b/doc/7/controllers/security/refresh/snippets/refresh.test.yml new file mode 100644 index 000000000..deb50cd40 --- /dev/null +++ b/doc/7/controllers/security/refresh/snippets/refresh.test.yml @@ -0,0 +1,5 @@ +name: security#refresh +description: Refreshes security collection +hooks: +template: default +expected: Success diff --git a/src/controllers/Security.js b/src/controllers/Security.js index 94f4a3276..e9829ca97 100644 --- a/src/controllers/Security.js +++ b/src/controllers/Security.js @@ -376,6 +376,13 @@ class SecurityController extends BaseController { .then(response => response.result.hits.map(hit => new Role(this.kuzzle, hit._id, hit._source.controllers))); } + refresh(collection) { + return this.query({ + collection, + action: 'refresh' + }); + } + replaceUser (_id, body, options = {}) { const request = { _id, diff --git a/test/controllers/security.test.js b/test/controllers/security.test.js index d79b015dd..7f85cadeb 100644 --- a/test/controllers/security.test.js +++ b/test/controllers/security.test.js @@ -909,6 +909,25 @@ describe('Security Controller', () => { }); }); + describe('refresh', () => { + it('should call security/refresh query and return a Promise which resolves a boolean', () => { + kuzzle.query.resolves(null); + + return kuzzle.security.refresh('collection') + .then(res => { + should(kuzzle.query) + .be.calledOnce() + .be.calledWith({ + controller: 'security', + action: 'refresh', + collection: 'collection' + }); + + should(res).be.Null(); + }); + }); + }); + describe('replaceUser', () => { it('should call security/replaceUser query with the user content and return a Promise which resolves a User object', () => { kuzzle.query.resolves({ From 3286071e4d9348f55b9a01fbfc6b6b5c41bae18c Mon Sep 17 00:00:00 2001 From: Yoann Abbes Date: Fri, 24 Apr 2020 09:08:07 +0200 Subject: [PATCH 2/3] nit --- doc/7/controllers/security/refresh/index.md | 6 ------ test/controllers/security.test.js | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/doc/7/controllers/security/refresh/index.md b/doc/7/controllers/security/refresh/index.md index ae12b91fd..cd4415bef 100644 --- a/doc/7/controllers/security/refresh/index.md +++ b/doc/7/controllers/security/refresh/index.md @@ -20,20 +20,14 @@ Forcing immediate refreshes comes with performance costs, and should only perfor ::: - ```js refresh(collection); ``` ---- - - ## Arguments - `collection`: collection name to refresh ---- - ## Resolves Resolves when the refresh has been done. diff --git a/test/controllers/security.test.js b/test/controllers/security.test.js index 7f85cadeb..a60471267 100644 --- a/test/controllers/security.test.js +++ b/test/controllers/security.test.js @@ -910,7 +910,7 @@ describe('Security Controller', () => { }); describe('refresh', () => { - it('should call security/refresh query and return a Promise which resolves a boolean', () => { + it('should call security/refresh query and return a Promise', () => { kuzzle.query.resolves(null); return kuzzle.security.refresh('collection') From ef0512e81130c1bd7673463e33e720b6d3b2b4c3 Mon Sep 17 00:00:00 2001 From: Yoann Abbes Date: Fri, 24 Apr 2020 11:58:18 +0200 Subject: [PATCH 3/3] correct doc --- doc/7/controllers/security/refresh/index.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/doc/7/controllers/security/refresh/index.md b/doc/7/controllers/security/refresh/index.md index cd4415bef..6e3f6fa3c 100644 --- a/doc/7/controllers/security/refresh/index.md +++ b/doc/7/controllers/security/refresh/index.md @@ -6,8 +6,6 @@ title: refresh # refresh - - Forces an immediate [reindexation](https://www.elastic.co/guide/en/elasticsearch/reference/7.4/docs-refresh.html) of the provided security collection. The available security collections are: `users`, `profiles`, `roles`.