LoginController.php 1.9 KB

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