From da9234a24fdac183b190cc58cf13e13cfc34ad04 Mon Sep 17 00:00:00 2001 From: sualko Date: Fri, 19 Jun 2020 09:20:03 +0200 Subject: [PATCH] fix: guest joins room fix #50 --- lib/BigBlueButton/API.php | 2 +- lib/Permission.php | 8 ++-- tests/Unit/PermissionTest.php | 90 +++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 5 deletions(-) create mode 100644 tests/Unit/PermissionTest.php diff --git a/lib/BigBlueButton/API.php b/lib/BigBlueButton/API.php index db4baf4..a017d1f 100644 --- a/lib/BigBlueButton/API.php +++ b/lib/BigBlueButton/API.php @@ -58,7 +58,7 @@ class API * * @return string join url */ - public function createJoinUrl(Room $room, int $creationTime, string $displayname, string $uid = null) + public function createJoinUrl(Room $room, int $creationTime, string $displayname, ?string $uid = null) { $password = $this->permission->isModerator($room, $uid) ? $room->moderatorPassword : $room->attendeePassword; diff --git a/lib/Permission.php b/lib/Permission.php index ae7a04c..a6301eb 100644 --- a/lib/Permission.php +++ b/lib/Permission.php @@ -25,14 +25,14 @@ class Permission $this->roomShareService = $roomShareService; } - public function isUser(Room $room, string $uid) + public function isUser(Room $room, ?string $uid) { return $this->hasPermission($room, $uid, function (RoomShare $share) { return $share->hasUserPermission(); }); } - public function isModerator(Room $room, string $uid) + public function isModerator(Room $room, ?string $uid) { if ($room->everyoneIsModerator) { return true; @@ -43,14 +43,14 @@ class Permission }); } - public function isAdmin(Room $room, string $uid) + public function isAdmin(Room $room, ?string $uid) { return $this->hasPermission($room, $uid, function (RoomShare $share) { return $share->hasAdminPermission(); }); } - private function hasPermission(Room $room, string $uid, Closure $hasPermission): bool + private function hasPermission(Room $room, ?string $uid, Closure $hasPermission): bool { if ($uid === null) { return false; diff --git a/tests/Unit/PermissionTest.php b/tests/Unit/PermissionTest.php new file mode 100644 index 0000000..6d1decb --- /dev/null +++ b/tests/Unit/PermissionTest.php @@ -0,0 +1,90 @@ +groupManager = $this->createMock(IGroupManager::class); + + /** @var RoomShareService|MockObject */ + $this->roomShareService = $this->createMock(RoomShareService::class); + + $this->permission = new Permission( + $this->groupManager, + $this->roomShareService + ); + } + + public function testIsUser() + { + $room = $this->createRoom(1, 'foo'); + + $this->roomShareService + ->expects($this->exactly(4)) + ->method('findAll') + ->will($this->returnValueMap([ + [1, [ + $this->createRoomShare(RoomShare::SHARE_TYPE_USER, 'user', RoomShare::PERMISSION_ADMIN), + $this->createRoomShare(RoomShare::SHARE_TYPE_GROUP, 'group', RoomShare::PERMISSION_MODERATOR), + ]], + [2, []], + ])); + + $this->groupManager + ->method('isInGroup') + ->will($this->returnValueMap([ + ['bar', 'group', false], + ['group_user', 'group', true], + ])); + + $this->assertFalse($this->permission->isUser($room, null), 'Test guest user'); + $this->assertFalse($this->permission->isUser($room, 'bar'), 'Test no matching share'); + $this->assertFalse($this->permission->isUser($this->createRoom(2, 'foo'), 'bar'), 'Test empty shares'); + + $this->assertTrue($this->permission->isUser($room, 'foo'), 'Test room owner'); + $this->assertTrue($this->permission->isUser($room, 'user')); + $this->assertTrue($this->permission->isUser($room, 'group_user')); + } + + private function createRoom(int $id, string $userId): Room + { + $room = new Room(); + + $room->setId($id); + $room->setUserId($userId); + + return $room; + } + + private function createRoomShare(int $type, string $with, int $permission): RoomShare + { + $share = new RoomShare(); + + $share->setShareType($type); + $share->setShareWith($with); + $share->setPermission($permission); + + return $share; + } +}