Skip to content

Commit

Permalink
Move more code to dedicated listeners
Browse files Browse the repository at this point in the history
  • Loading branch information
flack committed May 17, 2024
1 parent d9761c4 commit 9b08f6b
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 42 deletions.
14 changes: 14 additions & 0 deletions lib/midcom/debug.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Monolog\Logger;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\TerminateEvent;

/**
* This is a debugger class.
Expand Down Expand Up @@ -39,6 +41,18 @@ public function __construct(Logger $logger)
$this->logger = $logger;
}

public function on_request(RequestEvent $event)
{
if ($event->isMainRequest()) {
$this->log("Start of MidCOM run " . $event->getRequest()->server->get('REQUEST_URI', ''));
}
}

public function on_terminate(TerminateEvent $event)
{
$this->log("End of MidCOM run: " . $event->getRequest()->server->get('REQUEST_URI'));
}

/**
* Converts MidCOM log levels to Monolog
*/
Expand Down
8 changes: 8 additions & 0 deletions lib/midcom/services/_sessioning.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEvent;

/**
* Base singleton class of the MidCOM sessioning service.
Expand Down Expand Up @@ -66,6 +67,13 @@ protected function prepare_storage(?Request $request, bool $cookie_secure)
]);
}

public function on_request(RequestEvent $event)
{
if ($event->isMainRequest()) {
$event->getRequest()->setSession($this);
}
}

/**
* {@inheritdoc}
*/
Expand Down
10 changes: 5 additions & 5 deletions lib/midcom/services/auth/main.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
* @license http://www.gnu.org/licenses/lgpl.html GNU Lesser General Public License
*/

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\RequestEvent;

/**
* Main Authentication/Authorization service class, it provides means to authenticate
Expand Down Expand Up @@ -93,8 +93,9 @@ public function __construct(midcom_services_auth_acl $acl, midcom_services_auth_
* Checks if the current authentication fronted has new credentials
* ready. If yes, it processes the login accordingly. Otherwise look for existing session
*/
public function check_for_login_session(Request $request) : ?midcom_response_relocate
public function check_for_login_session(RequestEvent $event)
{
$request = $event->getRequest();
// Try to start up a new session, this will authenticate as well.
if ($credentials = $this->frontend->read_login_data($request)) {
if (!$this->login($credentials['username'], $credentials['password'], $request->getClientIp())) {
Expand All @@ -103,7 +104,7 @@ public function check_for_login_session(Request $request) : ?midcom_response_rel
// Calling the failure function with the username as a parameter. No password sent to the user function for security reasons
call_user_func(midcom::get()->config->get('auth_failure_callback'), $credentials['username']);
}
return null;
return;
}
debug_add('Authentication was successful, we have a new login session now. Updating timestamps');

Expand All @@ -125,14 +126,13 @@ public function check_for_login_session(Request $request) : ?midcom_response_rel

// Now we check whether there is a success-relocate URL given somewhere.
if ($request->get('midcom_services_auth_login_success_url')) {
return new midcom_response_relocate($request->get('midcom_services_auth_login_success_url'));
$event->setResponse(new midcom_response_relocate($request->get('midcom_services_auth_login_success_url')));
}
}
// No new login detected, so we check if there is a running session.
elseif ($user = $this->backend->check_for_active_login_session($request)) {
$this->set_user($user);
}
return null;
}

private function set_user(midcom_core_user $user)
Expand Down
16 changes: 13 additions & 3 deletions src/midcom/bundle/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,9 @@ services:
class: midcom_services_auth
public: true
arguments: ['@auth.acl', '@auth.backend', '@auth.frontend']

tags:
- {name: 'kernel.event_listener', event: 'kernel.request', priority: 10, method: 'check_for_login_session'}

componentloader:
class: midcom_helper__componentloader
public: true
Expand All @@ -74,7 +76,10 @@ services:
cache.module.content:
class: midcom_services_cache_module_content
arguments: ['@config', '@cache.module.content.backend', '@cache.module.content_data.backend']

tags:
- {name: 'kernel.event_listener', event: 'kernel.request', priority: -1, method: 'on_request'}
- {name: 'kernel.event_listener', event: 'kernel.response', priority: -10, method: 'on_response'}

