78 lines
2.5 KiB
PHP
78 lines
2.5 KiB
PHP
<?php
|
|
namespace Framework\Auth;
|
|
if (!isset($_SESSION)) {
|
|
session_start();
|
|
}
|
|
error_reporting(E_ALL & ~E_NOTICE);
|
|
use App\Auth\UserTable;
|
|
use Framework\Auth;
|
|
use Framework\Response\RedirectResponse;
|
|
use Framework\Router;
|
|
use Framework\Session\FlashService;
|
|
use Framework\Session\SessionInterface;
|
|
use Interop\Http\ServerMiddleware\DelegateInterface;
|
|
use Interop\Http\ServerMiddleware\MiddlewareInterface;
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use Psr\Http\Message\ServerRequestInterface;
|
|
|
|
class LoggedInMiddleware implements MiddlewareInterface
|
|
{
|
|
|
|
/**
|
|
* @var Auth
|
|
*/
|
|
private $auth;
|
|
/**
|
|
* @var Router
|
|
*/
|
|
private $router;
|
|
/**
|
|
* @var SessionInterface
|
|
*/
|
|
private $session;
|
|
|
|
public function __construct(Auth $auth, Router $router, UserTable $userTable, SessionInterface $session)
|
|
{
|
|
$this->auth = $auth;
|
|
$this->router = $router;
|
|
$this->userTable = $userTable;
|
|
$this->session = $session;
|
|
}
|
|
|
|
public function process(ServerRequestInterface $request, DelegateInterface $delegate): ResponseInterface
|
|
{
|
|
// echo "<pre>";
|
|
// var_dump($request);
|
|
// var_dump($_SESSION);
|
|
// echo "</pre>";
|
|
// die();
|
|
$user = $request->getAttribute('user');
|
|
if ($user != '' && $user != '---' && $_SESSION['connecte'] != '---') {
|
|
$_SESSION['connecte']=$user;
|
|
} else {
|
|
if ($_SESSION['connecte'] != '---') {
|
|
$username = $_SESSION['connecte'];
|
|
} else {
|
|
$url_part = explode('/', $request->getServerParams()['HTTP_REFERER'] ?? '/');
|
|
$username = $url_part[5];
|
|
}
|
|
if (!$_SESSION['logout']) {
|
|
if (is_null($username)) {
|
|
if (is_null($user)) {
|
|
$user = $this->auth->getUser();
|
|
} else {
|
|
$user = $this->userTable->findBy('username', $user);
|
|
}
|
|
} else {
|
|
$user = $this->auth->getUser() ?: $this->userTable->findBy('username', $username);
|
|
}
|
|
}
|
|
if (is_null($user) or $_SESSION['logout'] or $_SESSION['connecte'] == '---') {
|
|
(new FlashService($this->session))->error('Vous devez vous connecter pour accéder à cette page');
|
|
return new RedirectResponse($this->router->generateUri('auth.login'));
|
|
}
|
|
}
|
|
return $delegate->process($request->withAttribute('user', $user));
|
|
}
|
|
}
|