Веб обвязки для последних версий ядра TrinityCore

Meramaf

GamersLast.com
Команда форума
Администратор
Модератор
Всем привет.

Столкнулся с такой проблемой. Все веб обвязки и WoW CMS довольно устарели и долгое время не обновляются. Имеется куча старых полноценных сайтов, но не получается их настроить под последние сборки ядер Trinity, так как в старых ядрах использовалась таблица sha_pass а в новых она была заменена на
таблицы salt и verifier облазил интернет и нашел фикс этого обновления для страниц регистрации и логина.

PHP:
<?php

function Register()
{
    if(isset($_POST['register']))
    {
        if(!empty($_POST['username']) && !empty($_POST['email']) && !empty($_POST['password']) && !empty($_POST['re-password']))
        {
            function ValidateEmail($email)
            {
                if(filter_var($email, FILTER_VALIDATE_EMAIL))
                {
                    if(strlen($email) <= 255)
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                return false;
            }

            function ValidateUsername($username)
            {
                if(strlen($username) <= 32)
                {
                    if(ctype_alnum($username))
                    {
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }

                return false;
            }

            function Captcha($secret, $captcha, $lastip)
            {
                $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $captcha . "&remoteip=" . $lastip);
                $decode   = json_decode($response, true);

                if(intval($decode['success']) == 1)
                {
                    return true;
                }

                return false;
            }

            global $con;

            $username   = $_POST['username'];
            $email      = $_POST['email'];
            $password   = $_POST['password'];
            $repassword = $_POST['re-password'];
            $captcha    = $_POST['g-recaptcha-response'];
            $ip_address = $_SERVER['REMOTE_ADDR'];
            $secret     = CAPTCHA_SECRET;
            $expansion  = EXPANSION;

            if(ValidateUsername($username) && ValidateEmail($email))
            {
                $data = $con->prepare('SELECT COUNT(*) FROM account WHERE username = :username OR email = :email');
                $data->execute(array(
                    ':username' => $username,
                    ':email'    => $email
                ));

                if($data->fetchColumn() == 0)
                {
                    if(Captcha($secret, $captcha, $ip_address))
                    {
            //--------------IMPLAMENTED CHANGE-------------------------    
                        // Create new arry to hold salt and verifier and call getRegistrationData passing in $username and $password
            list($salt, $verifier) = getRegistrationData(strtoupper($username), $password);
                        $data = $con->prepare('INSERT INTO account (username, salt, verifier, email, last_ip, expansion)
                        VALUES(:username, :salt, :verifier, :email, :ip, :expansion)');
                        $data->execute(array(
                            ':username'  => $username,
                            ':salt'      => $salt,
              ':verifier'  => $verifier,
                            ':email'     => $email,
                            ':ip'        => $ip_address,
                            ':expansion' => $expansion
                        ));
            //----------------END CHANGE----------------------------

                        echo '<div class="callout success">' . SUCCESS_MESSAGE . '</div>';
                        echo '<div class="callout warning">' . REALMLIST . '</div>';
                    }
                    else
                    {
                        echo '<div class="callout alert">Capctha was invalid!</div>';
                    }
                }
                else
                {
                    echo '<div class="callout alert">Username or Email is already in use!</div>';
                }
            }
            else
            {
                echo '<div class="callout alert">Username or Email is not valid!</div>';
            }
        }
        else
        {
            echo '<div class="callout alert">All fields are required!</div>';
        }
    }
}
//--------------IMPLAMENTED CHANGE-------------------------
// pulled from https://github.com/TrinityCore/account-creator/commit/f2ef6e59c4104ac1685fa817b56870b6df20b4ea
function calculateSRP6Verifier($username, $password, $salt)
{
    // algorithm constants
    $g = gmp_init(7);
    $N = gmp_init('894B645E89E1535BBDAD5B8B290650530801B18EBFBF5E8FAB3C82872A3E9BB7', 16);

    // calculate first hash
    $h1 = sha1(strtoupper($username . ':' . $password), TRUE);

    // calculate second hash
    $h2 = sha1($salt . $h1, TRUE);

    // convert to integer (little-endian)
    $h2 = gmp_import($h2, 1, GMP_LSW_FIRST);

    // g^h2 mod N
    $verifier = gmp_powm($g, $h2, $N);

    // convert back to a byte array (little-endian)
    $verifier = gmp_export($verifier, 1, GMP_LSW_FIRST);

    // pad to 32 bytes, remember that zeros go on the end in little-endian!
    $verifier = str_pad($verifier, 32, chr(0), STR_PAD_RIGHT);

    // done!
    return $verifier;
}

// Returns SRP6 parameters to register this username/password combination with
function getRegistrationData($username, $password)
{
    // generate a random salt
    $salt = random_bytes(32);

    // calculate verifier using this salt
    $verifier = calculateSRP6Verifier($username, $password, $salt);

    // done - this is what you put in the account table!
    return array($salt, $verifier);
}
//----------------END CHANGE----------------------------
?>

1 часть
2 часть
3 часть

оригинальный репозиторий а выше история портирования

Но как я эти строки не вставлял в код страниц, пароль не создавался как положенно. Помогите обновить сайты и я поделюсь на форуме тем что у меня есть если обновлю до актуальных версий!
 
Последнее редактирование:

Meramaf

GamersLast.com
Команда форума
Администратор
Модератор
Более интересует, как подогнать старые сайты под SRP6
Хотел обновить, например, вот этот сайт и не получилось...:(

 
Последнее редактирование:
Верх