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.