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 @@
@@ -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 @@
{{ statusLabel() }}
-
- {{ statusLabel() }}
+
+ {{ statusLabel() }}
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