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

Commit 7d9859f

Browse files
committed
Allow preflight requests
1 parent 51711db commit 7d9859f

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
@@ -31,6 +31,10 @@ public function __construct(GameApi $gameApi, GameRepository $gameRepository, En
3131
}
3232

3333
public function new(Request $request) {
34+
if ($request->getMethod() == 'OPTIONS') {
35+
return new Response(Response::HTTP_OK);
36+
}
37+
3438
$body = json_decode($request->getContent(), true);
3539
$apiResponse = $this->api->new(self::DEFAULT_SIZE, $body['mode'] === 'multi');
3640
$this->em->persist($apiResponse['player']);
@@ -43,7 +47,11 @@ public function new(Request $request) {
4347
]);
4448
}
4549

46-
public function game(GameContext $context) {
50+
public function game(Request $request, GameContext $context) {
51+
if ($request->getMethod() == 'OPTIONS') {
52+
return new Response(Response::HTTP_OK);
53+
}
54+
4755
$game = $context->getGame();
4856
$currentPlayer = $context->getPlayer();
4957
$player = $currentPlayer ?: $game->getPlayer1();
@@ -71,7 +79,11 @@ public function game(GameContext $context) {
7179
]);
7280
}
7381

74-
public function cancel(GameContext $context) {
82+
public function cancel(Request $request, GameContext $context) {
83+
if ($request->getMethod() == 'OPTIONS') {
84+
return new Response(Response::HTTP_OK);
85+
}
86+
7587
if ($context->getIsPlayer()) {
7688
$this->em->remove($context->getGame());
7789
$this->em->flush();
@@ -80,12 +92,14 @@ public function cancel(GameContext $context) {
8092
Response::HTTP_OK
8193
);
8294
}
83-
return new Response(
84-
Response::HTTP_INTERNAL_SERVER_ERROR
85-
);
95+
return new Response(Response::HTTP_INTERNAL_SERVER_ERROR);
8696
}
8797

88-
public function join(GameContext $context, TokenGenerator $tokenGenerator) {
98+
public function join(Request $request, GameContext $context, TokenGenerator $tokenGenerator) {
99+
if ($request->getMethod() == 'OPTIONS') {
100+
return new Response(Response::HTTP_OK);
101+
}
102+
89103
$game = $context->getGame();
90104

91105
if ($game->isFull()) {
@@ -110,7 +124,11 @@ public function join(GameContext $context, TokenGenerator $tokenGenerator) {
110124
]);
111125
}
112126

113-
public function move(GameContext $context, int $tile) {
127+
public function move(Request $request, GameContext $context, int $tile) {
128+
if ($request->getMethod() == 'OPTIONS') {
129+
return new Response(Response::HTTP_OK);
130+
}
131+
114132
$game = $context->getGame();
115133
$currentPlayer = $context->getPlayer();
116134

@@ -128,7 +146,11 @@ public function move(GameContext $context, int $tile) {
128146
]);
129147
}
130148

131-
public function games() {
149+
public function games(Request $request) {
150+
if ($request->getMethod() == 'OPTIONS') {
151+
return new Response(Response::HTTP_OK);
152+
}
153+
132154
$gameIds = $this->gameRepository->findOpenMultiplayerGames();
133155

134156
return 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)