diff --git a/api/src/controllers/group.ts b/api/src/controllers/group.ts index 9f6e41b..c5b8681 100644 --- a/api/src/controllers/group.ts +++ b/api/src/controllers/group.ts @@ -10,7 +10,7 @@ import { Body } from 'tsoa' -import Group, { GroupPayload } from '../model/Group' +import Group, { GroupPayload, PUBLIC_GROUP_NAME } from '../model/Group' import User from '../model/User' import { UserResponse } from './user' @@ -241,6 +241,13 @@ const updateUsersListInGroup = async ( message: 'Group not found.' } + if (group.name === PUBLIC_GROUP_NAME) + throw { + code: 400, + status: 'Bad Request', + message: `Can't add/remove user to '${PUBLIC_GROUP_NAME}' group.` + } + const user = await User.findOne({ id: userId }) if (!user) throw { diff --git a/api/src/routes/api/spec/group.spec.ts b/api/src/routes/api/spec/group.spec.ts index 86196ce..4b34e9e 100644 --- a/api/src/routes/api/spec/group.spec.ts +++ b/api/src/routes/api/spec/group.spec.ts @@ -5,6 +5,7 @@ import request from 'supertest' import appPromise from '../../../app' import { UserController, GroupController } from '../../../controllers/' import { generateAccessToken, saveTokensInDB } from '../../../utils' +import { PUBLIC_GROUP_NAME } from '../../../model/Group' const clientId = 'someclientID' const adminUser = { @@ -27,6 +28,12 @@ const group = { description: 'DC group for testing purposes.' } +const PUBLIC_GROUP = { + name: PUBLIC_GROUP_NAME, + description: + 'It is a special group that bypasses authentication for particular routes.' +} + const userController = new UserController() const groupController = new GroupController() @@ -535,6 +542,24 @@ describe('group', () => { expect(res.text).toEqual('User not found.') expect(res.body).toEqual({}) }) + + it('should respond with Bad Request when adding user to Public group', async () => { + const dbGroup = await groupController.createGroup(PUBLIC_GROUP) + const dbUser = await userController.createUser({ + ...user, + username: 'publicUser' + }) + + const res = await request(app) + .post(`/SASjsApi/group/${dbGroup.groupId}/${dbUser.id}`) + .auth(adminAccessToken, { type: 'bearer' }) + .send() + .expect(400) + + expect(res.text).toEqual( + `Can't add/remove user to '${PUBLIC_GROUP_NAME}' group.` + ) + }) }) describe('RemoveUser', () => {