From 62f1db909da6b35c0ba72b7e77ac5407827421c6 Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Wed, 16 Nov 2022 03:31:30 +0530 Subject: [PATCH 1/2] New: capability of muting or unmuting a user in a room --- src/definition/accessors/IRoomUpdater.ts | 8 +++++++ src/server/accessors/RoomUpdater.ts | 17 ++++++++++++++ src/server/bridges/RoomBridge.ts | 29 ++++++++++++++++++++++++ tests/test-data/bridges/roomBridge.ts | 8 +++++++ 4 files changed, 62 insertions(+) create mode 100644 src/definition/accessors/IRoomUpdater.ts create mode 100644 src/server/accessors/RoomUpdater.ts diff --git a/src/definition/accessors/IRoomUpdater.ts b/src/definition/accessors/IRoomUpdater.ts new file mode 100644 index 000000000..630a369db --- /dev/null +++ b/src/definition/accessors/IRoomUpdater.ts @@ -0,0 +1,8 @@ +import { IRoom } from '../rooms'; +import { IUser } from '../users'; + +export interface IRoomUpdater { + muteUser(room: IRoom, executorId: IUser, user: IUser): Promise; + + unmuteUser(room: IRoom, executorId: IUser, user: IUser): Promise; +} diff --git a/src/server/accessors/RoomUpdater.ts b/src/server/accessors/RoomUpdater.ts new file mode 100644 index 000000000..ed1193c95 --- /dev/null +++ b/src/server/accessors/RoomUpdater.ts @@ -0,0 +1,17 @@ +import { IRoomUpdater } from '../../definition/accessors/IRoomUpdater'; +import { IRoom } from '../../definition/rooms'; +import { IUser } from '../../definition/users'; +import { AppBridges } from '../bridges'; + +export class RoomUpdater implements IRoomUpdater { + constructor(private readonly bridges: AppBridges, private readonly appId: string) { + } + + public async muteUser(room: IRoom, executor: IUser, user: IUser) { + return this.bridges.getRoomBridge().doMuteUser(room.id, executor.id, user.id, this.appId); + } + + public async unmuteUser(room: IRoom, executor: IUser, user: IUser) { + return this.bridges.getRoomBridge().doUnmuteUser(room.id, executor.id, user.id, this.appId); + } +} diff --git a/src/server/bridges/RoomBridge.ts b/src/server/bridges/RoomBridge.ts index 1a97ff017..9501b5839 100644 --- a/src/server/bridges/RoomBridge.ts +++ b/src/server/bridges/RoomBridge.ts @@ -49,6 +49,19 @@ export abstract class RoomBridge extends BaseBridge { } } + // TODO: check if we can use a list of user ids + public async doMuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise { + if (this.hasWritePermission(appId)) { + return this.doUnmuteUser(roomId, executorId, userId, appId); + } + } + + public async doUnmuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise { + if (this.hasWritePermission(appId)) { + return this.doMuteUser(roomId, executorId, userId, appId); + } + } + public async doUpdate(room: IRoom, members: Array, appId: string): Promise { if (this.hasWritePermission(appId)) { return this.update(room, members, appId); @@ -92,13 +105,21 @@ export abstract class RoomBridge extends BaseBridge { } protected abstract create(room: IRoom, members: Array, appId: string): Promise; + protected abstract getById(roomId: string, appId: string): Promise; + protected abstract getByName(roomName: string, appId: string): Promise; + protected abstract getCreatorById(roomId: string, appId: string): Promise; + protected abstract getCreatorByName(roomName: string, appId: string): Promise; + protected abstract getDirectByUsernames(usernames: Array, appId: string): Promise; + protected abstract getMembers(roomId: string, appId: string): Promise>; + protected abstract update(room: IRoom, members: Array, appId: string): Promise; + protected abstract createDiscussion( room: IRoom, parentMessage: IMessage | undefined, @@ -106,11 +127,19 @@ export abstract class RoomBridge extends BaseBridge { members: Array, appId: string, ): Promise; + protected abstract delete(room: string, appId: string): Promise; + protected abstract getModerators(roomId: string, appId: string): Promise>; + protected abstract getOwners(roomId: string, appId: string): Promise>; + protected abstract getLeaders(roomId: string, appId: string): Promise>; + protected abstract muteUser(roomId: string, executorId: string, userId: string, appId: string): Promise; + + protected abstract unmuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise; + private hasWritePermission(appId: string): boolean { if (AppPermissionManager.hasPermission(appId, AppPermissions.room.write)) { return true; diff --git a/tests/test-data/bridges/roomBridge.ts b/tests/test-data/bridges/roomBridge.ts index 1159e2456..8e3a20502 100644 --- a/tests/test-data/bridges/roomBridge.ts +++ b/tests/test-data/bridges/roomBridge.ts @@ -55,4 +55,12 @@ export class TestsRoomBridge extends RoomBridge { public getOwners(roomId: string, appId: string): Promise> { throw new Error('Method not implemented.'); } + + public muteUser(roomId: string, executorId: string, userId: string, appId: string): Promise { + throw new Error('Method not implemented'); + } + + public unmuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise { + throw new Error('Method not implemented'); + } } From 9c9e9366a02eb667447aac19034982afd1b30c18 Mon Sep 17 00:00:00 2001 From: Debdut Chakraborty Date: Wed, 16 Nov 2022 04:47:06 +0530 Subject: [PATCH 2/2] New: ability to hide room --- src/definition/accessors/IRoomUpdater.ts | 6 ++++-- src/server/accessors/RoomUpdater.ts | 4 ++++ src/server/bridges/RoomBridge.ts | 8 ++++++++ tests/test-data/bridges/roomBridge.ts | 4 ++++ 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/definition/accessors/IRoomUpdater.ts b/src/definition/accessors/IRoomUpdater.ts index 630a369db..9f1d15d58 100644 --- a/src/definition/accessors/IRoomUpdater.ts +++ b/src/definition/accessors/IRoomUpdater.ts @@ -2,7 +2,9 @@ import { IRoom } from '../rooms'; import { IUser } from '../users'; export interface IRoomUpdater { - muteUser(room: IRoom, executorId: IUser, user: IUser): Promise; + muteUser(room: IRoom, executor: IUser, user: IUser): Promise; - unmuteUser(room: IRoom, executorId: IUser, user: IUser): Promise; + unmuteUser(room: IRoom, executor: IUser, user: IUser): Promise; + + hideRoom(room: IRoom, executor: IUser): Promise; } diff --git a/src/server/accessors/RoomUpdater.ts b/src/server/accessors/RoomUpdater.ts index ed1193c95..c08d2aaf7 100644 --- a/src/server/accessors/RoomUpdater.ts +++ b/src/server/accessors/RoomUpdater.ts @@ -14,4 +14,8 @@ export class RoomUpdater implements IRoomUpdater { public async unmuteUser(room: IRoom, executor: IUser, user: IUser) { return this.bridges.getRoomBridge().doUnmuteUser(room.id, executor.id, user.id, this.appId); } + + public async hideRoom(room: IRoom, executor: IUser): Promise { + return this.bridges.getRoomBridge().doHideRoom(room.id, executor.id, this.appId); + } } diff --git a/src/server/bridges/RoomBridge.ts b/src/server/bridges/RoomBridge.ts index 9501b5839..0d003648a 100644 --- a/src/server/bridges/RoomBridge.ts +++ b/src/server/bridges/RoomBridge.ts @@ -104,6 +104,12 @@ export abstract class RoomBridge extends BaseBridge { } } + public async doHideRoom(roomId: string, executorId: string, appId: string): Promise { + if (this.hasWritePermission(appId)) { + return this.hideRoom(roomId, executorId, appId); + } + } + protected abstract create(room: IRoom, members: Array, appId: string): Promise; protected abstract getById(roomId: string, appId: string): Promise; @@ -140,6 +146,8 @@ export abstract class RoomBridge extends BaseBridge { protected abstract unmuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise; + protected abstract hideRoom(roomId: string, executorId: string, appId: string): Promise; + private hasWritePermission(appId: string): boolean { if (AppPermissionManager.hasPermission(appId, AppPermissions.room.write)) { return true; diff --git a/tests/test-data/bridges/roomBridge.ts b/tests/test-data/bridges/roomBridge.ts index 8e3a20502..df66bd7b0 100644 --- a/tests/test-data/bridges/roomBridge.ts +++ b/tests/test-data/bridges/roomBridge.ts @@ -63,4 +63,8 @@ export class TestsRoomBridge extends RoomBridge { public unmuteUser(roomId: string, executorId: string, userId: string, appId: string): Promise { throw new Error('Method not implemented'); } + + public hideRoom(roomId: string, executorId: string, appId: string): Promise { + throw new Error('Method not implemented'); + } }