Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117744267
D2257.1775169690.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
13 KB
Referenced Files
None
Subscribers
None
D2257.1775169690.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D2257: Meet: A room config option to force all to join as subscribers
Attached
Detach File
Event Timeline