From 7554104fb6f57e1ed64a1ba4feaf602e98b791bd Mon Sep 17 00:00:00 2001 From: Marcos Defendi Date: Mon, 23 Dec 2019 16:56:30 -0300 Subject: [PATCH 1/3] Remove patch info from endpoint /api/info --- app/api/server/default/info.js | 13 ++------- app/api/server/lib/server-info.js | 19 +++++++++++++ tests/end-to-end/api/00-miscellaneous.js | 34 ++++++++++++++++++------ 3 files changed, 47 insertions(+), 19 deletions(-) create mode 100644 app/api/server/lib/server-info.js diff --git a/app/api/server/default/info.js b/app/api/server/default/info.js index 7c397de09cb1..acca02ecdb74 100644 --- a/app/api/server/default/info.js +++ b/app/api/server/default/info.js @@ -1,19 +1,10 @@ -import { hasRole } from '../../../authorization'; -import { Info } from '../../../utils'; import { API } from '../api'; +import { getServerInfo } from '../lib/server-info'; API.default.addRoute('info', { authRequired: false }, { get() { const user = this.getLoggedInUser(); - if (user && hasRole(user._id, 'admin')) { - return API.v1.success({ - info: Info, - }); - } - - return API.v1.success({ - version: Info.version, - }); + return API.v1.success(Promise.await(getServerInfo({ user }))); }, }); diff --git a/app/api/server/lib/server-info.js b/app/api/server/lib/server-info.js new file mode 100644 index 000000000000..b37f81826dfe --- /dev/null +++ b/app/api/server/lib/server-info.js @@ -0,0 +1,19 @@ + +import { Info } from '../../../utils'; +import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; + +const removePatchInfo = (version) => { + const regex = /(\d+)\.(\d+)/; + return version.match(regex)[0]; +}; + +export async function getServerInfo({ user }) { + if (user && await hasRoleAsync(user._id, 'admin')) { + return { + info: Info, + }; + } + return { + version: removePatchInfo(Info.version), + }; +} diff --git a/tests/end-to-end/api/00-miscellaneous.js b/tests/end-to-end/api/00-miscellaneous.js index 32fc0632192b..781b5af02887 100644 --- a/tests/end-to-end/api/00-miscellaneous.js +++ b/tests/end-to-end/api/00-miscellaneous.js @@ -8,14 +8,32 @@ describe('miscellaneous', function() { describe('API default', () => { // Required by mobile apps - it('/info', (done) => { - request.get('/api/info') - .expect('Content-Type', 'application/json') - .expect(200) - .expect((res) => { - expect(res.body).to.have.property('version'); - }) - .end(done); + describe('/info', () => { + let version; + it('should return "version", "build", "commit" and "marketplaceApiVersion" when the user is logged in', (done) => { + request.get('/api/info') + .set(credentials) + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body.info).to.have.property('version').and.to.be.a('string'); + expect(res.body.info).to.have.property('build').and.to.be.an('object'); + expect(res.body.info).to.have.property('commit').and.to.be.an('object'); + expect(res.body.info).to.have.property('marketplaceApiVersion').and.to.be.a('string'); + version = res.body.info.version; + }) + .end(done); + }); + it('should return only "version" and the version info must be different qhen the user is not logged in', (done) => { + request.get('/api/info') + .expect('Content-Type', 'application/json') + .expect(200) + .expect((res) => { + expect(res.body).to.have.property('version'); + expect(version).to.not.be.equal(res.body.version); + }) + .end(done); + }); }); }); From 9f3e36e427f56d7376ef5dc02532b51a402575c8 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 2 Sep 2021 17:58:18 -0300 Subject: [PATCH 2/3] Convert to TS --- app/api/server/default/info.js | 4 ++-- app/api/server/lib/getServerInfo.ts | 22 ++++++++++++++++++++++ app/api/server/lib/server-info.js | 19 ------------------- 3 files changed, 24 insertions(+), 21 deletions(-) create mode 100644 app/api/server/lib/getServerInfo.ts delete mode 100644 app/api/server/lib/server-info.js diff --git a/app/api/server/default/info.js b/app/api/server/default/info.js index 320dfec0d293..62ef49023f00 100644 --- a/app/api/server/default/info.js +++ b/app/api/server/default/info.js @@ -1,11 +1,11 @@ import { API } from '../api'; -import { getServerInfo } from '../lib/server-info'; +import { getServerInfo } from '../lib/getServerInfo'; API.default.addRoute('info', { authRequired: false }, { get() { const user = this.getLoggedInUser(); - return API.v1.success(Promise.await(getServerInfo({ user }))); + return API.v1.success(Promise.await(getServerInfo(user?._id))); }, }); diff --git a/app/api/server/lib/getServerInfo.ts b/app/api/server/lib/getServerInfo.ts new file mode 100644 index 000000000000..9d9d46cffea8 --- /dev/null +++ b/app/api/server/lib/getServerInfo.ts @@ -0,0 +1,22 @@ + +import { Info } from '../../../utils/server'; +import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; + +type ServerInfo = { + info: Info; +} | { + version: string | undefined; +}; + +const removePatchInfo = (version: string): string => version.replace(/(\d+\.\d+).*/, '$1'); + +export async function getServerInfo(userId?: string): Promise { + if (await hasRoleAsync(userId, 'admin')) { + return { + info: Info, + }; + } + return { + version: removePatchInfo(Info.version), + }; +} diff --git a/app/api/server/lib/server-info.js b/app/api/server/lib/server-info.js deleted file mode 100644 index b37f81826dfe..000000000000 --- a/app/api/server/lib/server-info.js +++ /dev/null @@ -1,19 +0,0 @@ - -import { Info } from '../../../utils'; -import { hasRoleAsync } from '../../../authorization/server/functions/hasRole'; - -const removePatchInfo = (version) => { - const regex = /(\d+)\.(\d+)/; - return version.match(regex)[0]; -}; - -export async function getServerInfo({ user }) { - if (user && await hasRoleAsync(user._id, 'admin')) { - return { - info: Info, - }; - } - return { - version: removePatchInfo(Info.version), - }; -} From d23756f4f53311d7ddd74d59c44443d687761694 Mon Sep 17 00:00:00 2001 From: Diego Sampaio Date: Thu, 2 Sep 2021 18:09:46 -0300 Subject: [PATCH 3/3] Improve tests --- tests/end-to-end/api/00-miscellaneous.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/end-to-end/api/00-miscellaneous.js b/tests/end-to-end/api/00-miscellaneous.js index e3d750ba21fe..9779e783f491 100644 --- a/tests/end-to-end/api/00-miscellaneous.js +++ b/tests/end-to-end/api/00-miscellaneous.js @@ -28,13 +28,14 @@ describe('miscellaneous', function() { }) .end(done); }); - it('should return only "version" and the version info must be different qhen the user is not logged in', (done) => { + it('should return only "version" and the version should not have patch info when the user is not logged in', (done) => { request.get('/api/info') .expect('Content-Type', 'application/json') .expect(200) .expect((res) => { expect(res.body).to.have.property('version'); - expect(version).to.not.be.equal(res.body.version); + expect(res.body).to.not.have.property('info'); + expect(res.body.version).to.be.equal(version.replace(/(\d+\.\d+).*/, '$1')); }) .end(done); });