XBackBone/app/Middleware/RememberMiddleware.php

42 lines
1.6 KiB
PHP
Raw Normal View History

<?php
namespace App\Middleware;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Psr\Http\Server\RequestHandlerInterface as RequestHandler;
class RememberMiddleware extends Middleware
{
/**
2019-11-23 12:18:00 +00:00
* @param Request $request
* @param RequestHandler $handler
2019-11-20 17:49:31 +00:00
*
* @return Response
2019-11-23 12:18:00 +00:00
* @throws \Exception
*/
public function __invoke(Request $request, RequestHandler $handler)
{
if (!$this->session->get('logged', false) && !empty($request->getCookieParams()['remember'])) {
2020-03-01 16:03:07 +00:00
[$selector, $token] = explode(':', $request->getCookieParams()['remember']);
$user = $this->database->query(
'SELECT `id`, `username`,`is_admin`, `active`, `remember_token`, `current_disk_quota`, `max_disk_quota`, `copy_raw` FROM `users` WHERE `remember_selector` = ? AND `remember_expire` > ? LIMIT 1',
2019-11-21 17:00:47 +00:00
[$selector, date('Y-m-d\TH:i:s', time())]
)->fetch();
2020-03-01 16:03:07 +00:00
if ($user && password_verify($token, $user->remember_token) && $user->active) {
2020-04-06 17:24:26 +00:00
$this->session->set('logged', true)
->set('user_id', $user->id)
->set('username', $user->username)
->set('admin', $user->is_admin)
->set('copy_raw', $user->copy_raw);
2020-03-01 16:03:07 +00:00
$this->setSessionQuotaInfo($user->current_disk_quota, $user->max_disk_quota);
2020-04-06 17:24:26 +00:00
$this->refreshRememberCookie($user->id);
}
}
return $handler->handle($request);
}
2019-11-20 17:49:31 +00:00
}