login.php 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. <?php
  2. require_once 'session.php';
  3. require_once 'database.php';
  4. require_once 'twig.php';
  5. // Do not re-login if already loged in
  6. if (Session::is_valid())
  7. {
  8. header ('Location: ./user');
  9. exit ();
  10. }
  11. // POST: Process form submission ===========================================
  12. if ($_SERVER['REQUEST_METHOD'] === 'POST')
  13. {
  14. $db = new Database();
  15. $db->connect ();
  16. // Process login request
  17. if (isset ($_POST['login']))
  18. {
  19. // Bad POST request!
  20. if (!isset ($_POST['username']) || !isset ($_POST['password']))
  21. exit ();
  22. $username = $_POST['username'];
  23. $password = $_POST['password'];
  24. // Check username/password
  25. $user = $db->check_user_credentials ($username, $password);
  26. // Does the user exist?
  27. if (is_null ($user) || empty ($user))
  28. {
  29. $feedback = 'Bad login!';
  30. } else {
  31. // Set session
  32. Session::set ($user);
  33. // Also set "remember_me" cookie
  34. // Add "remember_me" cookie with secret token (30 days)
  35. $token = $db->set_remember_me ($user['id']);
  36. setcookie (
  37. 'remember_me', // name
  38. $token, // value
  39. time()+60*60*24*30, // expire (30 days)
  40. '/', // path
  41. 'freepo.st', // domain
  42. false, // secure (clients send cookie only through HTTPS)
  43. true); // httponly (no javascript)
  44. // After login, redirect to homepage
  45. header ('Location: ./');
  46. exit ();
  47. }
  48. }
  49. // Process new account request
  50. if (isset ($_POST['new_account']))
  51. {
  52. // Bad POST request!
  53. if (!isset ($_POST['username']) || !isset ($_POST['password']))
  54. exit ();
  55. // Error to display if can't create new user
  56. $feedback = NULL;
  57. // Make sure the username is not empty
  58. $username = trim ($_POST['username']);
  59. $password = $_POST['password'];
  60. // Username taken
  61. if (strlen ($username) == 0 || $db->user_exists ($username))
  62. $feedback = 'Name taken, please choose another.';
  63. // Password too short
  64. if (!$feedback && strlen ($password) < 8)
  65. $feedback = 'Password too short';
  66. if (!$feedback)
  67. {
  68. // Username OK, Password OK: create new user
  69. $user = $db->new_user ($username, $password);
  70. // Something bad happened...
  71. if (is_null ($user) || empty ($user))
  72. $feedback = 'An error has occurred, please try again.';
  73. if (!$feedback)
  74. {
  75. // Everything fine, login user and redirect
  76. Session::set ($user);
  77. header ('Location: ./user');
  78. exit ();
  79. }
  80. }
  81. }
  82. }
  83. // GET: show login form ====================================================
  84. // Render template
  85. echo $twig->render (
  86. 'login.twig',
  87. array(
  88. 'title' => 'Login',
  89. 'feedback' => isset ($feedback) ? $feedback : ''));