LoginController.php 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Controllers;
  3. use Psr\Http\Message\ResponseInterface as Response;
  4. use Psr\Http\Message\ServerRequestInterface as Request;
  5. class LoginController extends Controller
  6. {
  7. /**
  8. * @param Response $response
  9. *
  10. * @throws \Twig\Error\LoaderError
  11. * @throws \Twig\Error\RuntimeError
  12. * @throws \Twig\Error\SyntaxError
  13. *
  14. * @return Response
  15. */
  16. public function show(Response $response): Response
  17. {
  18. if ($this->session->get('logged', false)) {
  19. return redirect($response, route('home'));
  20. }
  21. return view()->render($response, 'auth/login.twig');
  22. }
  23. /**
  24. * @param Request $request
  25. * @param Response $response
  26. *
  27. * @throws \Exception
  28. *
  29. * @return Response
  30. */
  31. public function login(Request $request, Response $response): Response
  32. {
  33. $username = param($request, 'username');
  34. $result = $this->database->query('SELECT `id`, `email`, `username`, `password`,`is_admin`, `active` FROM `users` WHERE `username` = ? OR `email` = ? LIMIT 1', [$username, $username])->fetch();
  35. if (!$result || !password_verify(param($request, 'password'), $result->password)) {
  36. $this->session->alert(lang('bad_login'), 'danger');
  37. return redirect($response, route('login'));
  38. }
  39. if (isset($this->config['maintenance']) && $this->config['maintenance'] && !$result->is_admin) {
  40. $this->session->alert(lang('maintenance_in_progress'), 'info');
  41. return redirect($response, route('login'));
  42. }
  43. if (!$result->active) {
  44. $this->session->alert(lang('account_disabled'), 'danger');
  45. return redirect($response, route('login'));
  46. }
  47. $this->session->set('logged', true);
  48. $this->session->set('user_id', $result->id);
  49. $this->session->set('username', $result->username);
  50. $this->session->set('admin', $result->is_admin);
  51. $this->session->set('used_space', humanFileSize($this->getUsedSpaceByUser($result->id)));
  52. $this->session->alert(lang('welcome', [$result->username]), 'info');
  53. $this->logger->info("User $result->username logged in.");
  54. if (param($request, 'remember') === 'on') {
  55. $this->refreshRememberCookie($result->id);
  56. }
  57. if ($this->session->has('redirectTo')) {
  58. return redirect($response, $this->session->get('redirectTo'));
  59. }
  60. return redirect($response, route('home'));
  61. }
  62. /**
  63. * @param Request $request
  64. * @param Response $response
  65. *
  66. * @return Response
  67. */
  68. public function logout(Request $request, Response $response): Response
  69. {
  70. $this->session->clear();
  71. $this->session->set('logged', false);
  72. $this->session->alert(lang('goodbye'), 'warning');
  73. if (!empty($request->getCookieParams()['remember'])) {
  74. setcookie('remember', null);
  75. }
  76. return redirect($response, route('login.show'));
  77. }
  78. }