98 lines
3.9 KiB
PHP
98 lines
3.9 KiB
PHP
<?php
|
|
|
|
use Picea\Picea;
|
|
use function DI\autowire, DI\create, DI\get;
|
|
|
|
use Lean\{ Lean, Routing, Event\RoutingCompileRoutes, Event\RoutingMapRoutes };
|
|
use Mcnd\Event;
|
|
use Taxus\Taxus;
|
|
use Storage\Session;
|
|
use Notes\Route\Attribute\Method\Route;
|
|
use Notes\Security\SecurityHandler;
|
|
use Psr\Container\ContainerInterface;
|
|
use Psr\Http\Message\{ ResponseInterface, ServerRequestInterface };
|
|
|
|
return [
|
|
Event\EventManager::class => autowire(Event\EventManager::class),
|
|
|
|
Event\EventMiddleware::class => function($c) {
|
|
$mw = new Event\EventMiddleware($c, $c->get(Event\EventManager::class));
|
|
$mw->fromAttributes($c->get(Notes\Event\EventFetcher::class));
|
|
$mw->fromDefinition($c->get(Event\EventDefinition::class));
|
|
|
|
return $mw;
|
|
},
|
|
|
|
Event\EventDefinition::class => function($c) {
|
|
$extension = $c->has(\Picea\Extension\UrlExtension::class) ? $c->get(\Picea\Extension\UrlExtension::class) : null;
|
|
|
|
return new Event\EventDefinition([
|
|
new class($extension) implements RoutingCompileRoutes {
|
|
public function __construct(
|
|
protected ? \Picea\Extension\UrlExtension $extension,
|
|
) {}
|
|
|
|
public function execute(Routing $routing, Route $attribute) : void
|
|
{
|
|
if (null !== ($name = $attribute->name ?? null)) {
|
|
$this->extension->registerRoute($name, $attribute->getRoute(), $attribute->class, $attribute->classMethod, (array) ( $attribute->method ?? $attribute->methods ));
|
|
}
|
|
}
|
|
},
|
|
|
|
new class() implements RoutingMapRoutes {
|
|
public function execute(Routing $routing, ContainerInterface $container, ServerRequestInterface & $request, Route $attribute) : void
|
|
{
|
|
$class = $attribute->class;
|
|
$method = $attribute->classMethod;
|
|
$object = $container->get($class);
|
|
|
|
$request = $request->withAttribute('lean.route', $attribute);
|
|
|
|
# Checking if user needs to be logged
|
|
if ( $container->has(SecurityHandler::class) ){
|
|
$securityHandler = $container->get(SecurityHandler::class);
|
|
|
|
if ( $redirect = $securityHandler->verify($class, $method) ) {
|
|
if ( empty($object->user) || ! $object->user->logged ) {
|
|
if ($container->has(Session::class)) {
|
|
$container->get(Session::class)->set('redirectedFrom', (string)$request->getUri());
|
|
}
|
|
|
|
$routing->response = $redirect;
|
|
return;
|
|
}
|
|
}
|
|
|
|
if ( $securityHandler->isLocked($class, $method) && $container->has(Taxus::class) && $container->has(SecurityHandler::class) ) {
|
|
if ( $forbidden = $container->get(SecurityHandler::class)->taxus($class, $method, $object->user ?? null) ) {
|
|
$routing->response = $forbidden;
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($container->has(Picea::class)) {
|
|
$container->get(Picea::class)->globalVariables['route'] = $attribute;
|
|
}
|
|
|
|
if ($container->has(Session::class)) {
|
|
$container->get(Session::class)->set("lean.route", $attribute);
|
|
}
|
|
}
|
|
},
|
|
]);
|
|
},
|
|
|
|
Notes\Event\EventFetcher::class => function($c) {
|
|
$fetcher = new Notes\Event\EventFetcher(null, null, $c->get('events.caching'));
|
|
|
|
$fetcher->setFolderList(array_map(function($item) {
|
|
return $item;
|
|
}, $c->get(Lean::class)->getEvents()));
|
|
|
|
return $fetcher;
|
|
},
|
|
];
|