Files
scrum-poker-internal/app/Http/Middleware/EnsureRoomParticipant.php
T

51 lines
1.2 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\Room;
use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class EnsureRoomParticipant
{
/**
* Handle an incoming request.
*
* @param Closure(Request): (Response) $next
*/
public function handle(Request $request, Closure $next): Response
{
$room = $request->route('room');
if (! $room instanceof Room) {
abort(404);
}
$sessionKey = "room_players.{$room->id}";
$playerId = $request->session()->get($sessionKey);
if (! $playerId) {
return to_route('room.join', [
'join_code' => $room->join_code,
])->withErrors([
'join_code' => 'Du musst diesen Raum erst beitreten.',
]);
}
$player = $room->players()->find($playerId);
if (! $player) {
$request->session()->forget($sessionKey);
return to_route('room.join', [
'join_code' => $room->join_code,
]);
}
$request->attributes->set('currentPlayer', $player);
return $next($request);
}
}