Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117736502
D1936.1775150150.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
20 KB
Referenced Files
None
Subscribers
None
D1936.1775150150.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
@@ -202,12 +202,12 @@
if (!$room->hasSession()) {
// Participants can't join the room until the session is created by the owner
if (!$isOwner) {
- return $this->errorResponse(423, \trans('meet.session-not-found'));
+ return $this->errorResponse(422, \trans('meet.session-not-found'), ['code' => 323]);
}
// The room owner can create the session on request
if (empty(request()->input('init'))) {
- return $this->errorResponse(424, \trans('meet.session-not-found'));
+ return $this->errorResponse(422, \trans('meet.session-not-found'), ['code' => 324]);
}
$session = $room->createSession();
@@ -225,11 +225,13 @@
'requires_password' => !$isOwner && strlen($password),
];
+ $response = ['config' => $config];
+
// Validate room password
if (!$isOwner && strlen($password)) {
$request_password = request()->input('password');
if ($request_password !== $password) {
- return $this->errorResponse(425, \trans('meet.session-password-error'), ['config' => $config]);
+ return $this->errorResponse(422, \trans('meet.session-password-error'), $response + ['code' => 325]);
}
}
@@ -247,14 +249,14 @@
if (empty($request['status']) || $request['status'] != Room::REQUEST_ACCEPTED) {
if (!$request) {
if (empty($nickname) || empty($requestId) || !preg_match('/^[a-z0-9]{8,32}$/i', $requestId)) {
- return $this->errorResponse(426, $error, ['config' => $config]);
+ return $this->errorResponse(422, $error, $response + ['code' => 326]);
}
if (empty($picture)) {
$svg = file_get_contents(resource_path('images/user.svg'));
$picture = 'data:image/svg+xml;base64,' . base64_encode($svg);
} elseif (!preg_match('|^data:image/png;base64,[a-zA-Z0-9=+/]+$|', $picture)) {
- return $this->errorResponse(426, $error, ['config' => $config]);
+ return $this->errorResponse(422, $error, $response + ['code' => 326]);
}
// TODO: Resize when big/make safe the user picture?
@@ -263,14 +265,14 @@
if (!$room->requestSave($requestId, $request)) {
// FIXME: should we use error code 500?
- return $this->errorResponse(426, $error, ['config' => $config]);
+ return $this->errorResponse(422, $error, $response + ['code' => 326]);
}
// Send the request (signal) to the owner
$result = $room->signal('joinRequest', $request, Room::ROLE_MODERATOR);
}
- return $this->errorResponse(427, $error, ['config' => $config]);
+ return $this->errorResponse(422, $error, $response + ['code' => 327]);
}
}
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
@@ -72,11 +72,11 @@
<div class="mt-3">
<button type="button"
@click="joinSession"
- :disabled="roomState == 'init' || roomState == 427 || roomState == 404"
+ :disabled="roomState == 'init' || roomState == 327 || roomState == 404"
:class="'btn w-100 btn-' + (isRoomReady() ? 'success' : 'primary')"
>
<span v-if="isRoomReady()">JOIN NOW</span>
- <span v-else-if="roomState == 423">I'm the owner</span>
+ <span v-else-if="roomState == 323">I'm the owner</span>
<span v-else>JOIN</span>
</button>
</div>
@@ -153,11 +153,11 @@
roomStateLabels: {
init: 'Checking the room...',
404: 'The room does not exist.',
- 423: 'The room is closed. Please, wait for the owner to start the session.',
- 424: 'The room is closed. It will be open for others after you join.',
- 425: 'The room is ready. Please, provide a valid password.',
- 426: 'The room is locked. Please, enter your name and try again.',
- 427: 'Waiting for permission to join the room.',
+ 323: 'The room is closed. Please, wait for the owner to start the session.',
+ 324: 'The room is closed. It will be open for others after you join.',
+ 325: 'The room is ready. Please, provide a valid password.',
+ 326: 'The room is locked. Please, enter your name and try again.',
+ 327: 'Waiting for permission to join the room.',
500: 'Failed to create a session. Server error.'
},
session: {}
@@ -220,34 +220,40 @@
}
})
.catch(error => {
- this.roomState = String(error.response.status)
+ const data = error.response.data || {}
- if (error.response.data && error.response.data.config) {
- this.session.config = error.response.data.config
+ if (data.code) {
+ this.roomState = data.code
+ } else {
+ this.roomState = error.response.status
+ }
+
+ if (data.config) {
+ this.session.config = data.config
}
switch (this.roomState) {
- case '423':
+ case 323:
// Waiting for the owner to open the room...
// Update room state every 10 seconds
window.roomRequest = setTimeout(() => { this.initSession() }, 10000)
break;
- case '425':
+ case 325:
// Missing/invalid password
if (init) {
$('#setup-password').addClass('is-invalid').focus()
}
break;
- case '426':
+ case 326:
// Locked room prerequisites error
if (init && !$('#setup-nickname').val()) {
$('#setup-nickname').addClass('is-invalid').focus()
}
break;
- case '427':
+ case 327:
// Waiting for the owner's approval to join
// Update room state every 10 seconds
window.roomRequest = setTimeout(() => { this.initSession(true) }, 10000)
@@ -260,7 +266,7 @@
}
},
isRoomReady() {
- return ['ready', '424', '425', '426', '427'].includes(this.roomState)
+ return ['ready', 324, 325, 326, 327].includes(this.roomState)
},
// An event received by the room owner when a participant is asking for a permission to join the room
joinRequest(data) {
@@ -309,7 +315,7 @@
},
// Entering the room
joinSession() {
- if (this.roomState == 423) {
+ if (this.roomState == 323) {
$('#meet-setup').addClass('hidden')
$('#meet-auth').removeClass('hidden')
return
diff --git a/src/resources/vue/Widgets/StatusMessage.vue b/src/resources/vue/Widgets/StatusMessage.vue
--- a/src/resources/vue/Widgets/StatusMessage.vue
+++ b/src/resources/vue/Widgets/StatusMessage.vue
@@ -5,8 +5,8 @@
</div>
<span v-if="status == 'init'">{{ statusLabel() }}</span>
- <svg-icon v-if="Number(status) >= 400 && status in statusLabels" icon="exclamation-circle"></svg-icon>
- <span v-if="Number(status) >= 400 && status in statusLabels">{{ statusLabel() }}</span>
+ <svg-icon v-if="status != 'init' && statusLabel()" :icon="Number(status) >= 400 ? 'exclamation-circle' : 'info-circle'"></svg-icon>
+ <span v-if="status != 'init' && statusLabel()">{{ statusLabel() }}</span>
</div>
</template>
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
@@ -134,7 +134,6 @@
$browser->assertVisible('video')
->assertAudioMuted('video', true)
->assertSeeIn('.nickname', 'john')
- ->assertMissing('.nickname button')
->assertVisible('.controls button.link-fullscreen')
->assertMissing('.controls button.link-audio')
->assertMissing('.status .status-audio')
@@ -142,7 +141,7 @@
})
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) {
$browser->assertMissing('video')
- ->assertMissing('.nickname')
+ ->assertVisible('.nickname')
->assertVisible('.controls button.link-fullscreen')
->assertVisible('.controls button.link-audio')
->assertVisible('.status .status-audio')
@@ -162,8 +161,6 @@
->whenAvailable('div.meet-video.publisher', function (Browser $browser) {
$browser->assertVisible('video')
//->assertAudioMuted('video', true)
- ->assertVisible('.nickname button')
- ->assertMissing('.nickname span')
->assertVisible('.controls button.link-fullscreen')
->assertMissing('.controls button.link-audio')
->assertVisible('.status .status-audio')
@@ -172,7 +169,6 @@
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) {
$browser->assertVisible('video')
->assertSeeIn('.nickname', 'john')
- ->assertMissing('.nickname button')
->assertVisible('.controls button.link-fullscreen')
->assertVisible('.controls button.link-audio')
->assertMissing('.status .status-audio')
diff --git a/src/tests/Browser/Meet/RoomSecurityTest.php b/src/tests/Browser/Meet/RoomSecurityTest.php
--- a/src/tests/Browser/Meet/RoomSecurityTest.php
+++ b/src/tests/Browser/Meet/RoomSecurityTest.php
@@ -93,7 +93,7 @@
$guest->visit(new RoomPage('john'))
->waitFor('@setup-form')
->waitUntilMissing('@setup-status-message.loading')
- ->assertSeeIn('@setup-status-message.text-danger', "Please, provide a valid password.")
+ ->assertSeeIn('@setup-status-message', "Please, provide a valid password.")
->assertVisible('@setup-form .input-group:nth-child(4) svg')
->assertAttribute('@setup-form .input-group:nth-child(4) .input-group-text', 'title', 'Password')
->assertAttribute('@setup-password-input', 'placeholder', 'Password')
@@ -175,7 +175,7 @@
->click('@setup-button')
->waitFor('@setup-nickname-input.is-invalid')
->assertSeeIn(
- '@setup-status-message.text-danger',
+ '@setup-status-message',
"The room is locked. Please, enter your name and try again."
)
->assertMissing('@setup-password-input')
@@ -184,7 +184,7 @@
->click('@setup-button')
->assertMissing('@setup-nickname-input.is-invalid')
->waitFor('@setup-button[disabled]')
- ->assertSeeIn('@setup-status-message.text-danger', "Waiting for permission to join the room.");
+ ->assertSeeIn('@setup-status-message', "Waiting for permission to join the room.");
// Test denying the request (this will also test custom toasts)
$owner
@@ -209,7 +209,7 @@
->type('@setup-nickname-input', 'guest')
->click('@setup-button')
->waitFor('@setup-button[disabled]')
- ->assertSeeIn('@setup-status-message.text-danger', "Waiting for permission to join the room.");
+ ->assertSeeIn('@setup-status-message', "Waiting for permission to join the room.");
$owner
->whenAvailable(new Toast(Toast::TYPE_CUSTOM), function ($browser) {
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
@@ -198,8 +198,7 @@
->assertMissing('@setup-form')
->whenAvailable('div.meet-video.publisher', function (Browser $browser) {
$browser->assertVisible('video')
- ->assertVisible('.nickname button')
- ->assertMissing('.nickname span')
+ ->assertVisible('.nickname')
->assertVisible('.controls button.link-fullscreen')
->assertMissing('.controls button.link-audio')
->assertVisible('.status .status-audio')
@@ -229,7 +228,7 @@
->assertElementsCount('@session div.meet-video', 2)
->whenAvailable('div.meet-video:not(.publisher)', function (Browser $browser) {
$browser->assertMissing('video')
- ->assertMissing('.nickname')
+ ->assertVisible('.nickname')
->assertVisible('.controls button.link-fullscreen')
->assertVisible('.controls button.link-audio')
->assertVisible('.status .status-audio')
diff --git a/src/tests/Feature/Controller/OpenViduTest.php b/src/tests/Feature/Controller/OpenViduTest.php
--- a/src/tests/Feature/Controller/OpenViduTest.php
+++ b/src/tests/Feature/Controller/OpenViduTest.php
@@ -82,7 +82,10 @@
// Unauth access, no session yet
$response = $this->post("api/v4/openvidu/rooms/{$room->name}");
- $response->assertStatus(423);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(323, $json['code']);
// Non-existing room name
$response = $this->actingAs($john)->post("api/v4/openvidu/rooms/non-existing");
@@ -92,11 +95,17 @@
// Non-owner, no session yet
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}");
- $response->assertStatus(423);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(323, $json['code']);
// Room owner, no session yet
$response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}");
- $response->assertStatus(424);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(324, $json['code']);
$response = $this->actingAs($john)->post("api/v4/openvidu/rooms/{$room->name}", ['init' => 1]);
$response->assertStatus(200);
@@ -130,11 +139,12 @@
// Non-owner, password protected room, password not provided
$room->setSettings(['password' => 'pass']);
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}");
- $response->assertStatus(425);
+ $response->assertStatus(422);
$json = $response->json();
- $this->assertCount(3, $json);
+ $this->assertCount(4, $json);
+ $this->assertSame(325, $json['code']);
$this->assertSame('error', $json['status']);
$this->assertSame('Failed to join the session. Invalid password.', $json['message']);
$this->assertEmpty($json['config']['password']);
@@ -142,7 +152,10 @@
// Non-owner, password protected room, invalid provided
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", ['password' => 'aa']);
- $response->assertStatus(425);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(325, $json['code']);
// Non-owner, password protected room, valid password provided
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", ['password' => 'pass']);
@@ -179,11 +192,12 @@
// Non-owner, locked room, invalid/missing input
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}");
- $response->assertStatus(426);
+ $response->assertStatus(422);
$json = $response->json();
- $this->assertCount(3, $json);
+ $this->assertCount(4, $json);
+ $this->assertSame(326, $json['code']);
$this->assertSame('error', $json['status']);
$this->assertSame('Failed to join the session. Room locked.', $json['message']);
$this->assertTrue($json['config']['locked']);
@@ -191,22 +205,29 @@
// Non-owner, locked room, invalid requestId
$post = ['nickname' => 'name', 'requestId' => '-----'];
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post);
- $response->assertStatus(426);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(326, $json['code']);
// Non-owner, locked room, invalid requestId
$post = ['nickname' => 'name', 'picture' => '-----'];
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post);
- $response->assertStatus(426);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(326, $json['code']);
// Non-owner, locked room, valid input
$reqId = '12345678';
$post = ['nickname' => 'name', 'requestId' => $reqId, 'picture' => 'data:image/png;base64,01234'];
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post);
- $response->assertStatus(427);
+ $response->assertStatus(422);
$json = $response->json();
- $this->assertCount(3, $json);
+ $this->assertCount(4, $json);
+ $this->assertSame(327, $json['code']);
$this->assertSame('error', $json['status']);
$this->assertSame('Failed to join the session. Room locked.', $json['message']);
$this->assertTrue($json['config']['locked']);
@@ -241,7 +262,10 @@
// Non-owner, locked room, join request denied
$response = $this->actingAs($jack)->post("api/v4/openvidu/rooms/{$room->name}", $post);
- $response->assertStatus(427);
+ $response->assertStatus(422);
+
+ $json = $response->json();
+ $this->assertSame(327, $json['code']);
// Test accepting a request
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Thu, Apr 2, 5:15 PM (47 m, 58 s ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18780156
Default Alt Text
D1936.1775150150.diff (20 KB)
Attached To
Mode
D1936: Use a single error code for all room joining error responses
Attached
Detach File
Event Timeline