LoginController.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace App\Controllers;
  3. use Slim\Http\Request;
  4. use Slim\Http\Response;
  5. class LoginController extends Controller
  6. {
  7. /**
  8. * @param Request $request
  9. * @param Response $response
  10. * @return Response
  11. */
  12. public function show(Request $request, Response $response): Response
  13. {
  14. if ($this->session->get('logged', false)) {
  15. return redirect($response, 'home');
  16. }
  17. return $this->view->render($response, 'auth/login.twig');
  18. }
  19. /**
  20. * @param Request $request
  21. * @param Response $response
  22. * @return Response
  23. */
  24. public function login(Request $request, Response $response): Response
  25. {
  26. $result = $this->database->query('SELECT `id`, `email`, `username`, `password`,`is_admin`, `active` FROM `users` WHERE `username` = ? OR `email` = ? LIMIT 1', [$request->getParam('username'), $request->getParam('username')])->fetch();
  27. if (!$result || !password_verify($request->getParam('password'), $result->password)) {
  28. $this->session->alert(lang('bad_login'), 'danger');
  29. return redirect($response, 'login');
  30. }
  31. if (isset($this->settings['maintenance']) && $this->settings['maintenance'] && !$result->is_admin) {
  32. $this->session->alert(lang('maintenance_in_progress'), 'info');
  33. return redirect($response, 'login');
  34. }
  35. if (!$result->active) {
  36. $this->session->alert(lang('account_disabled'), 'danger');
  37. return redirect($response, 'login');
  38. }
  39. $this->session->set('logged', true);
  40. $this->session->set('user_id', $result->id);
  41. $this->session->set('username', $result->username);
  42. $this->session->set('admin', $result->is_admin);
  43. $this->session->set('used_space', humanFileSize($this->getUsedSpaceByUser($result->id)));
  44. $this->session->alert(lang('welcome', [$result->username]), 'info');
  45. $this->logger->info("User $result->username logged in.");
  46. if ($this->session->has('redirectTo')) {
  47. return $response->withRedirect($this->session->get('redirectTo'));
  48. }
  49. return redirect($response, 'home');
  50. }
  51. /**
  52. * @param Request $request
  53. * @param Response $response
  54. * @return Response
  55. */
  56. public function logout(Request $request, Response $response): Response
  57. {
  58. $this->session->clear();
  59. $this->session->set('logged', false);
  60. $this->session->alert(lang('goodbye'), 'warning');
  61. return redirect($response, 'login.show');
  62. }
  63. }