- Worked th error layout

- Added some picto for the error views
- Bugfixes
This commit is contained in:
Dave Mc Nicoll 2021-08-27 18:06:15 +00:00
parent 421024f260
commit fd693fc8fc
15 changed files with 101 additions and 18 deletions

View File

@ -5,5 +5,12 @@
"subtitle": "You may have followed an invalid or expired link...",
"message": "It seems like an error occured on the link you visited / action you tried. A notification was sent to the application's developer.",
"back": "Return to previous page"
},
"500": {
"title": "An error occured",
"page-title": "500 - An error occured",
"subtitle": "L'action que vous avez tenté d'effectué semble avoir échoué.",
"message": "Un message d'erreur a été envoyé au développeur de cette application.",
"back": "Revenir à la page précédente"
}
}

View File

@ -1,4 +1,11 @@
{
"401": {
"title": "Accès refusé",
"page-title": "401 - Accès refusé ",
"subtitle": "Vous n'avez pas les droits nécessaire pour consulter ce lien...",
"message": "Vous avez tentez d'accéder un lien qui ne vous est pas permis ou dont la permission ne vous a pas été accordé.",
"back": "Revenir à la page précédente"
},
"404": {
"title": "Page introuvable",
"page-title": "404 - Page introuvable",

View File

@ -24,7 +24,7 @@ return [
SecurityHandler::class => create(SecurityHandler::class)->constructor(function() {
return new RedirectResponse(getenv("URL_BASE")."/connexion");
}),
}, get('authentication.unauthorize')),
'authentication.error' => function($c, Picea $picea) {
return function($message) use ($picea) {
@ -36,6 +36,16 @@ return [
};
},
'authentication.unauthorize' => function($c, Picea $picea) {
return function($message) use ($picea) {
return new HtmlResponse($picea->renderHtml('lean/error/401', [
'title' => "",
'subtitle' => "",
'message' => $message,
]));
};
},
EmailConfiguration::class => function($c) {
$email = new EmailConfiguration( EmailConfiguration::AUTH_TYPE_SMTP );
$email->smtpHost = getenv('SMTP_HOST');

0
skeleton/var/cache/.gitkeep vendored Normal file
View File

View File

View File

@ -10,7 +10,7 @@ use Picea,
use Psr\Http\Message\ServerRequestInterface;
use Storage\Session;
use Laminas\Diactoros\Response\{ HtmlResponse, TextResponse, RedirectResponse, JsonResponse };
use Laminas\Diactoros\Response\{ HtmlResponse, TextResponse, RedirectResponse, JsonResponse, EmptyResponse };
use Ulmus\EntityCollection;
@ -21,12 +21,13 @@ use TheBugs\Email\MailerInterface;
use Notes\Route\Annotation\Object\Route as RouteParam,
Notes\Route\Annotation\Method\Route,
Notes\Security\Annotation\Security,
Notes\Security\Annotation\Taxus,
Notes\Tell\Annotation\Language;
use function file_get_contents;
/**
* @Security("locked" => false)
* @Security("locked" => true)
* @RouteParam("methods" => [ "GET", "POST", "DELETE" ])
*/
trait ControllerTrait {
@ -68,9 +69,9 @@ trait ControllerTrait {
return new RedirectResponse($url, $code, $headers);
}
public function renderPdf($rawdata, int $status = 200, array $headers = []) : PdfResponse
public static function renderNothing(int $code = 204, array $headers = []) : ResponseInterface
{
return new PdfResponse($rawdata, $status, $headers);
return new EmptyResponse($code, $headers);
}
public static function renderText(string $text, int $code = 200, array $headers = []) : ResponseInterface
@ -88,6 +89,11 @@ trait ControllerTrait {
return new JsonResponse($data, $code, $headers);
}
public function renderPdf($rawdata, int $status = 200, array $headers = []) : PdfResponse
{
return new PdfResponse($rawdata, $status, $headers);
}
public static function renderDownloadable(string $data, string $filename, int $code = 200, array $headers = []) : ResponseInterface
{
return new DownloadResponse($data, $filename, $code, $headers);

View File

@ -58,19 +58,25 @@ class Kernel {
// Environment vars (accessible from \DI\env(), getenv(), $_ENV and $_SERVER)
Dotenv::create(getenv("PROJECT_PATH"))->load();
// Paths and directories
foreach($this->paths as $name => $envkey) {
if ( ! getenv($name) ) {
static::putenv($name, realpath(getenv("PROJECT_PATH") . DIRECTORY_SEPARATOR . getenv($envkey)));
}
}
// Override using headers
foreach(['APP_ENV', 'DEBUG', ] as $env) {
if ( null !== $value = $_SERVER["HTTP_$env"] ?? null ) {
static::putenv($env, $value);
}
}
// Paths and directories
foreach($this->paths as $name => $envkey) {
if ( ! getenv($name) ) {
$path = getenv("PROJECT_PATH") . DIRECTORY_SEPARATOR . getenv($envkey);
if (getenv('DEBUG') && ! file_exists($path)) {
mkdir($path, 0755, true);
}
static::putenv($name, realpath($path));
}
}
}
protected function initializeEngine() : self
@ -81,6 +87,10 @@ class Kernel {
setlocale(LC_ALL, $this->locale = getenv("DEFAULT_LOCAL"));
setlocale(LC_TIME, getenv("DEFAULT_TIME"), getenv("DEFAULT_TIME_FALLBACK"));
if ( class_exists('Locale') ) {
\Locale::setDefault($this->locale);
}
ini_set("log_errors", "1");
ini_set("error_log", $this->errorLogPath);
ini_set('display_errors', getenv("DEBUG") ? 'on' : 'on');

View File

@ -2,7 +2,7 @@
namespace Lean;
use function DI\autowire, DI\create;
use Taxus\Taxus;
use League\Route\RouteGroup,
League\Route\Router;
@ -23,6 +23,8 @@ use Picea\Picea,
use Storage\Cookie,
Storage\Session;
use function DI\autowire, DI\create;
class Routing {
protected Session $session;
@ -37,6 +39,8 @@ class Routing {
protected LanguageHandler $language;
protected Taxus $taxus;
public function __construct(
Session $session,
Cookie $cookie,
@ -44,7 +48,8 @@ class Routing {
Router $router,
RouteFetcher $routeFetcher,
SecurityHandler $security,
LanguageHandler $language
LanguageHandler $language,
Taxus $taxus
)
{
$this->session = $session;
@ -54,6 +59,7 @@ class Routing {
$this->security = $security;
$this->language = $language;
$this->router = $router;
$this->taxus = $taxus;
}
public function registerRoute(ContainerInterface $container, string $urlBase) {
@ -84,12 +90,16 @@ class Routing {
$object = $container->get($class);
# Checking if user needs to be logged
if ( ! $object->user->logged && ( $redirect = $this->security->verify($class, $method) ) ) {
if ( ( $redirect = $this->security->verify($class, $method) ) && ( empty($object->user) || ! $object->user->logged ) ) {
$this->session->redirectedFrom = (string) $request->getUri();
return $redirect;
}
if ( $forbidden = $this->security->taxus($class, $method, $object->user) ) {
return $forbidden;
}
if ( $container->has(Picea::class) ) {
$container->get(Picea::class)->globalVariables['route'] = $annotation;
}

26
view/lean/error/401.phtml Normal file
View File

@ -0,0 +1,26 @@
{% extends "lean/layout/error" %}
{% language.set "lean.error.401" %}
{% title _('page-title') %}
{% section "content-right" %}
<div>
<div class="title">{% _ "title" %}</div>
<div class="subtitle">{% _ "subtitle" %}</div>
<div class="content">{% _ "message" %}</div>
<u><a href="#" onclick="history.back()">{% _ "back" %}</a></u>
</div>
{% endsection %}
{% section "content-left" %}
<div class="picto-login">
{% view "lean/picto/undraw_forbidden" %}
</div>
{% endsection %}
{% section "head.css" %}
.title {font-size:2rem}
.subtitle {font-size:1.25rem; padding-top: 1rem;}
.content {padding-top:1rem}
{% endsection %}

View File

@ -14,7 +14,9 @@
{% endsection %}
{% section "content-left" %}
<img class="picto-login" src="{% asset 'asset/picto/undraw_lost_bqr2.svg' %}">
<div class="picto-login">
{% view "lean/picto/undraw_lost" %}
</div>
{% endsection %}
{% section "head.css" %}

View File

@ -14,7 +14,9 @@
{% endsection %}
{% section "content-left" %}
<img class="picto-login" src="{% asset 'static/img/bugs.svg' %}">
<div class="picto-login">
{% view "lean/picto/undraw_error" %}
</div>
{% endsection %}
{% section "head.css" %}

View File

@ -20,7 +20,7 @@
#wrapper-content .content-left {background:#ffffff;padding:5vh 2vw;border-radius:0 6px 6px 0;display:flex;align-items:center;justify-content: center}
.form-user-login {width:80%;}
.picto-login {max-width:80%;}
.picto-login svg {max-width:100%;}
{% section "head.css" %}{% endsection %}
</style>

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 40 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.7 KiB