Changeset View
Changeset View
Standalone View
Standalone View
src/app/Http/Controllers/API/V4/MeetController.php
<?php | <?php | ||||
namespace App\Http\Controllers\API\V4; | namespace App\Http\Controllers\API\V4; | ||||
use App\Http\Controllers\Controller; | use App\Http\Controllers\Controller; | ||||
use App\Meet\Room; | use App\Meet\Room; | ||||
use Illuminate\Http\Request; | use Illuminate\Http\Request; | ||||
use Illuminate\Support\Facades\Auth; | use Illuminate\Support\Facades\Auth; | ||||
use Illuminate\Support\Facades\Validator; | |||||
class MeetController extends Controller | class MeetController extends Controller | ||||
{ | { | ||||
/** | /** | ||||
* Listing of rooms that belong to the authenticated user. | |||||
* | |||||
* @return \Illuminate\Http\JsonResponse | |||||
*/ | |||||
public function index() | |||||
{ | |||||
$user = Auth::guard()->user(); | |||||
$rooms = Room::where('user_id', $user->id)->orderBy('name')->get(); | |||||
if (count($rooms) == 0) { | |||||
// Create a room for the user (with a random and unique name) | |||||
while (true) { | |||||
$name = strtolower(\App\Utils::randStr(3, 3, '-')); | |||||
if (!Room::where('name', $name)->count()) { | |||||
break; | |||||
} | |||||
} | |||||
$room = Room::create([ | |||||
'name' => $name, | |||||
'user_id' => $user->id | |||||
]); | |||||
$rooms = collect([$room]); | |||||
} | |||||
$result = [ | |||||
'list' => $rooms, | |||||
'count' => count($rooms), | |||||
]; | |||||
return response()->json($result); | |||||
} | |||||
/** | |||||
* Join the room session. Each room has one owner, and the room isn't open until the owner | * Join the room session. Each room has one owner, and the room isn't open until the owner | ||||
* joins (and effectively creates the session). | * joins (and effectively creates the session). | ||||
* | * | ||||
* @param string $id Room identifier (name) | * @param string $id Room identifier (name) | ||||
* | * | ||||
* @return \Illuminate\Http\JsonResponse | * @return \Illuminate\Http\JsonResponse | ||||
*/ | */ | ||||
public function joinRoom($id) | public function joinRoom($id) | ||||
{ | { | ||||
$room = Room::where('name', $id)->first(); | $room = Room::where('name', $id)->first(); | ||||
// Room does not exist, or the owner is deleted | // Room does not exist, or the owner is deleted | ||||
if (!$room || !$room->owner || $room->owner->isDegraded(true)) { | if (!$room || !($wallet = $room->wallet()) || !$wallet->owner || $wallet->owner->isDegraded(true)) { | ||||
return $this->errorResponse(404, \trans('meet.room-not-found')); | return $this->errorResponse(404, \trans('meet.room-not-found')); | ||||
} | } | ||||
// Check if there's still a valid meet entitlement for the room owner | // Check if there's still a valid meet entitlement for the room owner | ||||
if (!$room->owner->hasSku('meet')) { | if (!$wallet->owner->hasSku('meet')) { | ||||
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; | $isOwner = $user && ($user->id == $wallet->owner->id || $room->shares()->where('user', $user->email)->exists()); | ||||
$init = !empty(request()->input('init')); | $init = !empty(request()->input('init')); | ||||
// 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 (!$isOwner) { | if (!$isOwner) { | ||||
return $this->errorResponse(422, \trans('meet.session-not-found'), ['code' => 323]); | return $this->errorResponse(422, \trans('meet.session-not-found'), ['code' => 323]); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 95 Lines • ▼ Show 20 Lines | public function joinRoom($id) | ||||
$response_code = 422; | $response_code = 422; | ||||
$response['code'] = 322; | $response['code'] = 322; | ||||
} | } | ||||
return response()->json($response, $response_code); | return response()->json($response, $response_code); | ||||
} | } | ||||
/** | /** | ||||
* 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 || $room->owner->isDegraded(true)) { | |||||
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; | |||||
case 'nomedia': | |||||
$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 the Meet server | * Webhook as triggered from the Meet 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 39 Lines |