Skip to content

Commit 9e355f4

Browse files
committed
Added listeners for authentication and data validation
1 parent e540e6a commit 9e355f4

File tree

3 files changed

+74
-3
lines changed

3 files changed

+74
-3
lines changed

Symfony/app/config/config.yml

+12-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ imports:
33
- { resource: security.yml }
44

55
framework:
6-
#esi: ~
7-
#translator: { fallback: "%locale%" }
86
secret: "%secret%"
97
router:
108
resource: "%kernel.root_dir%/config/routing.yml"
@@ -14,13 +12,24 @@ framework:
1412
validation: { enable_annotations: true }
1513
templating:
1614
engines: ['twig']
17-
#assets_version: SomeVersionScheme
1815
default_locale: "%locale%"
1916
trusted_proxies: ~
2017
session: ~
2118
fragments: ~
2219
http_method_override: true
2320

21+
# Services configuration
22+
services:
23+
kernel.listener.auth_listener:
24+
class: Codebender\BuilderBundle\EventListener\AuthListener
25+
tags:
26+
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 1 }
27+
arguments: [ "%authorizationKey%", "%version%" ]
28+
kernel.listener.data_validation_listener:
29+
class: Codebender\BuilderBundle\EventListener\DataValidationListener
30+
tags:
31+
- { name: kernel.event_listener, event: kernel.request, method: onKernelRequest, priority: 0 }
32+
2433
# Twig Configuration
2534
twig:
2635
debug: "%kernel.debug%"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<?php
2+
3+
namespace Codebender\BuilderBundle\EventListener;
4+
5+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
6+
use Symfony\Component\HttpFoundation\JsonResponse;
7+
8+
class AuthListener
9+
{
10+
protected $authorizationKey;
11+
12+
protected $apiVersion;
13+
14+
public function __construct($authorizationKey, $apiVersion)
15+
{
16+
$this->authorizationKey = $authorizationKey;
17+
$this->apiVersion = $apiVersion;
18+
}
19+
20+
public function onKernelRequest(GetResponseEvent $event)
21+
{
22+
$request = $event->getRequest();
23+
// don't execute on status action
24+
if ($request->get('_route') == 'CodebenderBuilderBundle_status_check') {
25+
return;
26+
}
27+
$providedAuthKey = $request->attributes->get('authKey');
28+
$providedApiVersion = $request->attributes->get('version');
29+
30+
if ($providedAuthKey !== $this->authorizationKey) {
31+
$event->setResponse(new JsonResponse(['success' => false, 'message' => 'Invalid authorization key.']));
32+
return;
33+
}
34+
35+
if ($providedApiVersion !== $this->apiVersion) {
36+
$event->setResponse(new JsonResponse(['success' => false, 'message' => 'Invalid api version.']));
37+
return;
38+
}
39+
}
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Codebender\BuilderBundle\EventListener;
4+
5+
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
6+
use Symfony\Component\HttpFoundation\JsonResponse;
7+
8+
class DataValidationListener
9+
{
10+
public function onKernelRequest(GetResponseEvent $event)
11+
{
12+
$request = $event->getRequest();
13+
// don't execute on status action
14+
if ($request->get('_route') == 'CodebenderBuilderBundle_status_check') {
15+
return;
16+
}
17+
$requestContent = json_decode($request->getContent(), true);
18+
if ($requestContent === null || json_last_error() != JSON_ERROR_NONE) {
19+
$event->setResponse(new JsonResponse(['success' => false, 'message' => 'Invalid input.']));
20+
}
21+
}
22+
}

0 commit comments

Comments
 (0)