Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/OpenViduController.php
Show First 20 Lines • Show All 97 Lines • ▼ Show 20 Lines | public function joinRoom($id) | ||||
// Check if there's still a valid beta entitlement for the room owner | // Check if there's still a valid beta entitlement for the room owner | ||||
$sku = \App\Sku::where('title', 'meet')->first(); | $sku = \App\Sku::where('title', 'meet')->first(); | ||||
if ($sku && !$room->owner->entitlements()->where('sku_id', $sku->id)->first()) { | if ($sku && !$room->owner->entitlements()->where('sku_id', $sku->id)->first()) { | ||||
return $this->errorResponse(404, \trans('meet.room-not-found')); | return $this->errorResponse(404, \trans('meet.room-not-found')); | ||||
} | } | ||||
$user = Auth::guard()->user(); | $user = Auth::guard()->user(); | ||||
$isOwner = $user && $user->id == $room->user_id; | |||||
// There's no existing session | // There's no existing session | ||||
if (!$room->hasSession()) { | if (!$room->hasSession()) { | ||||
// Participants can't join the room until the session is created by the owner | // Participants can't join the room until the session is created by the owner | ||||
if (!$user || $user->id != $room->user_id) { | if (!$isOwner) { | ||||
return $this->errorResponse(423, \trans('meet.session-not-found')); | return $this->errorResponse(423, \trans('meet.session-not-found')); | ||||
} | } | ||||
// The room owner can create the session on request | // The room owner can create the session on request | ||||
if (empty(request()->input('init'))) { | if (empty(request()->input('init'))) { | ||||
return $this->errorResponse(424, \trans('meet.session-not-found')); | return $this->errorResponse(424, \trans('meet.session-not-found')); | ||||
} | } | ||||
$session = $room->createSession(); | $session = $room->createSession(); | ||||
if (empty($session)) { | if (empty($session)) { | ||||
return $this->errorResponse(500, \trans('meet.session-create-error')); | return $this->errorResponse(500, \trans('meet.session-create-error')); | ||||
} | } | ||||
} | } | ||||
$password = (string) $room->getSetting('password'); | |||||
$config = [ | |||||
'locked' => $room->getSetting('locked') === 'true', | |||||
'password' => $isOwner ? $password : '', | |||||
'requires_password' => !$isOwner && strlen($password), | |||||
]; | |||||
// Validate room password | |||||
if (!$isOwner && strlen($password)) { | |||||
$request_password = request()->input('password'); | |||||
if ($request_password !== $password) { | |||||
// Note: We send the config to the client so it knows to display the password field | |||||
$response = [ | |||||
'config' => $config, | |||||
'message' => \trans('meet.session-password-error'), | |||||
'status' => 'error', | |||||
]; | |||||
return response()->json($response, 425); | |||||
} | |||||
} | |||||
// Create session token for the current user/connection | // Create session token for the current user/connection | ||||
$response = $room->getSessionToken('PUBLISHER'); | $response = $room->getSessionToken('PUBLISHER'); | ||||
if (empty($response)) { | if (empty($response)) { | ||||
return $this->errorResponse(500, \trans('meet.session-join-error')); | return $this->errorResponse(500, \trans('meet.session-join-error')); | ||||
} | } | ||||
// Create session token for screen sharing connection | // Create session token for screen sharing connection | ||||
if (!empty(request()->input('screenShare'))) { | if (!empty(request()->input('screenShare'))) { | ||||
$add_token = $room->getSessionToken('PUBLISHER'); | $add_token = $room->getSessionToken('PUBLISHER'); | ||||
$response['shareToken'] = $add_token['token']; | $response['shareToken'] = $add_token['token']; | ||||
} | } | ||||
// Tell the UI who's the room owner | // Tell the UI who's the room owner | ||||
$response['owner'] = $user && $user->id == $room->user_id; | $response['owner'] = $isOwner; | ||||
// Append the room configuration | |||||
$response['config'] = $config; | |||||
return response()->json($response); | return response()->json($response); | ||||
} | } | ||||
/** | /** | ||||
* Set the domain configuration. | |||||
* | |||||
* @param string $id Room identifier (name) | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse|void | |||||
*/ | |||||
public function setRoomConfig($id) | |||||
{ | |||||
$room = Room::where('name', $id)->first(); | |||||
// Room does not exist, or the owner is deleted | |||||
if (!$room || !$room->owner) { | |||||
return $this->errorResponse(404); | |||||
} | |||||
$user = Auth::guard()->user(); | |||||
// Only room owner can configure the room | |||||
if ($user->id != $room->user_id) { | |||||
return $this->errorResponse(403); | |||||
} | |||||
$input = request()->input(); | |||||
$errors = []; | |||||
foreach ($input as $key => $value) { | |||||
switch ($key) { | |||||
case 'password': | |||||
if ($value === null || $value === '') { | |||||
$input[$key] = null; | |||||
} else { | |||||
// TODO: Do we have to validate the password in any way? | |||||
} | |||||
break; | |||||
case 'locked': | |||||
$input[$key] = $value ? 'true' : null; | |||||
break; | |||||
default: | |||||
$errors[$key] = \trans('meet.room-unsupported-option-error'); | |||||
} | |||||
} | |||||
if (!empty($errors)) { | |||||
return response()->json(['status' => 'error', 'errors' => $errors], 422); | |||||
} | |||||
if (!empty($input)) { | |||||
$room->setSettings($input); | |||||
} | |||||
return response()->json([ | |||||
'status' => 'success', | |||||
'message' => \trans('meet.room-setconfig-success'), | |||||
]); | |||||
} | |||||
/** | |||||
* Webhook as triggered from OpenVidu server | * Webhook as triggered from OpenVidu server | ||||
* | * | ||||
* @param \Illuminate\Http\Request $request The API request. | * @param \Illuminate\Http\Request $request The API request. | ||||
* | * | ||||
* @return \Illuminate\Http\Response The response | * @return \Illuminate\Http\Response The response | ||||
*/ | */ | ||||
public function webhook(Request $request) | public function webhook(Request $request) | ||||
{ | { | ||||
Show All 20 Lines |