Compare commits
3 Commits
ulmus-user
...
master
Author | SHA1 | Date | |
---|---|---|---|
74a56bd72f | |||
990f57b94e | |||
dc52c88c03 |
@ -1,45 +1,34 @@
|
||||
<?php
|
||||
|
||||
use Lean\Factory\HttpFactoryInterface;
|
||||
|
||||
use Ulmus\User\{
|
||||
Authorize\HeaderAuthentication,
|
||||
Entity,
|
||||
use Ulmus\User\{Entity,
|
||||
Lib\Authenticate,
|
||||
Lib\Authorize,
|
||||
Middleware\AuthenticationMiddleware,
|
||||
Middleware\HeaderAuthenticationMiddleware,
|
||||
Middleware\PostRequestAuthenticationMiddleware,
|
||||
Authorize\PostRequestAuthentication
|
||||
};
|
||||
Authorize\PostRequestAuthentication};
|
||||
|
||||
use Storage\{ Cookie, Session };
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Picea\Picea;
|
||||
|
||||
use function DI\{get, autowire, create};
|
||||
use Storage\{ Cookie, Session };
|
||||
|
||||
use function DI\{get, create};
|
||||
|
||||
return [
|
||||
Authorize::class => create(Authorize::class)->constructor(get(Entity\UserInterface::class), get(Session::class), get(Cookie::class), get('authentication.method')),
|
||||
|
||||
Authenticate::class => create(Authenticate::class)->constructor(get(Entity\UserInterface::class), get(Session::class), get(Cookie::class), get('authentication.method')),
|
||||
|
||||
AuthenticationMiddleware::class => create(AuthenticationMiddleware::class)->constructor(get(Authorize::class), get('authorize.error')),
|
||||
Authorize::class => create(Authorize::class)->constructor(get(Entity\UserInterface::class), get(Session::class), get(Cookie::class), get('authentication.method')),
|
||||
|
||||
HeaderAuthentication::class => autowire(HeaderAuthentication::class),
|
||||
HeaderAuthenticationMiddleware::class => create(HeaderAuthenticationMiddleware::class)->constructor(get(Authorize::class), get(Entity\UserInterface::class), get('authorize.error')),
|
||||
|
||||
HeaderAuthenticationMiddleware::class => create(HeaderAuthenticationMiddleware::class)->constructor(get(HeaderAuthentication::class)),
|
||||
PostRequestAuthentication::class => create(PostRequestAuthentication::class)->constructor(get(Authenticate::class), "email", "email", "password"),
|
||||
|
||||
PostRequestAuthentication::class => create(PostRequestAuthentication::class)->constructor("email", "email", "password"),
|
||||
|
||||
PostRequestAuthenticationMiddleware::class => create(PostRequestAuthenticationMiddleware::class)->constructor(get(PostRequestAuthentication::class)),
|
||||
PostRequestAuthenticationMiddleware::class => create(PostRequestAuthenticationMiddleware::class)->constructor(get(Entity\UserInterface::class), get('authentication.error'), get(PostRequestAuthentication::class)),
|
||||
|
||||
'authentication.method' => null,
|
||||
|
||||
'authorize.error' => function(ContainerInterface $c) {
|
||||
'authorize.error' => function($c) {
|
||||
return function(array $errorData) use ($c) {
|
||||
return $c->get(HttpFactoryInterface::class)::createJsonResponse($errorData + [
|
||||
|
||||
return $c->get(\Lean\Factory\HttpFactoryInterface::class)::createJsonResponse($errorData + [
|
||||
'api.error' => "Authorization failed",
|
||||
'api.datetime' => (new \DateTime)->format(\DateTime::ATOM),
|
||||
], 403);
|
||||
@ -47,8 +36,8 @@ return [
|
||||
},
|
||||
|
||||
'authentication.error' => function($c, Picea $picea) {
|
||||
return function($message) use ($c, $picea) {
|
||||
return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml('lean/error/500', [
|
||||
return function($message) use ($picea, $c) {
|
||||
return $c->get(\Lean\Factory\HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml('lean/error/500', [
|
||||
'title' => "Authentication failed",
|
||||
'subtitle' => "",
|
||||
'message' => $message,
|
||||
|
@ -1,16 +1,12 @@
|
||||
<?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 };
|
||||
use Picea\Picea;
|
||||
|
||||
use Lean\ApplicationStrategy\{ ThrowableHandler, ThrowableHandlerInterface, NotFoundDecoratorInterface, NotFoundDecorator, MethodNotAllowedInterface, };
|
||||
use function DI\autowire, DI\create, DI\get;
|
||||
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
use Laminas\{ Diactoros\ServerRequestFactory, HttpHandlerRunner\Emitter\EmitterInterface, HttpHandlerRunner\Emitter\SapiEmitter };
|
||||
|
||||
return [
|
||||
ServerRequestInterface::class => function ($c) {
|
||||
return ServerRequestFactory::fromGlobals(
|
||||
@ -19,21 +15,7 @@ return [
|
||||
},
|
||||
|
||||
EmitterInterface::class => create(SapiEmitter::class),
|
||||
|
||||
HttpFactoryInterface::class => create(HttpFactory::class),
|
||||
|
||||
'error.401' => function(ContainerInterface $c, Picea $picea) {
|
||||
return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml("lean/error/401", []), 401);
|
||||
},
|
||||
|
||||
'error.404' => function(ContainerInterface $c, Picea $picea) {
|
||||
return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml("lean/error/404", []), 404);
|
||||
},
|
||||
|
||||
'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),
|
||||
# MethodNotAllowedInterface::class => autowire(MethodNotAllowedDecorator::class),
|
||||
];
|
||||
|
@ -59,7 +59,7 @@ return [
|
||||
$router = $container->get(Router::class);
|
||||
|
||||
foreach([ 'routes.middlewares', 'app.middlewares' ] as $key) {
|
||||
if ( $container->has($key) ) {
|
||||
if ($container->has($key)) {
|
||||
foreach ($container->get($key) as $i => $middleware) {
|
||||
if ($container->has($middleware)) {
|
||||
$router->middleware($container->get($middleware));
|
||||
|
@ -5,6 +5,15 @@
|
||||
"week": "week"
|
||||
},
|
||||
|
||||
"interval": {
|
||||
"years": "{$years} year(s)",
|
||||
"months": "{$months} month(s)",
|
||||
"days": "{$days} day(s)",
|
||||
"hours": "{$hours} hour(s)",
|
||||
"minutes": "{$minutes} minutes(s)",
|
||||
"seconds": "{$seconds} second(s)"
|
||||
},
|
||||
|
||||
"month": {
|
||||
"list": [
|
||||
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "Décember"
|
||||
|
@ -4,6 +4,15 @@
|
||||
"week": "semaine"
|
||||
},
|
||||
|
||||
"interval": {
|
||||
"years": "{$years} années(s)",
|
||||
"months": "{$months} mois",
|
||||
"days": "{$days} jour(s)",
|
||||
"hours": "{$hours} heure(s)",
|
||||
"minutes": "{$minutes} minutes(s)",
|
||||
"seconds": "{$seconds} seconde(s)"
|
||||
},
|
||||
|
||||
"month": {
|
||||
"list": [
|
||||
"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"
|
||||
|
0
skeleton/lean
Normal file → Executable file
0
skeleton/lean
Normal file → Executable file
@ -4,7 +4,6 @@ use function DI\autowire, DI\create, DI\get;
|
||||
|
||||
use %NAMESPACE%\Entity;
|
||||
|
||||
use Psr\Container\ContainerInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
|
||||
use Ulmus\Entity\Field\Datetime,
|
||||
@ -22,18 +21,16 @@ use TheBugs\Email\{ EmailConfiguration, MailerInterface, SwiftMailer };
|
||||
|
||||
use Taxus\{ Taxus, PermissionGrantInterface };
|
||||
|
||||
use Lean\Factory\HttpFactoryInterface;
|
||||
|
||||
return [
|
||||
\Ulmus\User\Entity\UserInterface::class => autowire(Entity\User::class),
|
||||
|
||||
SecurityHandler::class => create(SecurityHandler::class)->constructor(function(ContainerInterface $c) {
|
||||
return $c->get(HttpFactoryInterface::class)::createRedirectResponse(getenv("URL_BASE")."/login");
|
||||
SecurityHandler::class => create(SecurityHandler::class)->constructor(function() {
|
||||
return Lean\Factory\HttpFactory::createRedirectResponse(getenv("URL_BASE")."/login");
|
||||
}, get('authentication.unauthorize'), get(Taxus::class)),
|
||||
|
||||
'authentication.unauthorize' => function(ContainerInterface $c, Picea $picea) {
|
||||
return function($message) use ($c, $picea) {
|
||||
return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml('lean/error/401', [
|
||||
'authentication.unauthorize' => function($c, Picea $picea) {
|
||||
return function($message) use ($picea) {
|
||||
return Lean\Factory\HttpFactory::createHtmlResponse($picea->renderHtml('lean/error/401', [
|
||||
'title' => "",
|
||||
'subtitle' => "",
|
||||
'message' => $message,
|
||||
|
@ -7,6 +7,10 @@ use function DI\{ autowire, add, create, get };
|
||||
$dir = dirname(__DIR__, 2);
|
||||
|
||||
return [
|
||||
\%NAMESPACE%\Factory\FormFactoryInterface::class => autowire(\%NAMESPACE%\Factory\FormFactory::class),
|
||||
\Lean\Api\Factory\MessageFactoryInterface::class => autowire(\%NAMESPACE%\Lib\Message::class),
|
||||
|
||||
|
||||
'%APPKEY%' => [
|
||||
'picea' => [
|
||||
'context' => "%ESCAPED_NAMESPACE%\\View",
|
||||
|
8
skeleton/meta/definitions/env/prod.php
vendored
8
skeleton/meta/definitions/env/prod.php
vendored
@ -4,7 +4,7 @@ use Picea\Picea;
|
||||
|
||||
use Negundo\Client\{ NegundoMiddleware, SoftwareConfig };
|
||||
|
||||
use Lean\Factory\HttpFactoryInterface;
|
||||
use Lean\Factory\HttpFactory;
|
||||
|
||||
use Psr\Http\Server\MiddlewareInterface,
|
||||
Psr\Http\Message\ServerRequestInterface,
|
||||
@ -31,11 +31,11 @@ return [
|
||||
|
||||
"errorHandler" => create(NegundoMiddleware::class)->constructor(get(SoftwareConfig::class), null, get('app.errorhandler.html')),
|
||||
|
||||
'app.errorhandler.html' => function(\Psr\Container\ContainerInterface $c, Picea $picea) {
|
||||
return function(\Throwable $exception) use ($c, $picea) {
|
||||
'app.errorhandler.html' => function($c, Picea $picea) {
|
||||
return function(\Throwable $exception) use ($picea) {
|
||||
error_log($exception->getMessage());
|
||||
|
||||
return $c->get(HttpFactoryInterface::class)::createHtmlResponse($picea->renderHtml('lean/error/500', [
|
||||
return HttpFactory::createHtmlResponse($picea->renderHtml('lean/error/500', [
|
||||
'title' => "Une erreur s'est produite lors de l'exécution du script.",
|
||||
'subtitle' => "Êtes-vous connecté avec le bon compte ?",
|
||||
'message' => $exception->getMessage(),
|
||||
|
46
skeleton/src/Factory/FormFactory.php
Normal file
46
skeleton/src/Factory/FormFactory.php
Normal file
@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
namespace %NAMESPACE%\Factory;
|
||||
|
||||
use Lean\Api\Factory\MessageFactoryInterface;
|
||||
use Lean\LanguageHandler;
|
||||
use Picea\Ui\Method\FormContextInterface;
|
||||
use Picea\Ui\Method\FormInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Storage\Session;
|
||||
use Ulmus\Entity\EntityInterface;
|
||||
use Ulmus\User\Entity\UserInterface;
|
||||
use Ulmus\User\Lib\Authenticate;
|
||||
|
||||
class FormFactory implements FormFactoryInterface
|
||||
{
|
||||
/*
|
||||
public function __construct(
|
||||
protected ServerRequestInterface $request,
|
||||
protected Authenticate $authenticate,
|
||||
protected Session $session,
|
||||
protected LanguageHandler $languageHandler,
|
||||
protected MessageFactoryInterface $messageFactory,
|
||||
) {}
|
||||
|
||||
public function save(EntityInterface $entity): FormInterface
|
||||
{
|
||||
return new Form\Save($this->languageHandler, $this->messageFactory, $entity);
|
||||
}
|
||||
|
||||
public function saveContext(? ServerRequestInterface $request = null, ? string $formName = null): FormContextInterface
|
||||
{
|
||||
return new Form\SaveContext($request ?: $this->request, $formName);
|
||||
}
|
||||
|
||||
public function delete(EntityInterface $entity): FormInterface
|
||||
{
|
||||
return new Form\Delete($this->languageHandler, $this->messageFactory, $entity);
|
||||
}
|
||||
|
||||
public function deleteContext(?ServerRequestInterface $request = null, ?string $formName = null): FormContextInterface
|
||||
{
|
||||
return new Lib\FormContext($request, $formName);
|
||||
}
|
||||
*/
|
||||
}
|
25
skeleton/src/Factory/FormFactoryInterface.php
Normal file
25
skeleton/src/Factory/FormFactoryInterface.php
Normal file
@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace %NAMESPACE%\Factory;
|
||||
|
||||
use Lean\Api\Factory\MessageFactoryInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use Picea\Ui\Method\{ FormInterface, FormContextInterface };
|
||||
use Storage\Session;
|
||||
use Lean\LanguageHandler;
|
||||
use Ulmus\Entity\EntityInterface;
|
||||
use Ulmus\User\Entity\UserInterface;
|
||||
use Ulmus\User\Lib\Authenticate;
|
||||
|
||||
interface FormFactoryInterface
|
||||
{
|
||||
/* public function __construct(ServerRequestInterface $request, Authenticate $authenticate, Session $session, LanguageHandler $languageHandler, MessageFactoryInterface $messageFactory,);
|
||||
|
||||
public function save(EntityInterface $entity): FormInterface;
|
||||
|
||||
public function saveContext(?ServerRequestInterface $request = null, ?string $formName = null): FormContextInterface;
|
||||
|
||||
public function delete(EntityInterface $entity): FormInterface;
|
||||
|
||||
public function deleteContext(?ServerRequestInterface $request = null, ?string $formName = null): FormContextInterface;*/
|
||||
}
|
@ -2,8 +2,10 @@
|
||||
|
||||
namespace Lean;
|
||||
|
||||
use League\Route\Http\Exception\MethodNotAllowedException;
|
||||
use League\Route\Strategy;
|
||||
use League\Route\Http\Exception\NotFoundException;
|
||||
use Lean\ApplicationStrategy\MethodNotAllowedInterface;
|
||||
use Lean\ApplicationStrategy\NotFoundDecoratorInterface;
|
||||
use Lean\ApplicationStrategy\ThrowableHandlerInterface;
|
||||
use Lean\Factory\HttpFactoryInterface;
|
||||
@ -30,6 +32,10 @@ class ApplicationStrategy extends Strategy\ApplicationStrategy {
|
||||
public function getThrowableHandler(): MiddlewareInterface
|
||||
{
|
||||
return $this->getContainer()->get(ThrowableHandlerInterface::class);
|
||||
}
|
||||
|
||||
public function getMethodNotAllowedDecorator(MethodNotAllowedException $exception): MiddlewareInterface
|
||||
{
|
||||
return $this->getContainer()->has(MethodNotAllowedInterface::class) ? $this->getContainer()->get(MethodNotAllowedInterface::class) : parent::getMethodNotAllowedDecorator($exception);
|
||||
}
|
||||
}
|
10
src/ApplicationStrategy/MethodNotAllowedInterface.php
Normal file
10
src/ApplicationStrategy/MethodNotAllowedInterface.php
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Lean\ApplicationStrategy;
|
||||
|
||||
use Psr\Http\Server\MiddlewareInterface;
|
||||
|
||||
interface MethodNotAllowedInterface extends MiddlewareInterface
|
||||
{
|
||||
|
||||
}
|
@ -34,7 +34,7 @@ class NotFoundDecorator implements NotFoundDecoratorInterface
|
||||
return $this->throw404($request);
|
||||
}
|
||||
|
||||
return $handler->handle($request);
|
||||
return $handler->handle($request);;
|
||||
}
|
||||
|
||||
public function throw404(ServerRequestInterface $request) : ResponseInterface
|
||||
|
@ -8,6 +8,7 @@ use Notes\Attribute\Ignore;
|
||||
use Notes\Route\Attribute\Object\Route;
|
||||
use Notes\Security\Attribute\Security;
|
||||
use Picea, Picea\Ui\Method\FormContext;
|
||||
use Picea\Ui\Method\FormContextInterface;
|
||||
use TheBugs\Email\MailerInterface;
|
||||
use Storage\{ Cookie, Session };
|
||||
use League\CommonMark\CommonMarkConverter;
|
||||
@ -212,7 +213,7 @@ trait ControllerTrait {
|
||||
}
|
||||
|
||||
#[Ignore]
|
||||
public function pushContext(FormContext $context) : FormContext
|
||||
public function pushContext(FormContextInterface $context) : FormContextInterface
|
||||
{
|
||||
$this->contextList[$context->formName ?? uniqid("context_")] = $context;
|
||||
|
||||
@ -220,7 +221,7 @@ trait ControllerTrait {
|
||||
}
|
||||
|
||||
#[Ignore]
|
||||
public function context(? string $name = null) : ? FormContext
|
||||
public function context(? string $name = null) : ? FormContextInterface
|
||||
{
|
||||
return $name ? $this->contextList[$name] : array_values($this->contextList)[0] ?? null;
|
||||
}
|
||||
|
@ -2,6 +2,9 @@
|
||||
|
||||
namespace Lean\Factory;
|
||||
|
||||
use Laminas\Diactoros\Response\{EmptyResponse, HtmlResponse, JsonResponse, RedirectResponse, TextResponse};
|
||||
use Lean\Response\{ DownloadResponse, ImageResponse, FileDownloadResponse, PdfResponse };
|
||||
use Laminas\Diactoros\Response;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
|
||||
interface HttpFactoryInterface
|
||||
|
@ -27,18 +27,15 @@ class Kernel {
|
||||
|
||||
public array $paths = [];
|
||||
|
||||
public int $errorReporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE;
|
||||
public int $errorReporting = E_ALL & ~E_USER_DEPRECATED & ~E_DEPRECATED & ~E_NOTICE;
|
||||
|
||||
public array $definitionFilePaths;
|
||||
|
||||
public string $errorLogPath;
|
||||
|
||||
public string $projectPath;
|
||||
|
||||
public function __construct(string $projectPath)
|
||||
{
|
||||
$this->projectPath = $projectPath;
|
||||
|
||||
public function __construct(
|
||||
public string $projectPath
|
||||
) {
|
||||
$this->setEnvironment();
|
||||
$this->initializeEngine();
|
||||
$this->setupContainer();
|
||||
|
23
view/lean/block/since.phtml
Normal file
23
view/lean/block/since.phtml
Normal file
@ -0,0 +1,23 @@
|
||||
{% arguments \DateInterval $interval %}
|
||||
|
||||
{% if $interval->y %}
|
||||
{% lang "lean.date.interval.years", [ 'years' => $interval->y ] %},
|
||||
{% endif %}
|
||||
|
||||
{% if $interval->m %}
|
||||
{% lang "lean.date.interval.months", [ 'months' => $interval->m ] %},
|
||||
{% endif %}
|
||||
|
||||
{% if $interval->d %}
|
||||
{% lang "lean.date.interval.days", [ 'days' => $interval->d ] %},
|
||||
{% endif %}
|
||||
|
||||
{% if $interval->h %}
|
||||
{% lang "lean.date.interval.hours", [ 'hours' => $interval->h ] %},
|
||||
{% endif %}
|
||||
|
||||
{% if $interval->i %}
|
||||
{% lang "lean.date.interval.minutes", [ 'minutes' => $interval->i ] %}
|
||||
{% else %}
|
||||
{% lang "lean.date.interval.seconds", [ 'seconds' => $interval->s ] %}
|
||||
{% endif %}
|
File diff suppressed because one or more lines are too long
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 32 KiB |
Loading…
x
Reference in New Issue
Block a user