Compare commits
	
		
			4 Commits
		
	
	
		
			af8b686e3b
			...
			1c2ce07179
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1c2ce07179 | ||
| 
						 | 
					7a48d707e0 | ||
| 
						 | 
					156defddc9 | ||
| 
						 | 
					42f33d9f13 | 
@ -2,20 +2,21 @@
 | 
			
		||||
 | 
			
		||||
use Lean\Factory\HttpFactoryInterface;
 | 
			
		||||
 | 
			
		||||
use Ulmus\User\{Authorize\HeaderAuthentication,
 | 
			
		||||
use Ulmus\User\{
 | 
			
		||||
    Authorize\HeaderAuthentication,
 | 
			
		||||
    Entity,
 | 
			
		||||
    Lib\Authenticate,
 | 
			
		||||
    Lib\Authorize,
 | 
			
		||||
    Middleware\AuthenticationMiddleware,
 | 
			
		||||
    Middleware\HeaderAuthenticationMiddleware,
 | 
			
		||||
    Middleware\PostRequestAuthenticationMiddleware,
 | 
			
		||||
    Authorize\PostRequestAuthentication};
 | 
			
		||||
 | 
			
		||||
use Picea\Picea;
 | 
			
		||||
    Authorize\PostRequestAuthentication
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
use Storage\{ Cookie, Session };
 | 
			
		||||
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
use Picea\Picea;
 | 
			
		||||
 | 
			
		||||
use function DI\{get, autowire, create};
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
@ -38,8 +39,9 @@ return [
 | 
			
		||||
    'authorize.error' => function(ContainerInterface $c) {
 | 
			
		||||
        return function(array $errorData) use ($c) {
 | 
			
		||||
            return $c->get(HttpFactoryInterface::class)::createJsonResponse($errorData + [
 | 
			
		||||
 | 
			
		||||
                'api.error' => "Authorization failed",
 | 
			
		||||
                'api.datetime' => (new \DateTime)->format(\DateTime::ISO8601),
 | 
			
		||||
                'api.datetime' => (new \DateTime)->format(\DateTime::ATOM),
 | 
			
		||||
            ], 403);
 | 
			
		||||
        };
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,6 @@
 | 
			
		||||
<?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;
 | 
			
		||||
@ -11,6 +9,9 @@ use Notes\Route\Attribute\Method\Route;
 | 
			
		||||
use Notes\Security\SecurityHandler;
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
use Psr\Http\Message\{ ResponseInterface, ServerRequestInterface };
 | 
			
		||||
use Ulmus\User\Entity\UserInterface;
 | 
			
		||||
 | 
			
		||||
use function DI\autowire, DI\create, DI\get;
 | 
			
		||||
 | 
			
		||||
return [
 | 
			
		||||
    Event\EventManager::class => autowire(Event\EventManager::class),
 | 
			
		||||
@ -25,6 +26,7 @@ return [
 | 
			
		||||
 | 
			
		||||
    Event\EventDefinition::class => function($c) {
 | 
			
		||||
        $extension = $c->has(\Picea\Extension\UrlExtension::class) ? $c->get(\Picea\Extension\UrlExtension::class) : null;
 | 
			
		||||
        $user = $c->get(UserInterface::class);
 | 
			
		||||
 | 
			
		||||
        return new Event\EventDefinition([
 | 
			
		||||
            new class($extension) implements RoutingCompileRoutes {
 | 
			
		||||
@ -40,7 +42,12 @@ return [
 | 
			
		||||
                }
 | 
			
		||||
            },
 | 
			
		||||
 | 
			
		||||
            new class() implements RoutingMapRoutes {
 | 
			
		||||
            new class($user) implements RoutingMapRoutes {
 | 
			
		||||
 | 
			
		||||
                public function __construct(
 | 
			
		||||
                    protected UserInterface $user
 | 
			
		||||
                ) {}
 | 
			
		||||
 | 
			
		||||
                public function execute(Routing $routing, ContainerInterface $container, ServerRequestInterface & $request, Route $attribute) : void
 | 
			
		||||
                {
 | 
			
		||||
                    $class = $attribute->class;
 | 
			
		||||
@ -54,7 +61,7 @@ return [
 | 
			
		||||
                        $securityHandler = $container->get(SecurityHandler::class);
 | 
			
		||||
 | 
			
		||||
                        if ( $redirect = $securityHandler->verify($class, $method) ) {
 | 
			
		||||
                            if ( empty($object->user) || ! $object->user->logged ) {
 | 
			
		||||
                            if (! $this->user->loggedIn() ) {
 | 
			
		||||
                                if ($container->has(Session::class)) {
 | 
			
		||||
                                    $container->get(Session::class)->set('redirectedFrom', (string)$request->getUri());
 | 
			
		||||
                                }
 | 
			
		||||
@ -64,8 +71,8 @@ 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) ) {
 | 
			
		||||
                        if ( $securityHandler->isLocked($class, $method) && $container->has(Taxus::class)) {
 | 
			
		||||
                            if ( $forbidden = $securityHandler->taxus($class, $method, $this->user) ) {
 | 
			
		||||
                                $routing->response = $forbidden;
 | 
			
		||||
 | 
			
		||||
                                return;
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,9 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use Lean\ApplicationStrategy\{ ThrowableHandler, ThrowableHandlerInterface, NotFoundDecoratorInterface, NotFoundDecorator };
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use Laminas\{ Diactoros\ServerRequestFactory, HttpHandlerRunner\Emitter\EmitterInterface, HttpHandlerRunner\Emitter\SapiEmitter };
 | 
			
		||||
use Lean\Factory\{ HttpFactory, HttpFactoryInterface };
 | 
			
		||||
@ -29,5 +32,8 @@ return [
 | 
			
		||||
 | 
			
		||||
    'error.500' => function(ContainerInterface $c, Picea $picea) {
 | 
			
		||||
        return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml("lean/error/500", []), 500);
 | 
			
		||||
    }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    ThrowableHandlerInterface::class => autowire(ThrowableHandler::class),
 | 
			
		||||
    NotFoundDecoratorInterface::class => autowire(NotFoundDecorator::class),
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
@ -11,8 +11,12 @@ return [
 | 
			
		||||
    ]),
 | 
			
		||||
 | 
			
		||||
    AdapterProxy::class => function (Psr\Container\ContainerInterface $c) {
 | 
			
		||||
        return new AdapterProxy(
 | 
			
		||||
            $c->get(ConnectionAdapter::class),
 | 
			
		||||
        );
 | 
			
		||||
        $proxy = new AdapterProxy();
 | 
			
		||||
        
 | 
			
		||||
        $autoload = $c->get(\Lean\Lean::class)->getConnectionAdapters();
 | 
			
		||||
 | 
			
		||||
        $proxy->push($autoload);
 | 
			
		||||
 | 
			
		||||
        return $proxy;
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
@ -66,20 +66,14 @@ return [
 | 
			
		||||
        'routes' => [],
 | 
			
		||||
 | 
			
		||||
        'cronard' => [],
 | 
			
		||||
 | 
			
		||||
        'taxus' => [
 | 
			
		||||
            'is_dev' => [ ' dev' => "Is a developper of this application or has the same rights" ],
 | 
			
		||||
            'is_admin' => [ 'admin' => "Can manage almost everything in this application."],
 | 
			
		||||
            'is_moderator' => [ 'moderator' => "Can moderate this application."],
 | 
			
		||||
            'is_user' => [ 'user' => "Is an authenticated user."],
 | 
			
		||||
            'is_anonymous' => [ 'anonymous' => "Is an anonymous user."],
 | 
			
		||||
        ],
 | 
			
		||||
    ],
 | 
			
		||||
 | 
			
		||||
    'lean.autoload' => add([
 | 
			
		||||
        Lean::class,
 | 
			
		||||
    ]),
 | 
			
		||||
 | 
			
		||||
    \Lean\Factory\HttpFactoryInterface::class => autowire(\Lean\Factory\HttpFactory::class),
 | 
			
		||||
 | 
			
		||||
    Lean::class => autowire(Lean::class),
 | 
			
		||||
 | 
			
		||||
    JavascriptMiddleware::class => create(JavascriptMiddleware::class),
 | 
			
		||||
 | 
			
		||||
@ -22,6 +22,8 @@ class Application
 | 
			
		||||
 | 
			
		||||
    public array $entities;
 | 
			
		||||
 | 
			
		||||
    public array $connectionAdapters;
 | 
			
		||||
 | 
			
		||||
    public array $events;
 | 
			
		||||
 | 
			
		||||
    public array $tellJson;
 | 
			
		||||
@ -68,6 +70,7 @@ class Application
 | 
			
		||||
        if (is_array($ulmus = $this->data['ulmus'] ?? false)) {
 | 
			
		||||
            if ($ulmus['entities'] ?? false) {
 | 
			
		||||
                $this->entities = $ulmus['entities'];
 | 
			
		||||
                $this->connectionAdapters = $ulmus['adapters'] ?? [];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -3,63 +3,33 @@
 | 
			
		||||
namespace Lean;
 | 
			
		||||
 | 
			
		||||
use League\Route\Strategy;
 | 
			
		||||
 | 
			
		||||
use League\Route\Http\Exception\NotFoundException;
 | 
			
		||||
use Picea\Asset\Asset;
 | 
			
		||||
use Lean\ApplicationStrategy\NotFoundDecoratorInterface;
 | 
			
		||||
use Lean\ApplicationStrategy\ThrowableHandlerInterface;
 | 
			
		||||
use Lean\Factory\HttpFactoryInterface;
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use Psr\Http\Server\MiddlewareInterface;
 | 
			
		||||
use Picea\Picea;
 | 
			
		||||
use Psr\Http\Server\RequestHandlerInterface;
 | 
			
		||||
use function DI\get;
 | 
			
		||||
 | 
			
		||||
class ApplicationStrategy extends Strategy\ApplicationStrategy {
 | 
			
		||||
 | 
			
		||||
    public const ASSET_TRIGGER_UPDATE = [
 | 
			
		||||
        "js", "mjs", "manifest", "webmanifest", "css", "png", "ico",
 | 
			
		||||
        "jpg", "jpeg", "gif", "webp", "woff", "woff2", "eot", "svg",
 | 
			
		||||
        "ttf"
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected Picea $picea,
 | 
			
		||||
        protected ContainerInterface $di,
 | 
			
		||||
    ) {}
 | 
			
		||||
        ContainerInterface $di,
 | 
			
		||||
    ) {
 | 
			
		||||
        $this->setContainer($di);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getNotFoundDecorator(NotFoundException $exception): MiddlewareInterface
 | 
			
		||||
    {
 | 
			
		||||
        return new class($this->picea, $this->di) implements MiddlewareInterface {
 | 
			
		||||
        return $this->getContainer()->get(NotFoundDecoratorInterface::class);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
            public function __construct(
 | 
			
		||||
                protected Picea $picea,
 | 
			
		||||
                protected ContainerInterface $di,
 | 
			
		||||
            ) { }
 | 
			
		||||
    public function getThrowableHandler(): MiddlewareInterface
 | 
			
		||||
    {
 | 
			
		||||
        return $this->getContainer()->get(ThrowableHandlerInterface::class);
 | 
			
		||||
 | 
			
		||||
            public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
 | 
			
		||||
            {
 | 
			
		||||
                if (php_sapi_name() !== 'cli' and ! defined('STDIN'))  {
 | 
			
		||||
                    return $this->throw404($request);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return $handler->handle($request);;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            public function throw404(ServerRequestInterface $request) : ResponseInterface
 | 
			
		||||
            {
 | 
			
		||||
                if ( getenv('DEBUG') && $this->di->has(\Picea\Asset\Asset::class) ) {
 | 
			
		||||
                    $params = $request->getServerParams();
 | 
			
		||||
 | 
			
		||||
                    $scpName = basename(explode('?', $params['REQUEST_URI'] ?? "", 2)[0]);
 | 
			
		||||
                    list(, $ext) = array_pad(explode('.', $scpName), 2, null);
 | 
			
		||||
 | 
			
		||||
                    if ($ext && in_array($ext, ApplicationStrategy::ASSET_TRIGGER_UPDATE)) {
 | 
			
		||||
                        $this->di->get(\Picea\Asset\Asset::class)->launchInstall();
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                return $this->di->get('error.404');
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										62
									
								
								src/ApplicationStrategy/NotFoundDecorator.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								src/ApplicationStrategy/NotFoundDecorator.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,62 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Lean\ApplicationStrategy;
 | 
			
		||||
 | 
			
		||||
use DI\Attribute\Inject;
 | 
			
		||||
use Lean\ApplicationStrategy;
 | 
			
		||||
use Lean\Factory\HttpFactoryInterface;
 | 
			
		||||
use Picea\Picea;
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use Psr\Http\Server\RequestHandlerInterface;
 | 
			
		||||
 | 
			
		||||
class NotFoundDecorator implements NotFoundDecoratorInterface
 | 
			
		||||
{
 | 
			
		||||
    #[Inject]
 | 
			
		||||
    protected Picea $picea;
 | 
			
		||||
 | 
			
		||||
    #[Inject]
 | 
			
		||||
    protected ContainerInterface $container;
 | 
			
		||||
 | 
			
		||||
    #[Inject]
 | 
			
		||||
    protected HttpFactoryInterface $httpFactory;
 | 
			
		||||
 | 
			
		||||
    public const ASSET_TRIGGER_UPDATE = [
 | 
			
		||||
        "js", "mjs", "manifest", "webmanifest", "css", "png", "ico",
 | 
			
		||||
        "jpg", "jpeg", "gif", "webp", "woff", "woff2", "eot", "svg",
 | 
			
		||||
        "ttf"
 | 
			
		||||
    ];
 | 
			
		||||
 | 
			
		||||
    public function process(ServerRequestInterface $request, RequestHandlerInterface $handler): ResponseInterface
 | 
			
		||||
    {
 | 
			
		||||
        if (php_sapi_name() !== 'cli' and ! defined('STDIN'))  {
 | 
			
		||||
            return $this->throw404($request);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $handler->handle($request);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function throw404(ServerRequestInterface $request) : ResponseInterface
 | 
			
		||||
    {
 | 
			
		||||
        return $this->checkAssetTrigger($request) ?: $this->httpFactory->createHtmlResponse($this->picea->renderHtml("lean/error/404", [], $this), 404);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function checkAssetTrigger(ServerRequestInterface $request) : false|ResponseInterface
 | 
			
		||||
    {
 | 
			
		||||
        if (getenv('DEBUG') && $this->container->has(\Picea\Asset\Asset::class)) {
 | 
			
		||||
            $params = $request->getServerParams();
 | 
			
		||||
 | 
			
		||||
            $scpName = basename(explode('?', $params['REQUEST_URI'] ?? "", 2)[0]);
 | 
			
		||||
            list(, $ext) = array_pad(explode('.', $scpName), 2, null);
 | 
			
		||||
 | 
			
		||||
            if ($ext && in_array($ext, static::ASSET_TRIGGER_UPDATE)) {
 | 
			
		||||
                $this->container->get(\Picea\Asset\Asset::class)->launchInstall();
 | 
			
		||||
 | 
			
		||||
                return $this->httpFactory->createTextResponse("Asset updated");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								src/ApplicationStrategy/NotFoundDecoratorInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/ApplicationStrategy/NotFoundDecoratorInterface.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Lean\ApplicationStrategy;
 | 
			
		||||
 | 
			
		||||
use Psr\Http\Server\MiddlewareInterface;
 | 
			
		||||
 | 
			
		||||
interface NotFoundDecoratorInterface extends MiddlewareInterface
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								src/ApplicationStrategy/ThrowableHandler.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								src/ApplicationStrategy/ThrowableHandler.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,22 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Lean\ApplicationStrategy;
 | 
			
		||||
 | 
			
		||||
use Psr\Http\Message\ResponseInterface;
 | 
			
		||||
use Psr\Http\Message\ServerRequestInterface;
 | 
			
		||||
use Psr\Http\Server\MiddlewareInterface;
 | 
			
		||||
use Psr\Http\Server\RequestHandlerInterface;
 | 
			
		||||
 | 
			
		||||
class ThrowableHandler implements ThrowableHandlerInterface
 | 
			
		||||
{
 | 
			
		||||
    public function process(
 | 
			
		||||
        ServerRequestInterface $request,
 | 
			
		||||
        RequestHandlerInterface $handler
 | 
			
		||||
    ): ResponseInterface {
 | 
			
		||||
        try {
 | 
			
		||||
            return $handler->handle($request);
 | 
			
		||||
        } catch (Throwable $e) {
 | 
			
		||||
            throw $e;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										10
									
								
								src/ApplicationStrategy/ThrowableHandlerInterface.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								src/ApplicationStrategy/ThrowableHandlerInterface.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Lean\ApplicationStrategy;
 | 
			
		||||
 | 
			
		||||
use Psr\Http\Server\MiddlewareInterface;
 | 
			
		||||
 | 
			
		||||
interface ThrowableHandlerInterface extends MiddlewareInterface
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -20,8 +20,8 @@ use function file_get_contents;
 | 
			
		||||
#[Route(method: [ "GET", "POST" ])]
 | 
			
		||||
trait ControllerTrait {
 | 
			
		||||
 | 
			
		||||
    #[Inject]
 | 
			
		||||
    public \Notes\Breadcrumb\Breadcrumb $breadcrumb;
 | 
			
		||||
    ##[Inject]
 | 
			
		||||
   # public \Notes\Breadcrumb\Breadcrumb $breadcrumb;
 | 
			
		||||
 | 
			
		||||
    #[Inject]
 | 
			
		||||
    public Session $session;
 | 
			
		||||
@ -147,13 +147,15 @@ trait ControllerTrait {
 | 
			
		||||
    #[Ignore]
 | 
			
		||||
    public function renderCLI(ServerRequestInterface $request, mixed $data) : ResponseInterface
 | 
			
		||||
    {
 | 
			
		||||
        if ($data instanceof \JsonSerializable ) {
 | 
			
		||||
            return $this->renderJson(
 | 
			
		||||
                $data
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        elseif ( is_array($data) ) {
 | 
			
		||||
            var_export($data);
 | 
			
		||||
        if (! $data instanceof \Stringable) {
 | 
			
		||||
            if ($data instanceof \JsonSerializable) {
 | 
			
		||||
                return $this->renderJson(
 | 
			
		||||
                    $data
 | 
			
		||||
                );
 | 
			
		||||
            }
 | 
			
		||||
            elseif (is_iterable($data) || is_object($data)) {
 | 
			
		||||
                return $this->renderText(var_export($data, true));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this->renderText(
 | 
			
		||||
 | 
			
		||||
@ -6,6 +6,7 @@ use Lean\Routing;
 | 
			
		||||
use Notes\Route\Attribute\Method\Route;
 | 
			
		||||
use Psr\Container\ContainerInterface;
 | 
			
		||||
use Psr\Http\Message\{ ResponseInterface, ServerRequestInterface };
 | 
			
		||||
use Ulmus\User\Entity\UserInterface;
 | 
			
		||||
 | 
			
		||||
interface RoutingMapRoutes {
 | 
			
		||||
    public function execute(Routing $routing, ContainerInterface $container, ServerRequestInterface & $request, Route $attribute) : void;
 | 
			
		||||
 | 
			
		||||
@ -73,7 +73,9 @@ class Kernel {
 | 
			
		||||
                $path = getenv("PROJECT_PATH") . DIRECTORY_SEPARATOR . getenv($envkey);
 | 
			
		||||
 | 
			
		||||
                if (getenv('DEBUG') && ! file_exists($path)) {
 | 
			
		||||
                    mkdir($path, 0755, true);
 | 
			
		||||
                    if (false === mkdir($path, 0755, true)) {
 | 
			
		||||
                        throw new \Exception(sprintf("Folder '%s' could not be created", $path));
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                static::putenv($name, realpath($path));
 | 
			
		||||
@ -155,6 +157,7 @@ class Kernel {
 | 
			
		||||
 | 
			
		||||
        # Must be removed from KERNEL !
 | 
			
		||||
        $this->container->has('ulmus.caching') and ( Ulmus::$cache = $this->container->get('ulmus.caching') );
 | 
			
		||||
        # $this->container->has(AdapterProxy::class) and ( $ )
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								src/Lean.php
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								src/Lean.php
									
									
									
									
									
								
							@ -77,37 +77,42 @@ class Lean
 | 
			
		||||
 | 
			
		||||
    public function getRoutable() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->routes ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->routes ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getCronard() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->cronard ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->cronard ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getCLI() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->cli ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->cli ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getEvents() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->events ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->events ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getTaxusPrivileges() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->taxus ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->taxus ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getEntities() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn($app) => $app->entities ?? [], $this->applications));
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->entities ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getConnectionAdapters() : array
 | 
			
		||||
    {
 | 
			
		||||
        return array_merge(...array_map(fn(Application $app) => $app->connectionAdapters ?? [], $this->applications));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function getViewPaths() : array
 | 
			
		||||
    {
 | 
			
		||||
        $list = array_merge(...array_map(fn($app) => $app->views ?? [], $this->applications));
 | 
			
		||||
        $list = array_merge(...array_map(fn(Application $app) => $app->views ?? [], $this->applications));
 | 
			
		||||
 | 
			
		||||
        $this->verifyPathList($list);
 | 
			
		||||
 | 
			
		||||
@ -118,7 +123,7 @@ class Lean
 | 
			
		||||
 | 
			
		||||
    public function getAssetPaths() : array
 | 
			
		||||
    {
 | 
			
		||||
        $list = array_merge(...array_map(fn($app) => $app->piceaAssets ?? [], $this->applications));
 | 
			
		||||
        $list = array_merge(...array_map(fn(Application $app) => $app->piceaAssets ?? [], $this->applications));
 | 
			
		||||
 | 
			
		||||
        $this->verifyPathList($list);
 | 
			
		||||
 | 
			
		||||
@ -140,11 +145,11 @@ class Lean
 | 
			
		||||
    {
 | 
			
		||||
        switch($reader) {
 | 
			
		||||
            case "php":
 | 
			
		||||
                $list = array_merge(...array_map(fn($app) => $app->tellPhp ?? [], $this->applications));
 | 
			
		||||
                $list = array_merge(...array_map(fn(Application $app) => $app->tellPhp ?? [], $this->applications));
 | 
			
		||||
                break;
 | 
			
		||||
 | 
			
		||||
            case "json":
 | 
			
		||||
                $list = array_merge(...array_map(fn($app) => $app->tellJson ?? [], $this->applications));
 | 
			
		||||
                $list = array_merge(...array_map(fn(Application $app) => $app->tellJson ?? [], $this->applications));
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user