connect_errno) { die("Failed to connect to MySQL. Error Code: $mysqli->connect_errno, Error Message: $mysqli->connect_error"); } return $mysqli; } function fail(string $error) { header("Location: /password.php?ErrorMessage=$error"); } function success(string $msg) { header("Location: /password.php?SuccessMessage=$msg"); } function confirmed(string $msg) { header("Location: /password_success.php?ConfirmedMessage=$msg"); } if (isset($_GET['token_key'])){ $token_key = trim($_GET['token_key']); $password = trim($_GET['pass']); if (isset($token_key)) { global $mysql_database; $context = create_database_connection(); $statement = $context->prepare("select email, username from $mysql_database.account where token_key = ?"); $statement->bind_param('s', $token_key); $statement->execute(); $result = $statement->get_result(); $statement->close(); while ($row = $result->fetch_assoc()) { $check_username = $row; } // $secret_key = sha1(strtoupper($check_username["username"]) . ':' . strtoupper($password)); $normalised_username = strtoupper($check_username["username"]); $normalised_password = strtoupper($password); $secret_key = sha1("$normalised_username:$normalised_password"); $token_key = null; $statementNew = $context->prepare("update $mysql_database.account set token_key = ?, sha_pass_hash = ?, v = '', s = '', sessionkey = '' where username = ? and email = ?"); $statementNew->bind_param('ssss', $token_key, $secret_key, $check_username['username'], $check_username['email']); $statementNew->execute(); $resultNew = $statementNew->get_result(); $statementNew->close(); confirmed('Confirmed.'); } } if (isset($_POST["Username"]) && isset($_POST["EmailAddress"])) { $account_name = trim(filter_input(INPUT_POST, 'Username', FILTER_SANITIZE_STRING)); $email_address = trim($_POST["EmailAddress"]); global $mysql_database; $context = create_database_connection(); if ($email_address) { $statement = $context->prepare("select email, username from $mysql_database.account where email = ?"); $statement->bind_param('s', $email_address); } else { $statement = $context->prepare("select email, username from $mysql_database.account where username = ?"); $statement->bind_param('s', $account_name); } $statement->execute(); $result = $statement->get_result(); $statement->close(); while ($row = $result->fetch_assoc()) { $check_username = $row; } $password = bin2hex(random_bytes(4)); $token_key = md5($password); $contextNew = create_database_connection(); $statementNew = $contextNew->prepare("update $mysql_database.account set token_key = ? where username = ? and email = ?"); $statementNew->bind_param('sss', $token_key, $check_username['username'], $check_username['email']); $statementNew->execute(); $resultNew = $statementNew->get_result(); $statementNew->close(); $to = $check_username['email']; // Send mail via Sendgrid API - START include_once('../sendgrid-php/apikey.inc.php'); require("../sendgrid-php/vendor/autoload.php"); // Composer version of Sendgrid API $email = new \SendGrid\Mail\Mail(); $email->setFrom("mail@turtle-wow.org", "Turtle WoW"); $email->setSubject("Account recovery on Turtle WoW"); $email->addTo($email_address, $account_name); // 2nd field is the receiver name $email->addHeader("X-Mailer", "SendGrid-API"); // HTML text $email->addContent("text/html", ' Greetings! '.$check_username["username"].'
Someone used your e-mail to reset Turtle WoW password.
If you haven\'t done this, ignore this letter.

Your account:
Username : '.$check_username["username"].'
Password : '.$password.'
To confirm password reset, click here. '); $sendgrid = new SendGrid($sgapikey); //try { $response = $sendgrid->send($email); error_log ('Sendgrid status code: '.$response->statusCode().' to address '.$email_address.''); //print_r($response->headers()); //print $response->body() . "\n"; //} catch (Exception $e) { //error_log ('Caught Sendgrid exception: '.$e->getMessage().' '); //} $logmailNew = create_database_connection(); $statemente = $logmailNew->prepare("update $mysql_database.account set email_status = ? WHERE username=? AND email=?"); $statemente->bind_param('iss', $response->statusCode(), $account_name, $email_address); $statemente->execute(); $affected_rowse = $statemente->affected_rows; $statemente->close(); if ($response->statusCode() !== 202) { error_log ('Saving status code of '.$account.' with email '.$email_address.' failed!'); fail('Error. Please, enter valid login and username.'); } else success('We\'ve sent you a letter. Please check your mailbox!'); // Send mail via Sendgrid API - END /*if (mail($to, $subject, $message, $headers)) success('We\'ve sent you a letter. Please check your mailbox!'); else fail('Error. Please, enter valid login and username.');*/ } ?>