/website/mysql_login.php

https://github.com/dlowe/aichallenge · PHP · 161 lines · 129 code · 13 blank · 19 comment · 26 complexity · 700bb5f0a244ca3f059c9115cf57f2d7 MD5 · raw file

  1. <?php
  2. require_once('server_info.php');
  3. require_once('sql.php');
  4. // Get the database login information from the server_info.txt file.
  5. // Login credentials for MySQL database.
  6. $db_host = $server_info["db_host"]; // Host name
  7. $db_username = $server_info["db_username"]; // Mysql username
  8. $db_password = $server_info["db_password"]; // Mysql password
  9. $db_name = $server_info["db_name"]; // Database name
  10. // Connect to server and select database.
  11. mysql_pconnect($db_host, $db_username, $db_password) or die('cannot connect: ' . print_r(error_get_last()));
  12. mysql_select_db("$db_name")or die("cannot select DB");
  13. // salty function, used for passwords in crypt with SHA
  14. function salt($len=16, $cookie=FALSE) {
  15. if ($cookie) {
  16. // set of characters that look nice in cookies, excluding -, . and _
  17. $pool = array_merge(range('0','9'), range('a', 'z'), range('A','Z'));
  18. } else {
  19. $pool = range('!', '~');
  20. }
  21. $high = count($pool) - 1;
  22. $tmp = '';
  23. for ($c = 0; $c < $len; $c++) {
  24. $tmp .= $pool[rand(0, $high)];
  25. }
  26. return $tmp;
  27. }
  28. if (!function_exists("api_log")) {
  29. function api_log($message) {
  30. global $server_info;
  31. $message = str_replace("\n", "", $message);
  32. $message = str_replace("\r", "", $message);
  33. $message = sprintf("%s - %s", date(DATE_ATOM), $message) . "\n";
  34. error_log($message, 3, $server_info["api_log"]);
  35. }
  36. }
  37. function contest_query() {
  38. global $contest_sql;
  39. $args = func_get_args();
  40. if (count($args) >= 1) {
  41. $query_name = $args[0];
  42. if (count($args) > 1) {
  43. $query_args = array_map('mysql_real_escape_string',
  44. array_slice($args, 1));
  45. $query = vsprintf($contest_sql[$query_name], $query_args);
  46. } else {
  47. $query = $contest_sql[$query_name];
  48. }
  49. $result = mysql_query($query);
  50. if (!$result) {
  51. api_log("Contest Query Error: ".$query."\n".mysql_error());
  52. }
  53. return $result;
  54. }
  55. }
  56. function check_credentials($username, $password) {
  57. $query = "
  58. SELECT *
  59. FROM user u
  60. WHERE
  61. username='$username' AND
  62. activated = 1
  63. ";
  64. $result = mysql_query($query);
  65. if( $user = mysql_fetch_assoc( $result ) ) {
  66. if (crypt($password, $user['password']) == $user['password']) {
  67. $_SESSION['username'] = $user['username'];
  68. $_SESSION['admin'] = $user['admin'];
  69. $_SESSION['user_id'] = $user['user_id'];
  70. return true;
  71. } else {
  72. return false;
  73. }
  74. } else {
  75. return false;
  76. }
  77. }
  78. function check_reset_credentials($username, $reset) {
  79. $query = "
  80. SELECT *
  81. FROM user u
  82. WHERE
  83. username='$username' AND
  84. activated = 1
  85. ";
  86. $result = mysql_query($query);
  87. if( $user = mysql_fetch_assoc( $result ) ) {
  88. if (crypt($password, $user['reset']) == $user['reset']) {
  89. $_SESSION['username'] = $user['username'];
  90. $_SESSION['admin'] = $user['admin'];
  91. $_SESSION['user_id'] = $user['user_id'];
  92. return true;
  93. } else {
  94. return false;
  95. }
  96. } else {
  97. return false;
  98. }
  99. }
  100. /*
  101. * Checks if stored in cookie value is right, logs in user if so.
  102. * Updates database and browser with new expiration date
  103. * @since 28 Oct 2011 bear@deepshiftlabs.com
  104. */
  105. function check_credentials_cookie($user_id, $login_cookie) {
  106. // $login_cookie is not encrypted nor stored in the database
  107. // $user_cookie['cookie'] is encrypted
  108. $user_cookies = contest_query("select_user_cookies", $user_id);
  109. while ($user = mysql_fetch_assoc($user_cookies)) {
  110. if (crypt($login_cookie, $user['cookie']) == $user['cookie']) {
  111. // found valid cookie, reset expire date
  112. contest_query("update_user_cookie", $user_id, $user['cookie']);
  113. setcookie('uid', $login_cookie, time()+60*60*24*5);
  114. // update session vars
  115. $_SESSION['username'] = $user['username'];
  116. $_SESSION['admin'] = $user['admin'];
  117. $_SESSION['user_id'] = $user['user_id'];
  118. $_SESSION['cookie'] = $user['cookie'];
  119. return true;
  120. }
  121. }
  122. return false;
  123. }
  124. /*
  125. * Generates and stores cookie for user in database and browser
  126. * @return string cookie_value if success, NULL otherwise
  127. * @since 28 Oct 2011 bear@deepshiftlabs.com
  128. */
  129. function create_user_cookie() {
  130. if (isset($_SESSION['user_id'])) {
  131. $user_id = $_SESSION['user_id'];
  132. $login_cookie = $user_id . "-" . salt(32, true);
  133. $encrytped_cookie = crypt($login_cookie, '$6$rounds=54321$' . salt() . '$');
  134. if (contest_query("insert_user_cookie", $user_id, $encrytped_cookie)) {
  135. setcookie('uid', $login_cookie, time()+60*60*24*5, '', '', false, true);
  136. $_SESSION['cookie'] = $encrytped_cookie;
  137. return $login_cookie;
  138. } else {
  139. return NULL;
  140. }
  141. }
  142. }
  143. function delete_user_cookie() {
  144. if (isset($_SESSION['user_id']) && isset($_SESSION['cookie'])) {
  145. contest_query("delete_user_cookie", $_SESSION['user_id'], $_SESSION['cookie']);
  146. }
  147. }
  148. ?>