mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-24 10:23:17 +00:00
Remove OAuthListener Response Listener after processing
This commit is contained in:
@@ -24,7 +24,6 @@ use Alchemy\Phrasea\Model\Manipulator\ApiOauthTokenManipulator;
|
|||||||
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
use Symfony\Component\HttpFoundation\Request;
|
use Symfony\Component\HttpFoundation\Request;
|
||||||
use Symfony\Component\HttpFoundation\Session\Session;
|
use Symfony\Component\HttpFoundation\Session\Session;
|
||||||
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
|
|
||||||
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
|
||||||
use Symfony\Component\HttpKernel\KernelEvents;
|
use Symfony\Component\HttpKernel\KernelEvents;
|
||||||
|
|
||||||
@@ -135,39 +134,9 @@ class OAuthListener
|
|||||||
|
|
||||||
private function registerClosingAccountCallback(EventDispatcherInterface $dispatcher, Application $app)
|
private function registerClosingAccountCallback(EventDispatcherInterface $dispatcher, Application $app)
|
||||||
{
|
{
|
||||||
$dispatcher->addListener(KernelEvents::RESPONSE, function (FilterResponseEvent $event) use ($app) {
|
$dispatcher->addListener(KernelEvents::RESPONSE, new OAuthResponseListener($app), -20);
|
||||||
$request = $event->getRequest();
|
|
||||||
$response = $event->getResponse();
|
|
||||||
|
|
||||||
$session = $this->getSession($app);
|
|
||||||
/** @var ApiOauthToken $token */
|
|
||||||
$token = $session->get('token');
|
|
||||||
$this->getApiLogManipulator($app)->create($token->getAccount(), $request, $response);
|
|
||||||
$this->getApiOAuthTokenManipulator($app)->setLastUsed($token, new \DateTime());
|
|
||||||
$session->set('token', null);
|
|
||||||
if (null !== $this->getAuthenticator($app)->getUser()) {
|
|
||||||
$this->getAuthenticator($app)->closeAccount();
|
|
||||||
}
|
|
||||||
}, -20);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Application $app
|
|
||||||
* @return ApiLogManipulator
|
|
||||||
*/
|
|
||||||
private function getApiLogManipulator(Application $app)
|
|
||||||
{
|
|
||||||
return $app['manipulator.api-log'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Application $app
|
|
||||||
* @return ApiOauthTokenManipulator
|
|
||||||
*/
|
|
||||||
private function getApiOAuthTokenManipulator(Application $app)
|
|
||||||
{
|
|
||||||
return $app['manipulator.api-oauth-token'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Application $app
|
* @param Application $app
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
<?php
|
||||||
|
/*
|
||||||
|
* This file is part of Phraseanet
|
||||||
|
*
|
||||||
|
* (c) 2005-2015 Alchemy
|
||||||
|
*
|
||||||
|
* For the full copyright and license information, please view the LICENSE
|
||||||
|
* file that was distributed with this source code.
|
||||||
|
*/
|
||||||
|
namespace Alchemy\Phrasea\Core\Event\Listener;
|
||||||
|
|
||||||
|
use Alchemy\Phrasea\Application;
|
||||||
|
use Alchemy\Phrasea\Authentication\Authenticator;
|
||||||
|
use Alchemy\Phrasea\Model\Entities\ApiOauthToken;
|
||||||
|
use Alchemy\Phrasea\Model\Manipulator\ApiLogManipulator;
|
||||||
|
use Alchemy\Phrasea\Model\Manipulator\ApiOauthTokenManipulator;
|
||||||
|
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
|
||||||
|
use Symfony\Component\HttpFoundation\Session\Session;
|
||||||
|
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
|
||||||
|
|
||||||
|
class OAuthResponseListener
|
||||||
|
{
|
||||||
|
/** @var Application */
|
||||||
|
private $app;
|
||||||
|
|
||||||
|
public function __construct(Application $app)
|
||||||
|
{
|
||||||
|
$this->app = $app;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function __invoke(FilterResponseEvent $event, $eventName, EventDispatcherInterface $dispatcher)
|
||||||
|
{
|
||||||
|
$request = $event->getRequest();
|
||||||
|
$response = $event->getResponse();
|
||||||
|
|
||||||
|
$session = $this->getSession();
|
||||||
|
/** @var ApiOauthToken $token */
|
||||||
|
$token = $session->get('token');
|
||||||
|
$this->getApiLogManipulator()->create($token->getAccount(), $request, $response);
|
||||||
|
$this->getApiOAuthTokenManipulator()->setLastUsed($token, new \DateTime());
|
||||||
|
$session->set('token', null);
|
||||||
|
if (null !== $this->getAuthenticator()->getUser()) {
|
||||||
|
$this->getAuthenticator()->closeAccount();
|
||||||
|
}
|
||||||
|
|
||||||
|
$dispatcher->removeListener($eventName, $this);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return ApiLogManipulator
|
||||||
|
*/
|
||||||
|
private function getApiLogManipulator()
|
||||||
|
{
|
||||||
|
return $this->app['manipulator.api-log'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return ApiOauthTokenManipulator
|
||||||
|
*/
|
||||||
|
private function getApiOAuthTokenManipulator()
|
||||||
|
{
|
||||||
|
return $this->app['manipulator.api-oauth-token'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Session
|
||||||
|
*/
|
||||||
|
private function getSession()
|
||||||
|
{
|
||||||
|
return $this->app['session'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return Authenticator
|
||||||
|
*/
|
||||||
|
private function getAuthenticator()
|
||||||
|
{
|
||||||
|
return $this->app['authentication'];
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -315,32 +315,34 @@ abstract class ApiTestCase extends \PhraseanetWebTestCase
|
|||||||
{
|
{
|
||||||
$this->setToken($this->userAccessToken);
|
$this->setToken($this->userAccessToken);
|
||||||
|
|
||||||
self::$DI['client']->request('GET', '/api/v1/monitor/tasks/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client = $this->getClient();
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
|
||||||
|
$client->request('GET', '/api/v1/monitor/tasks/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('GET', '/api/v1/monitor/scheduler/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('GET', '/api/v1/monitor/scheduler/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('GET', '/api/v1/monitor/task/1/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('GET', '/api/v1/monitor/task/1/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('POST', '/api/v1/monitor/task/1/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('POST', '/api/v1/monitor/task/1/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('POST', '/api/v1/monitor/task/1/start/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('POST', '/api/v1/monitor/task/1/start/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('POST', '/api/v1/monitor/task/1/stop/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('POST', '/api/v1/monitor/task/1/stop/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
|
|
||||||
self::$DI['client']->request('GET', '/api/v1/monitor/phraseanet/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
$client->request('GET', '/api/v1/monitor/phraseanet/', $this->getParameters(), [], ['HTTP_Accept' => $this->getAcceptMimeType()]);
|
||||||
$content = $this->unserialize(self::$DI['client']->getResponse()->getContent());
|
$content = $this->unserialize($client->getResponse()->getContent());
|
||||||
$this->assertEquals(401, $content['meta']['http_code']);
|
$this->assertEquals(401, $content['meta']['http_code']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user