cache.module.content.backend:
class: Symfony\Component\Cache\Adapter\NullAdapter
factory: [midcom\bundle\dependencyInjection\cachePass, 'factory']
Expand Down Expand Up @@ -116,6 +121,9 @@ services:
class: midcom_debug
arguments: ['@logger']
public: true
tags:
- {name: 'kernel.event_listener', event: 'kernel.request', priority: 30, method: 'on_request'}
- {name: 'kernel.event_listener', event: 'kernel.terminate', priority: -30, method: 'on_terminate'}

head:
class: midcom_helper_head
Expand Down Expand Up @@ -153,7 +161,9 @@ services:
class: midcom_services__sessioning
arguments: ['@request_stack', '%midcom.auth_backend_simple_cookie_secure%']
public: true

tags:
- {name: 'kernel.event_listener', event: 'kernel.request', priority: 20, method: 'on_request'}

style.loader:
class: midcom\templating\loader
arguments: ['%kernel.project_dir%/var/themes/']
Expand Down
41 changes: 8 additions & 33 deletions src/midcom/httpkernel/subscriber.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,13 @@
use midcom_baseclasses_components_handler;
use Symfony\Component\HttpKernel\KernelEvents;
use midcom\routing\resolver;
use Symfony\Component\HttpFoundation\Request;
use midcom;
use midcom_connection;
use midcom_core_context;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Event\ControllerArgumentsEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\Event\TerminateEvent;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\HttpKernel\Event\ResponseEvent;
Expand All @@ -39,38 +37,20 @@ public static function getSubscribedEvents()
KernelEvents::CONTROLLER_ARGUMENTS => ['on_arguments'],
KernelEvents::VIEW => ['on_view'],
KernelEvents::RESPONSE => ['on_response'],
KernelEvents::EXCEPTION => ['on_exception'],
KernelEvents::TERMINATE => ['on_terminate']
KernelEvents::EXCEPTION => ['on_exception']
];
}

private function initialize(Request $request)
{
$midcom = midcom::get();
$midcom->debug->log("Start of MidCOM run " . $request->server->get('REQUEST_URI', ''));
$request->setSession($midcom->session);
if ($response = $midcom->auth->check_for_login_session($request)) {
return $response;
}

// Initialize Context Storage
$context = midcom_core_context::enter(midcom_connection::get_url('uri'));
$request->attributes->set('context', $context);

// Initialize the UI message stack from session
$midcom->uimessages->initialize($request);

$midcom->dispatcher->addListener(KernelEvents::REQUEST, [$midcom->cache->content, 'on_request'], 10);
$midcom->dispatcher->addListener(KernelEvents::RESPONSE, [$midcom->cache->content, 'on_response'], -10);
}

public function on_request(RequestEvent $event)
{
$request = $event->getRequest();
if ( $event->isMainRequest()
&& $response = $this->initialize($request)) {
$event->setResponse($response);
return;
if ($event->isMainRequest()) {
// Initialize Context Storage
$context = midcom_core_context::enter(midcom_connection::get_url('uri'));
$request->attributes->set('context', $context);

// Initialize the UI message stack from session
midcom::get()->uimessages->initialize($request);
}

$resolver = new resolver($request);
Expand Down Expand Up @@ -135,9 +115,4 @@ public function on_exception(ExceptionEvent $event)
$handler = new \midcom_exception_handler($event->getThrowable());
$event->setResponse($handler->render());
}

public function on_terminate(TerminateEvent $event)
{
debug_add("End of MidCOM run: " . $event->getRequest()->server->get('REQUEST_URI'));
}
}
5 changes: 4 additions & 1 deletion test/midcom/services/auth/mainTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
use midcom;
use midcom_core_context;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\HttpKernel\HttpKernelInterface;

/**
* OpenPSA testcase
Expand All @@ -34,7 +36,8 @@ public function test_check_for_login_session()
'password' => $user->extra,
'midcom_services_auth_frontend_form_submit' => ''
]);
$auth->check_for_login_session($request);
$event = new RequestEvent(midcom::get(), $request, HttpKernelInterface::MAIN_REQUEST);
$auth->check_for_login_session($event);
$this->assertEquals($user->guid, $auth->user->guid);
}

Expand Down

0 comments on commit 9b08f6b

Please sign in to comment.