diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2014-10-21 14:53:10 +0200 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2014-10-22 12:44:19 +0200 |
commit | 02c5933af8d185cbef4eacc7f732566767fb9b4c (patch) | |
tree | 50beb20460d2e58d58fbc7813cfd8ab9f6f333ff /lib/private | |
parent | cb366666003a6a40f075aceb2acbe05b37bd4363 (diff) | |
download | nextcloud-server-02c5933af8d185cbef4eacc7f732566767fb9b4c.tar.gz nextcloud-server-02c5933af8d185cbef4eacc7f732566767fb9b4c.zip |
introduce SessionMiddleWare to control session handling via an annotation
Diffstat (limited to 'lib/private')
-rw-r--r-- | lib/private/appframework/dependencyinjection/dicontainer.php | 13 | ||||
-rw-r--r-- | lib/private/appframework/middleware/sessionmiddleware.php | 70 |
2 files changed, 82 insertions, 1 deletions
diff --git a/lib/private/appframework/dependencyinjection/dicontainer.php b/lib/private/appframework/dependencyinjection/dicontainer.php index e7efa3fa219..f7fee347215 100644 --- a/lib/private/appframework/dependencyinjection/dicontainer.php +++ b/lib/private/appframework/dependencyinjection/dicontainer.php @@ -31,6 +31,7 @@ use OC\AppFramework\Core\API; use OC\AppFramework\Middleware\MiddlewareDispatcher; use OC\AppFramework\Middleware\Security\SecurityMiddleware; use OC\AppFramework\Middleware\Security\CORSMiddleware; +use OC\AppFramework\Middleware\SessionMiddleware; use OC\AppFramework\Utility\SimpleContainer; use OC\AppFramework\Utility\TimeFactory; use OC\AppFramework\Utility\ControllerMethodReflector; @@ -67,9 +68,10 @@ class DIContainer extends SimpleContainer implements IAppContainer{ */ $this['Request'] = $this->share(function($c) { /** @var $c SimpleContainer */ - /** @var $server IServerContainer */ + /** @var $server SimpleContainer */ $server = $c->query('ServerContainer'); $server->registerParameter('urlParams', $c['urlParams']); + /** @var $server IServerContainer */ return $server->getRequest(); }); @@ -115,6 +117,14 @@ class DIContainer extends SimpleContainer implements IAppContainer{ ); }); + $this['SessionMiddleware'] = $this->share(function($c) use ($app) { + return new SessionMiddleware( + $c['Request'], + $c['ControllerMethodReflector'], + $app->getServer()->getSession() + ); + }); + $middleWares = &$this->middleWares; $this['MiddlewareDispatcher'] = $this->share(function($c) use (&$middleWares) { $dispatcher = new MiddlewareDispatcher(); @@ -125,6 +135,7 @@ class DIContainer extends SimpleContainer implements IAppContainer{ $dispatcher->registerMiddleware($c[$middleWare]); } + $dispatcher->registerMiddleware($c['SessionMiddleware']); return $dispatcher; }); diff --git a/lib/private/appframework/middleware/sessionmiddleware.php b/lib/private/appframework/middleware/sessionmiddleware.php new file mode 100644 index 00000000000..d50880f3739 --- /dev/null +++ b/lib/private/appframework/middleware/sessionmiddleware.php @@ -0,0 +1,70 @@ +<?php +/** + * ownCloud - App Framework + * + * This file is licensed under the Affero General Public License version 3 or + * later. See the COPYING file. + * + * @author Thomas Müller <deepdiver@owncloud.com> + * @copyright Thomas Müller 2014 + */ + +namespace OC\AppFramework\Middleware; + +use OC\AppFramework\Utility\ControllerMethodReflector; +use OCP\IRequest; +use OCP\AppFramework\Http\Response; +use OCP\AppFramework\Middleware; +use OCP\ISession; + +class SessionMiddleware extends Middleware { + + /** + * @var IRequest + */ + private $request; + + /** + * @var ControllerMethodReflector + */ + private $reflector; + + /** + * @param IRequest $request + * @param ControllerMethodReflector $reflector + */ + public function __construct(IRequest $request, + ControllerMethodReflector $reflector, + ISession $session +) { + $this->request = $request; + $this->reflector = $reflector; + $this->session = $session; + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + */ + public function beforeController($controller, $methodName) { + $useSession = $this->reflector->hasAnnotation('UseSession'); + if (!$useSession) { + $this->session->close(); + } + } + + /** + * @param \OCP\AppFramework\Controller $controller + * @param string $methodName + * @param Response $response + * @return Response + */ + public function afterController($controller, $methodName, Response $response){ + $useSession = $this->reflector->hasAnnotation('UseSession'); + if ($useSession) { + $this->session->close(); + } + return $response; + } + +} |