mirror of
https://github.com/ericasch6/scrum-poker-internal.git
synced 2026-10-14 09:55:29 +00:00
Handle authenticated room instance takeover
This commit is contained in:
@@ -13,6 +13,8 @@ use Inertia\Inertia;
|
||||
|
||||
class ShowEmbeddedRoomRequest extends FormRequest
|
||||
{
|
||||
private const string PLAYER_NAME_TAKEN_MESSAGE = 'Dieser Anzeigename ist in dem Raum bereits vorhanden.';
|
||||
|
||||
/**
|
||||
* Determine if the user is authorized to make this request.
|
||||
*/
|
||||
@@ -72,16 +74,18 @@ class ShowEmbeddedRoomRequest extends FormRequest
|
||||
}
|
||||
|
||||
$sessionPlayerId = $this->session()->get("room_players.{$room->id}");
|
||||
$existingPlayer = is_numeric($sessionPlayerId)
|
||||
? $room->players()->find((int) $sessionPlayerId)
|
||||
: null;
|
||||
$existingPlayer = null;
|
||||
|
||||
if ($existingPlayer === null && $this->user() !== null) {
|
||||
if ($this->user() !== null) {
|
||||
$existingPlayer = $room->players()
|
||||
->where('user_id', $this->user()->id)
|
||||
->first();
|
||||
}
|
||||
|
||||
if ($existingPlayer === null && is_numeric($sessionPlayerId)) {
|
||||
$existingPlayer = $room->players()->find((int) $sessionPlayerId);
|
||||
}
|
||||
|
||||
$nameIsTaken = Player::query()
|
||||
->where('room_id', $room->id)
|
||||
->where('name', $this->input('player_name'))
|
||||
@@ -94,7 +98,7 @@ class ShowEmbeddedRoomRequest extends FormRequest
|
||||
if ($nameIsTaken) {
|
||||
$validator->errors()->add(
|
||||
'player_name',
|
||||
'Dieser Anzeigename ist in dem Raum bereits vorhanden.',
|
||||
self::PLAYER_NAME_TAKEN_MESSAGE,
|
||||
);
|
||||
}
|
||||
},
|
||||
@@ -112,9 +116,18 @@ class ShowEmbeddedRoomRequest extends FormRequest
|
||||
|
||||
protected function failedValidation(Validator $validator): never
|
||||
{
|
||||
$message = $validator->errors()->first();
|
||||
$showLoginAction = $this->user() === null
|
||||
&& $message === self::PLAYER_NAME_TAKEN_MESSAGE;
|
||||
|
||||
if ($showLoginAction) {
|
||||
$this->session()->put('url.intended', $this->fullUrl());
|
||||
}
|
||||
|
||||
throw new HttpResponseException(
|
||||
Inertia::render('embedded/Error', [
|
||||
'message' => $validator->errors()->first(),
|
||||
'message' => $message,
|
||||
'showLoginAction' => $showLoginAction,
|
||||
])->toResponse($this)->setStatusCode(422),
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user