Esempio n. 1
0
function do_change_password()
{
    global $settings, $error, $changedPassword;
    if ($_POST['password'] != $_POST['password2']) {
        $error = "Your new passwords don't match!";
        return;
    }
    if (!password_policy($_POST['password'], $error2)) {
        $error = $error2;
        return;
    }
    $dbh = $settings->getDatabase();
    $statement = $dbh->prepare("SELECT * FROM users WHERE username = :username;");
    $statement->execute(array(':username' => Session::Get()->getUsername()));
    $row = $statement->fetch(PDO::FETCH_ASSOC);
    if (!$row || !password_verify($_POST['old_password'], $row['password'])) {
        $error = "Your old password is incorrect!";
        return;
    }
    $statement = $dbh->prepare("UPDATE users SET password = :password WHERE username = :username;");
    $statement->execute(array(':username' => Session::Get()->getUsername(), ':password' => password_hash($_POST['password'], PASSWORD_DEFAULT)));
    $changedPassword = true;
}
Esempio n. 2
0
    $dbh = $settings->getDatabase();
    $statement = $dbh->prepare("SELECT * FROM users WHERE username = :username;");
    $statement->execute(array(':username' => $_POST['reset']));
    if (!($row = $statement->fetch(PDO::FETCH_ASSOC))) {
        $error = 'Unknown user';
    } else {
        if ($row['reset_password_timestamp'] !== NULL && abs($row['reset_password_timestamp'] - time()) > 3600) {
            $error = 'The token is only valid for one hour';
        } else {
            if ($row['reset_password_token'] === NULL || hash_hmac('sha256', $row['password'], $row['reset_password_token']) !== $_POST['token']) {
                $error = 'Invalid token';
            } else {
                if ($_POST['password'] !== $_POST['password2']) {
                    $error = 'The passwords doesn\'t match';
                } else {
                    if (!password_policy($_POST['password'], $error2)) {
                        $error = $error2;
                    }
                }
            }
        }
    }
    if (!isset($error)) {
        $statement = $dbh->prepare("UPDATE users SET password = :password, reset_password_token = NULL, reset_password_timestamp = NULL WHERE username = :username;");
        $statement->execute(array(':username' => $_POST['reset'], ':password' => password_hash($_POST['password'], PASSWORD_DEFAULT)));
        $reset = true;
    }
}
require BASE . '/inc/smarty.php';
if ($error) {
    $smarty->assign('error', $error);