Quote database webapp
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

login.php 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <?PHP
  2. require_once('inc/database.php');
  3. require_once('inc/account.php');
  4. require_once('inc/settings.php');
  5. if (isset($_POST['openid_url']) || isset($_REQUEST['openid_mode'])) {
  6. // OpenID login in progress
  7. require_once('openid/processor.php');
  8. } else if (isset($_SESSION['openid']) && $_SESSION['openid']['validated']) {
  9. // OpenID login succeeded
  10. $sql = 'SELECT user_id, user_name, user_standing FROM users WHERE user_name = ';
  11. $sql .= '\'' . m($_SESSION['openid']['identity']) . '\'';
  12. $res = mysql_query($sql);
  13. if (mysql_num_rows($res) == 0) {
  14. $sql = 'INSERT INTO users (user_name, user_pass) VALUES (\'' . m($_SESSION['openid']['identity']);
  15. $sql .= '\', \'openid user\')';
  16. $res = mysql_query($sql);
  17. $_SESSION['uid'] = mysql_insert_id();
  18. $_SESSION['uname'] = $_SESSION['openid']['identity'];
  19. $_SESSION['standing'] = 0;
  20. } else {
  21. $row = mysql_fetch_assoc($res);
  22. $_SESSION['uid'] = $row['user_id'];
  23. $_SESSION['uname'] = $row['user_name'];
  24. $_SESSION['standing'] = $row['user_standing'];
  25. }
  26. unset($_SESSION['openid']);
  27. if (isset($_POST['remember'])) {
  28. $row = mysql_fetch_array(mysql_query('SELECT user_hash FROM users WHERE user_id = '.$_SESSION['uid']));
  29. if (strlen($row[0]) != 32) {
  30. $row[0] = md5(uniqid($_SESSION['uid']).time());
  31. mysql_query('UPDATE users SET user_hash = \''.$row[0].'\' WHERE user_id = '.$_SESSION['uid']);
  32. }
  33. setcookie('quotedbperm', $row[0], time()+60*24*24*365.24);
  34. }
  35. header('Location: '.BASE);
  36. exit;
  37. } else if (isset($_SESSION['openid']['error'])) {
  38. // OpenID login failed
  39. define('MESSAGE', $_SESSION['openid']['error']);
  40. unset($_SESSION['openid']['error']);
  41. } else if (isset($_POST['user']) && isset($_POST['pass'])) {
  42. // Normal login
  43. $sql = 'SELECT user_id, user_name, user_standing FROM users ';
  44. $sql .= 'WHERE user_name = \''.m($_POST['user']).'\' AND user_pass = \''.m(md5($_POST['user'].$_POST['pass'])).'\'';
  45. $res = mysql_query($sql);
  46. if (mysql_num_rows($res) == 0) {
  47. define('MESSAGE', 'Login failed. Please check your username and password.');
  48. } else {
  49. $row = mysql_fetch_array($res);
  50. $_SESSION['uid'] = $row['user_id'];
  51. $_SESSION['uname'] = $row['user_name'];
  52. $_SESSION['standing'] = $row['user_standing'];
  53. if (isset($_POST['remember'])) {
  54. $row = mysql_fetch_array(mysql_query('SELECT user_hash FROM users WHERE user_id = '.$_SESSION['uid']));
  55. if (strlen($row[0]) != 32) {
  56. $row[0] = md5(uniqid($row['user_id']).time());
  57. mysql_query('UPDATE users SET user_hash = \''.$row[0].'\' WHERE user_id = '.$_SESSION['uid']);
  58. }
  59. setcookie('quotedbperm', $row[0], time()+60*24*24*365.24);
  60. }
  61. header('Location: '.BASE);
  62. exit;
  63. }
  64. }
  65. define('TITLE', 'Login');
  66. require_once('inc/header.php');
  67. ?>
  68. <div class="oneThird right">
  69. <h2>Why login?</h2>
  70. <p>
  71. Because of the public nature of this quotes database (there are no
  72. moderators or admins, just users), and the way we reward good users
  73. and punish bad ones (standings), we require that you be logged in in
  74. order to rate a quote or add a new one.
  75. </p>
  76. <p>
  77. You can still browse quotes without being logged in, but to contribute
  78. to the site at all you'll have to login.
  79. </p>
  80. </div>
  81. <div>
  82. <h2>Login</h2>
  83. <?PHP
  84. if (defined('MESSAGE')) {
  85. echo '<div id="message">'.MESSAGE.'</div>';
  86. }
  87. ?>
  88. <p>
  89. If you don't have an account, <a href="<?PHP echo BASE; ?>register">
  90. register one</a> in a few seconds.
  91. </p>
  92. <form action="<?PHP echo BASE; ?>login" method="post">
  93. <table class="form">
  94. <tr>
  95. <th>Username</th>
  96. <td><input type="text" name="user"></td>
  97. </tr>
  98. <tr>
  99. <th>Password</th>
  100. <td><input type="password" name="pass"></td>
  101. </tr>
  102. <tr>
  103. <th>Remember?</th>
  104. <td><input type="checkbox" name="remember" style="width: 20px;"> (Requires cookies)</td>
  105. </tr>
  106. </table>
  107. <input type="submit" value="Login">
  108. </form>
  109. <p>Alternatively, you can log in using OpenID:</p>
  110. <form action="<?PHP echo BASE; ?>login" method="post">
  111. <table class="form">
  112. <tr><th>Identifier</th>
  113. <td>
  114. <input type="text" name="openid_url" id="openid_url" style="background: url('openid/openid.gif') no-repeat; padding-left: 20px;">
  115. </td></tr>
  116. <tr>
  117. <th>Remember?</th>
  118. <td><input type="checkbox" name="remember" style="width: 20px;"> (Requires cookies)</td>
  119. </tr>
  120. </table>
  121. <input type="submit" value="Login">
  122. </form>
  123. </div>
  124. <?PHP
  125. require_once('inc/footer.php');
  126. ?>