Skip to content
This repository was archived by the owner on Apr 18, 2019. It is now read-only.

Commit 0136b60

Browse files
committed
Allow preflight requests
1 parent 3ae219e commit 0136b60

File tree

3 files changed

+42
-15
lines changed

3 files changed

+42
-15
lines changed

app/config/routes.yaml

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,29 +29,34 @@ game_move:
2929
api_game_new:
3030
path: /api/game
3131
defaults: { _controller: 'App\Controller\ApiController::new' }
32-
methods: [POST]
32+
methods: [OPTIONS, POST]
3333

3434
api_game:
3535
path: /api/game/{id}
3636
defaults: { _controller: 'App\Controller\ApiController::game' }
37-
methods: [GET]
37+
methods: [OPTIONS, GET]
3838

3939
api_game_cancel:
4040
path: /api/game/{id}
4141
defaults: { _controller: 'App\Controller\ApiController::cancel' }
42-
methods: [DELETE]
42+
methods: [OPTIONS, DELETE]
4343

4444
api_game_join:
4545
path: /api/game/{id}/join
4646
defaults: { _controller: 'App\Controller\ApiController::join' }
47-
methods: [POST]
47+
methods: [OPTIONS, POST]
4848

4949
api_game_move:
5050
path: /api/game/{id}/move/{tile}
5151
defaults: { _controller: 'App\Controller\ApiController::move' }
52-
methods: [PUT]
52+
methods: [OPTIONS, PUT]
5353

5454
api_games:
5555
path: /api/games/open
5656
defaults: { _controller: 'App\Controller\ApiController::games' }
57-
methods: [GET]
57+
methods: [OPTIONS, GET]
58+
59+
api_suggest:
60+
path: /api/suggest
61+
defaults: { _controller: 'App\Controller\ApiController::suggest' }
62+
methods: [OPTIONS, POST]

app/src/Controller/ApiController.php

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ public function __construct(GameApi $gameApi, GameRepository $gameRepository, Pl
3030
}
3131

3232
public function new(Request $request) {
33+
if ($request->getMethod() == 'OPTIONS') {
34+
return new Response(Response::HTTP_OK);
35+
}
36+
3337
$body = json_decode($request->getContent(), true);
3438
$mode = $body['mode'];
3539

@@ -45,7 +49,11 @@ public function new(Request $request) {
4549
return $response;
4650
}
4751

48-
public function game(GameContext $context) {
52+
public function game(Request $request, GameContext $context) {
53+
if ($request->getMethod() == 'OPTIONS') {
54+
return new Response(Response::HTTP_OK);
55+
}
56+
4957
$game = $context->getGame();
5058
$currentPlayer = $context->getPlayer();
5159
$player = $currentPlayer ?: $game->getPlayer1();
@@ -77,19 +85,25 @@ public function game(GameContext $context) {
7785
return $response;
7886
}
7987

80-
public function cancel(GameContext $context) {
88+
public function cancel(Request $request, GameContext $context) {
89+
if ($request->getMethod() == 'OPTIONS') {
90+
return new Response(Response::HTTP_OK);
91+
}
92+
8193
if ($context->getIsPlayer()) {
8294
$this->gameRepository->remove($context->getGame()->getId());
8395
return new Response(
8496
Response::HTTP_OK
8597
);
8698
}
87-
return new Response(
88-
Response::HTTP_INTERNAL_SERVER_ERROR
89-
);
99+
return new Response(Response::HTTP_INTERNAL_SERVER_ERROR);
90100
}
91101

92-
public function join(GameContext $context, TokenGenerator $tokenGenerator) {
102+
public function join(Request $request, GameContext $context, TokenGenerator $tokenGenerator) {
103+
if ($request->getMethod() == 'OPTIONS') {
104+
return new Response(Response::HTTP_OK);
105+
}
106+
93107
$game = $context->getGame();
94108

95109
if ($game->isFull()) {
@@ -113,7 +127,11 @@ public function join(GameContext $context, TokenGenerator $tokenGenerator) {
113127
return $response;
114128
}
115129

116-
public function move(GameContext $context, int $tile) {
130+
public function move(Request $request, GameContext $context, int $tile) {
131+
if ($request->getMethod() == 'OPTIONS') {
132+
return new Response(Response::HTTP_OK);
133+
}
134+
117135
$game = $context->getGame();
118136
$currentPlayer = $context->getPlayer();
119137

@@ -132,7 +150,11 @@ public function move(GameContext $context, int $tile) {
132150
return $response;
133151
}
134152

135-
public function games() {
153+
public function games(Request $request) {
154+
if ($request->getMethod() == 'OPTIONS') {
155+
return new Response(Response::HTTP_OK);
156+
}
157+
136158
$gameIds = $this->gameRepository->findOpenMultiplayerGames();
137159

138160
$response = new JsonResponse();

app/src/Security/CorsListener.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class CorsListener {
88
public function onKernelResponse(FilterResponseEvent $event) {
99
$responseHeaders = $event->getResponse()->headers;
1010

11-
$responseHeaders->set('Access-Control-Allow-Headers', 'origin, content-type, accept, credentials');
11+
$responseHeaders->set('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, Authorization');
1212
$responseHeaders->set('Access-Control-Allow-Origin', '*');
1313
$responseHeaders->set('Access-Control-Allow-Credentials', 'true');
1414
$responseHeaders->set('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, PATCH, OPTIONS');

0 commit comments

Comments
 (0)