Page MenuHomePhorge

D2257.1775169690.diff
No OneTemporary

Authored By
Unknown
Size
13 KB
Referenced Files
None
Subscribers
None

D2257.1775169690.diff

diff --git a/src/app/Http/Controllers/API/V4/OpenViduController.php b/src/app/Http/Controllers/API/V4/OpenViduController.php
--- a/src/app/Http/Controllers/API/V4/OpenViduController.php
+++ b/src/app/Http/Controllers/API/V4/OpenViduController.php
@@ -250,6 +250,7 @@
$config = [
'locked' => $room->getSetting('locked') === 'true',
+ 'nomedia' => $room->getSetting('nomedia') === 'true',
'password' => $isOwner ? $password : '',
'requires_password' => !$isOwner && strlen($password),
];
@@ -308,7 +309,7 @@
// Initialize connection tokens
if ($init) {
// Choose the connection role
- $canPublish = !empty(request()->input('canPublish'));
+ $canPublish = empty($config['nomedia']) && !empty(request()->input('canPublish'));
$role = $canPublish ? Room::ROLE_PUBLISHER : Room::ROLE_SUBSCRIBER;
if ($isOwner) {
$role |= Room::ROLE_MODERATOR;
@@ -376,6 +377,10 @@
$input[$key] = $value ? 'true' : null;
break;
+ case 'nomedia':
+ $input[$key] = $value ? 'true' : null;
+ break;
+
default:
$errors[$key] = \trans('meet.room-unsupported-option-error');
}
diff --git a/src/resources/vue/Meet/Room.vue b/src/resources/vue/Meet/Room.vue
--- a/src/resources/vue/Meet/Room.vue
+++ b/src/resources/vue/Meet/Room.vue
@@ -35,8 +35,8 @@
<button class="btn btn-link link-fullscreen open hidden" @click="switchFullscreen" title="Full screen">
<svg-icon icon="compress"></svg-icon>
</button>
- <button class="btn btn-link link-security" v-if="isRoomOwner()" @click="securityOptions" title="Security options">
- <svg-icon icon="shield-alt"></svg-icon>
+ <button class="btn btn-link link-options" v-if="isRoomOwner()" @click="roomOptions" title="Room options">
+ <svg-icon icon="cog"></svg-icon>
</button>
<button class="btn btn-link link-logout" @click="logout" title="Leave session">
<svg-icon icon="power-off"></svg-icon>
@@ -175,7 +175,7 @@
</div>
</div>
- <session-security-options v-if="session.config" :config="session.config" :room="room" @config-update="configUpdate"></session-security-options>
+ <room-options v-if="session.config" :config="session.config" :room="room" @config-update="configUpdate"></room-options>
</div>
</template>
@@ -183,7 +183,7 @@
import { Meet, Roles } from '../../js/meet/app.js'
import StatusMessage from '../Widgets/StatusMessage'
import LogonForm from '../Login'
- import SessionSecurityOptions from './SessionSecurityOptions'
+ import RoomOptions from './RoomOptions'
// Register additional icons
import { library } from '@fortawesome/fontawesome-svg-core'
@@ -201,7 +201,6 @@
faMicrophoneAlt,
faPowerOff,
faUser,
- faShieldAlt,
faVideo,
faVolumeMute
} from '@fortawesome/free-solid-svg-icons'
@@ -220,7 +219,6 @@
faMicrophoneAlt,
faPowerOff,
faUser,
- faShieldAlt,
faVideo,
faVolumeMute
)
@@ -231,7 +229,7 @@
export default {
components: {
LogonForm,
- SessionSecurityOptions,
+ RoomOptions,
StatusMessage
},
data() {
@@ -583,8 +581,8 @@
return this.reqId
},
- securityOptions() {
- $('#security-options-dialog').modal()
+ roomOptions() {
+ $('#room-options-dialog').modal()
},
setMenuItem(type, state, disabled) {
let button = $('#meet-session-menu').find('.link-' + type)
diff --git a/src/tests/Browser/Meet/RoomControlsTest.php b/src/tests/Browser/Meet/RoomControlsTest.php
--- a/src/tests/Browser/Meet/RoomControlsTest.php
+++ b/src/tests/Browser/Meet/RoomControlsTest.php
@@ -110,7 +110,7 @@
'screen' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED,
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED,
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
- 'security' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
+ 'options' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
])
->whenAvailable('div.meet-video.self', function (Browser $browser) {
diff --git a/src/tests/Browser/Meet/RoomSecurityTest.php b/src/tests/Browser/Meet/RoomOptionsTest.php
rename from src/tests/Browser/Meet/RoomSecurityTest.php
rename to src/tests/Browser/Meet/RoomOptionsTest.php
--- a/src/tests/Browser/Meet/RoomSecurityTest.php
+++ b/src/tests/Browser/Meet/RoomOptionsTest.php
@@ -9,7 +9,7 @@
use Tests\Browser\Pages\Meet\Room as RoomPage;
use Tests\TestCaseDusk;
-class RoomSecurityTest extends TestCaseDusk
+class RoomOptionsTest extends TestCaseDusk
{
/**
* {@inheritDoc}
@@ -45,10 +45,10 @@
->assertMissing('@setup-password-input')
->clickWhenEnabled('@setup-button')
->waitFor('@session')
- // Enter Security option dialog
- ->click('@menu button.link-security')
- ->with(new Dialog('#security-options-dialog'), function (Browser $browser) use ($room) {
- $browser->assertSeeIn('@title', 'Security options')
+ // Enter room option dialog
+ ->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertSeeIn('@title', 'Room options')
->assertSeeIn('@button-action', 'Close')
->assertElementsCount('.modal-footer button', 1)
->assertSeeIn('#password-input .label', 'Password:')
@@ -95,9 +95,9 @@
->waitFor('@session');
// Test removing the password
- $owner->click('@menu button.link-security')
- ->with(new Dialog('#security-options-dialog'), function (Browser $browser) use ($room) {
- $browser->assertSeeIn('@title', 'Security options')
+ $owner->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertSeeIn('@title', 'Room options')
->assertSeeIn('#password-input-text:not(.text-muted)', 'pass')
->assertSeeIn('#password-clear-btn.btn-outline-danger', 'Clear password')
->assertElementsCount('#password-input button', 1)
@@ -122,7 +122,6 @@
public function testLockedRoomDeny(): void
{
$this->browse(function (Browser $owner, Browser $guest) {
- // Make sure there's no session yet
$room = Room::where('name', 'john')->first();
// Join the room as an owner (authenticate)
@@ -134,10 +133,10 @@
->type('@setup-nickname-input', 'John')
->clickWhenEnabled('@setup-button')
->waitFor('@session')
- // Enter Security option dialog
- ->click('@menu button.link-security')
- ->with(new Dialog('#security-options-dialog'), function (Browser $browser) use ($room) {
- $browser->assertSeeIn('@title', 'Security options')
+ // Enter room option dialog
+ ->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertSeeIn('@title', 'Room options')
->assertSeeIn('#room-lock label', 'Locked room:')
->assertVisible('#room-lock input[type=checkbox]:not(:checked)')
->assertVisible('#room-lock + small')
@@ -197,7 +196,6 @@
public function testLockedRoomAcceptAndDismiss(): void
{
$this->browse(function (Browser $owner, Browser $guest) {
- // Make sure there's no session yet
$room = Room::where('name', 'john')->first();
// Join the room as an owner (authenticate)
@@ -209,10 +207,10 @@
->type('@setup-nickname-input', 'John')
->clickWhenEnabled('@setup-button')
->waitFor('@session')
- // Enter Security option dialog
- ->click('@menu button.link-security')
- ->with(new Dialog('#security-options-dialog'), function (Browser $browser) use ($room) {
- $browser->assertSeeIn('@title', 'Security options')
+ // Enter room option dialog
+ ->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertSeeIn('@title', 'Room options')
->assertSeeIn('#room-lock label', 'Locked room:')
->assertVisible('#room-lock input[type=checkbox]:not(:checked)')
->assertVisible('#room-lock + small')
@@ -267,4 +265,62 @@
});
});
}
+
+ /**
+ * Test nomedia (subscribers only) feature
+ *
+ * @group openvidu
+ */
+ public function testSubscribersOnly(): void
+ {
+ $this->browse(function (Browser $owner, Browser $guest) {
+ $room = Room::where('name', 'john')->first();
+
+ // Join the room as an owner (authenticate)
+ $owner->visit(new RoomPage('john'))
+ // ->click('@setup-button')
+ // ->submitLogon('john@kolab.org', 'simple123')
+ ->waitFor('@setup-form')
+ ->waitUntilMissing('@setup-status-message.loading')
+ ->type('@setup-nickname-input', 'John')
+ ->clickWhenEnabled('@setup-button')
+ ->waitFor('@session')
+ // Enter room option dialog
+ ->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertSeeIn('@title', 'Room options')
+ ->assertSeeIn('#room-nomedia label', 'Subscribers only:')
+ ->assertVisible('#room-nomedia input[type=checkbox]:not(:checked)')
+ ->assertVisible('#room-nomedia + small')
+ // Test enabling the option
+ ->click('#room-nomedia input')
+ ->assertToast(Toast::TYPE_SUCCESS, "Room configuration updated successfully.")
+ ->click('@button-action');
+
+ $this->assertSame('true', $room->fresh()->getSetting('nomedia'));
+ });
+
+ // In another browser act as a guest
+ $guest->visit(new RoomPage('john'))
+ ->waitFor('@setup-form')
+ ->waitUntilMissing('@setup-status-message.loading')
+ ->type('@setup-nickname-input', 'John')
+ ->clickWhenEnabled('@setup-button')
+ // expect the owner to have a video, but the guest to have none
+ ->waitFor('@session .meet-video')
+ ->waitFor('@session .meet-subscriber.self');
+
+ // Unset the option back
+ $owner->click('@menu button.link-options')
+ ->with(new Dialog('#room-options-dialog'), function (Browser $browser) use ($room) {
+ $browser->assertVisible('#room-nomedia input[type=checkbox]:checked')
+ // Test enabling the option
+ ->click('#room-nomedia input')
+ ->assertToast(Toast::TYPE_SUCCESS, "Room configuration updated successfully.")
+ ->click('@button-action');
+
+ $this->assertSame(null, $room->fresh()->getSetting('nomedia'));
+ });
+ });
+ }
}
diff --git a/src/tests/Browser/Meet/RoomSetupTest.php b/src/tests/Browser/Meet/RoomSetupTest.php
--- a/src/tests/Browser/Meet/RoomSetupTest.php
+++ b/src/tests/Browser/Meet/RoomSetupTest.php
@@ -307,7 +307,7 @@
'hand' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED,
'chat' => RoomPage::BUTTON_INACTIVE | RoomPage::BUTTON_ENABLED,
'fullscreen' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
- 'security' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
+ 'options' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
'logout' => RoomPage::BUTTON_ACTIVE | RoomPage::BUTTON_ENABLED,
]);
diff --git a/src/tests/TestCaseMeetTrait.php b/src/tests/TestCaseMeetTrait.php
--- a/src/tests/TestCaseMeetTrait.php
+++ b/src/tests/TestCaseMeetTrait.php
@@ -37,7 +37,7 @@
$this->clearMeetEntitlements();
$room = Room::where('name', $room_name)->first();
- $room->setSettings(['password' => null, 'locked' => null]);
+ $room->setSettings(['password' => null, 'locked' => null, 'nomedia' => null]);
if ($room->session_id) {
$room->session_id = null;

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 2, 10:41 PM (16 h, 15 m ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18821310
Default Alt Text
D2257.1775169690.diff (13 KB)

Event Timeline