• Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

ghtweb 5


Обратите внимание, что данный пользователь заблокирован! Не совершайте с ним никаких сделок! Перейдите в его профиль, чтобы узнать причину блокировки.
ставим гтвеб и ловим дюпы себе на серв...
 
Any english speaker here ? add on skype: Plykus thanks guys for good work !
 

    kick

    Баллов: 24
    Без комментариев
подскажите пожалуйста что не так сделал:? папка лежит по адрсу /httpdocs/framework
но при запуске пишет Неправильно указан путь до папки framework
 
решил вопрос)) спс за помощь.
это не катит:)
 
Извиняюсь за некропост, но не хотелось плодить темы. Нормально ли то, что ghtweb хранит пароли в базе в явном виде? То есть достаточно ломануть базу сайта и поиметь все пароли?.

Вопрос закрыт

Извиняюсь за некропост, но не хотелось плодить темы. Нормально ли то, что ghtweb хранит пароли в базе в явном виде? То есть достаточно ломануть базу сайта и поиметь все пароли?.

Проблема актуальна... Куда смотреть?

Суть такая:
  1. При реге пароль не хешируется.
  2. Если сменить через смену пароля на сайте, то новый пасс хешируется...
 

Вложения

  • gfhjk.jpg
    gfhjk.jpg
    77,1 КБ · Просмотры: 241
Последнее редактирование модератором:
Проблема актуальна... Куда смотреть?

Суть такая:
1) При реге пароль не хешируется.
2) Если сменить через смену пароля на сайте, то новый пасс хешируется...
Топ обвязка :D :D, смысл тогда от неё? Ну если она написана хоть как то на контроллерах то смотрите контроллер регистрации и делайте, что то типо такого
Код:
 'password' => bcrypt($data['password']),
 
Топ обвязка :D :D, смысл тогда от неё? Ну если она написана хоть как то на контроллерах то смотрите контроллер регистрации и делайте, что то типо такого
Код:
 'password' => bcrypt($data['password']),

Да огонь...:Happy:

protected/modules/register
<?php

/**
* Class RegisterForm
*
* @property Gs[] $gs_list
* @property int $gs_id
* @property Lineage $l2
* @property string $prefix
* @property string $login
* @property string $password
* @property string $re_password
* @property string $email
* @property string $referer
* @property string $verifyCode
* @property Users $refererInfo
*/
class RegisterForm extends CFormModel
{
/**
* @var Gs[]
*/
public $gs_list = array();

/**
* @var int
*/
public $gs_id;

/**
* @var Lineage
*/
public $l2;

/**
* @var string
*/
public $prefix;

/**
* @var string
*/
public $login;

/**
* @var string
*/
public $password;

/**
* @var string
*/
public $re_password;

/**
* @var string
*/
public $email;

/**
* @var string
*/
public $referer = '';

/**
* @var string
*/
public $verifyCode;

/**
* @var Users
*/
public $refererInfo;



public function rules()
{
$rules = array(
array('gs_id,login,password,re_password,email', 'filter', 'filter' => 'trim'),
array('gs_id,login,password,re_password,email', 'required'),
array('login', 'length', 'min' => Users::LOGIN_MIN_LENGTH, 'max' => Users::LOGIN_MAX_LENGTH),
array('password', 'length', 'min' => Users::pASSWORD_MIN_LENGTH, 'max' => Users::pASSWORD_MAX_LENGTH),
array('re_password', 'length', 'min' => Users::pASSWORD_MIN_LENGTH, 'max' => Users::pASSWORD_MAX_LENGTH),
array('re_password', 'compare', 'compareAttribute' => 'password', 'message' => Yii::t('main', 'Поля «{compareAttribute}» и «{attribute}» не совпадают.')),
array('email', 'email', 'message' => Yii::t('main', 'Введите корректный Email адрес.')),
array('email', 'checkBadEmail'),
array('login', 'checkLoginChars'),
array('gs_id', 'gsIsExists'),
array('login', 'loginUnique'),
);

// Captcha
$captcha = config('register.captcha.allow') && CCaptcha::checkRequirements();

if($captcha)
{
$rules[] = array('verifyCode', 'filter', 'filter' => 'trim');
$rules[] = array('verifyCode', 'required');
$rules[] = array('verifyCode', 'validators.CaptchaValidator');
}

// Prefix
if(config('prefixes.allow') && config('prefixes.length') > 0 && config('prefixes.count_for_list') > 0)
{
$rules[] = array('prefix', 'filter', 'filter' => 'trim');
$rules[] = array('prefix', 'required');
$rules[] = array('prefix', 'checkPrefix');
}

// Referral program
if(config('referral_program.allow'))
{
$rules[] = array('referer', 'filter', 'filter' => 'trim');
$rules[] = array('referer', 'length', 'allowEmpty' => TRUE, 'min' => Users::REFERER_MIN_LENGTH, 'max' => Users::REFERER_MAX_LENGTH);
$rules[] = array('referer', 'refererIsExists');
}

// Unique email
if(!config('register.multiemail'))
{
$rules[] = array('email', 'emailUnique');
}

return $rules;
}

/**
* Проверка префикса
*
* @param string $attr
*/
public function checkPrefix($attr)
{
if(!$this->hasErrors($attr))
{
$prefix = $this->$attr;
$prefixes = user()->getState('prefixes');

if(is_array($prefixes) && !in_array($prefix, $prefixes))
{
$this->addError($attr, Yii::t('main', 'Выберите префикс для логина.'));
}

user()->setState('prefixes', NULL);
}
}

/**
* Проверка символов в логине
*
* @param string $attr
*/
public function checkLoginChars($attr)
{
if(!$this->hasErrors($attr))
{
$pattern = '/^[' . Users::LOGIN_REGEXP . ']{' . Users::LOGIN_MIN_LENGTH . ',' . Users::LOGIN_MAX_LENGTH . '}$/';

if(!preg_match($pattern, $this->$attr))
{
$this->addError($attr, Yii::t('main', 'В логине разрешены следующие символы: :chars', array(':chars' => Users::LOGIN_REGEXP)));
}
}
}

protected function afterConstruct()
{
$dependency = new CDbCacheDependency("SELECT COUNT(0), MAX(UNIX_TIMESTAMP(updated_at)) FROM {{gs}} WHERE status = :status");
$dependency->params = array('status' => ActiveRecord::STATUS_ON);
$dependency->reuseDependentData = TRUE;

$res = Gs::model()->cache(3600 * 24, $dependency)->opened()->findAll();

if($res)
{
foreach($res as $gs)
{
$this->gs_list[$gs['id']] = $gs;
}
}

unset($res, $gs);

if(count($this->gs_list) == 1)
{
$this->gs_id = key($this->gs_list);
}

parent::afterConstruct();
}

/**
* Проверка реферера
*
* @param attributes
* @param $params
*/
public function refererIsExists($attributes, $params)
{
$cookieName = app()->params['cookie_referer_name'];
$cookie = request()->cookies[$cookieName];

if($this->referer == '' && isset($cookie->value))
{
$this->referer = $cookie->value;
}

if($this->referer != '')
{
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$this->refererInfo = Users::model()->find('referer = :referer AND ls_id = :ls_id', array(
'referer' => $this->referer,
'ls_id' => $lsId,
));

if(!$this->refererInfo)
{
$this->referer = '';
}
}
}

/**
* Проверка сервера
*
* @param $attributes
* @param $params
*/
public function gsIsExists($attributes, $params)
{
if(!isset($this->gs_list[$this->gs_id]))
{
$this->addError(__FUNCTION__, Yii::t('main', 'Выберите сервер.'));
}
}

/**
* Проверка Email адреса в черном списке
*
* @param $attribute
* @param $params
*/
public function checkBadEmail($attribute, $params)
{
if(!$this->hasErrors())
{
if(is_file($path = Yii::getPathOfAlias('app.data') . '/badEmails.txt') && is_readable($path))
{
$emails = file_get_contents($path);
$emails = explode("\n", $emails);
$email = explode('@', $this->email);
$email = $email[1];

foreach($emails as $v)
{
$v = trim($v);

if($v == $email)
{
$this->addError(__FUNCTION__, Yii::t('main', 'Email :email в списке запрещенных, введите другой.', array(':email' => '<b>' . $this->email . '</b>')));
break;
}
}
}
}
}

/**
* Проверка Email на уникальность
*
* @param $attribute
* @param $params
*/
public function emailUnique($attribute, $params)
{
if(!$this->hasErrors())
{
$email = $this->email;
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$res = db()->createCommand("SELECT COUNT(0) FROM {{users}} WHERE email = :email AND ls_id = :ls_id LIMIT 1")
->bindParam('email', $email, PDO::pARAM_STR)
->bindParam('ls_id', $lsId, PDO::pARAM_INT)
->queryScalar();

if($res)
{
$this->addError('email', Yii::t('main', 'Email :email уже существует.', array(
':email' => '<b>' . $this->email . '</b>'
)));
}
}
}

/**
* Проверка Логина на уникальность
*
* @param $attribute
* @param $params
*/
public function loginUnique($attribute, $params)
{
if(!$this->hasErrors())
{
$login = $this->getLogin();
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$res = db()->createCommand("SELECT COUNT(0) FROM {{users}} WHERE login = :login AND ls_id = :ls_id LIMIT 1")
->bindParam('login', $login, PDO::pARAM_STR)
->bindParam('ls_id', $lsId, PDO::pARAM_INT)
->queryScalar();

if($res)
{
$this->addError('login', Yii::t('main', 'Логин :login уже существует.', array(
':login' => '<b>' . $login . '</b>'
)));

return;
}

// Проверка логина на сервере
try
{
$this->l2 = l2('ls', $lsId)->connect();

$res = $this->l2->getDb()->createCommand("SELECT COUNT(0) FROM {{accounts}} WHERE login = :login LIMIT 1")
->bindParam('login', $login, PDO::pARAM_STR)
->queryScalar();

if($res)
{
$this->addError('login', Yii::t('main', 'Логин :login уже существует.', array(':login' => '<b>' . $login . '</b>')));
}
}
catch(Exception $e)
{
$this->addError('login', $e->getMessage());
}
}
}

public function attributeLabels()
{
return array(
'gs_id' => Yii::t('main', 'Сервер'),
'prefix' => Yii::t('main', 'Префикс'),
'login' => Yii::t('main', 'Логин'),
'password' => Yii::t('main', 'Пароль'),
're_password' => Yii::t('main', 'Повтор пароля'),
'email' => Yii::t('main', 'Email'),
'referer' => Yii::t('main', 'Реферальный код'),
'verifyCode' => Yii::t('main', 'Код с картинки'),
);
}

public function getPrefixes()
{
$prefixes = array();
$length = config('prefixes.length');

for($i = 0; $i < config('prefixes.count_for_list'); $i++)
{
$prefixes[] = strtolower(randomString($length));
}

user()->setState('prefixes', $prefixes);

return array_combine($prefixes, $prefixes);
}

/**
* Возвращает логин с префиксом
*
* Return string
*/
public function getLogin()
{
return strtolower($this->prefix . $this->login);
}

/**
* Регистрация аккаунта
*/
public function registerAccount()
{
$login = $this->getLogin();
// Регистрация через почту
if(config('register.confirm_email'))
{
$activatedHash = Users::generateActivatedHash();
$user = $this->_createAccount();
notify()->registerStep1($this->email, array(
'hash' => $activatedHash,
));
$cache = new CFileCache();
$cache->init();
$cache->set('registerActivated' . $activatedHash, array(
'user_id' => $user->getPrimaryKey(),
'password' => $this->password,
'email' => $this->email,
), (int) config('register.confirm_email.time') * 60);
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Вы успешно зарегистрировали аккаунт. На почту :email отправлены инструкции по активации аккаута.', array(
':email' => '<b>' . $this->email . '</b>'
)));
}
else
{
$ls_transaction = $this->l2->getDb()->beginTransaction();
try
{
// Создаю аккаунт на сервере
$this->l2->insertAccount($login, $this->password);
$user = $this->_createAccount();
notify()->registerNoEmailActivated($this->email, array(
'server_name' => $this->gs_list[$this->gs_id]['name'],
'login' => $login,
'password' => $this->password,
'referer' => $user->referer,
));
$ls_transaction->commit();
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Вы успешно зарегистрировали аккаунт. Приятной игры.'));
//$this->downloadFileInfoAfterRegister();
}
catch(Exception $e)
{
$ls_transaction->rollback();
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.'));
Yii::log($e->getMessage(), CLogger::LEVEL_ERROR, __FILE__ . '::' . __LINE__);
}
}
return TRUE;
}

/**
* Загрузка файла с данными после регистрации
*
* Return void
*/
public function downloadFileInfoAfterRegister()
{
$gs = $this->gs_list[$this->gs_id];

$fileName = time() . '.txt';

$body = Yii::t('main', 'Логин') . ": " . $this->getLogin() . "\r\n" .
Yii::t('main', 'Пароль') . ": " . $this->password . "\r\n" .
Yii::t('main', 'Сервер') . ": " . CHtml::encode($gs['name']);

request()->sendFile($fileName, $body, 'text/plain', FALSE);
}

/**
* Создание аккаунта на сайте
*
* Return Users
*/
private function _createAccount()
{
$transaction = db()->beginTransaction();

$login = $this->getLogin();

try
{
// Создаю нового юзера
$user = new Users();

$user->login = $login;
$user->password = $this->password;
$user->email = $this->email;
$user->activated = (config('register.confirm_email') ? Users::STATUS_INACTIVATED : Users::STATUS_ACTIVATED);
$user->role = Users::ROLE_DEFAULT;
$user->ls_id = $this->gs_list[$this->gs_id]['login_id'];

$user->save(FALSE);

// Referer
if($this->referer != '' && $this->refererInfo)
{
$referals = new Referals();

$referals->referer = $this->refererInfo->getPrimaryKey();
$referals->referal = $user->getPrimaryKey();

$referals->save(FALSE);
}

// Удаляю реферальную куку
if(isset(request()->cookies[app()->params['cookie_referer_name']]))
{
unset(request()->cookies[app()->params['cookie_referer_name']]);
}

$transaction->commit();

return $user;
}
catch(Exception $e)
{
$transaction->rollback();

// Удаляю созданный аккаунт на сервере
$this->l2->getDb()->createCommand("DELETE FROM {{accounts}} WHERE login = :login LIMIT 1")
->bindParam('login', $login, PDO::pARAM_STR)
->execute();

user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.'));

return FALSE;
}
}
}

<?php
class DefaultController extends FrontendBaseController
{
public function actionIndex()
{
if(!config('register.allow'))
{
throw new CHttpException(404, Yii::t('main', 'Регистрация отключена.'));
}
$formModel = new RegisterForm();
if(!$formModel->gs_list)
{
throw new CHttpException(404, Yii::t('main', 'Регистрация невозможна из за отсутствия серверов.'));
}
if(isset($_POST['RegisterForm']))
{
$formModel->setAttributes($_POST['RegisterForm']);
if($formModel->validate())
{
$formModel->registerAccount();
$this->refresh();
}
}
$this->render('//register', array(
'model' => $formModel,
));
}
public function actionActivated($_hash)
{
$cache = new CFileCache();
$cache->init();
$hash = $cache->get('registerActivated' . $_hash);
$cache->delete('registerActivated' . $_hash);
// Ключ не найден, возможно пытаются подобрать или истекло время отведенное для активации аккаунта
if($hash === FALSE)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Ключ для активации аккаунта не найден.'));
$this->redirect(array('index'));
}
$user = Users::model()->findByPk($hash['user_id']);
if(!$user)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт не найден.'));
}
elseif($user->isActivated())
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт уже активирован.'));
}
else
{
// Создаю игровой аккаунт
try
{
$l2 = l2('ls', $user->ls_id)->connect();
$l2->insertAccount($user->login, $hash['password']);
$user->activated = Users::STATUS_ACTIVATED;
$user->save(FALSE);
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Активация аккаунта прошла успешно. Приятной игры!'));
notify()->registerStep2($hash['email'], array(
'login' => $user->login,
'password' => $hash['password'],
));
}
catch(Exception $e)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, $e->getMessage());
}
}
$this->redirect(array('index'));
}
}

Насколько я понимаю копать нужно здесь?
 
  1. Запрещено публиковать исходный код без BB-кода — CODE.
 
Топ обвязка :D :D, смысл тогда от неё? Ну если она написана хоть как то на контроллерах то смотрите контроллер регистрации и делайте, что то типо такого
Код:
 'password' => bcrypt($data['password']),
всё там есть, называется нехрен юзать шару, шара это так чисто только для ознакомления, ну хотя да спорить не буду цмс морально уже устарела но для ознакомления пойдёт, выйдет новая версия там будет поинтереснее
 

  1. Запрещено публиковать исходный код без BB-кода — CODE.

Как исправить? В будущем буду аккуратнее:)

всё там есть, называется нехрен юзать шару, шара это так чисто только для ознакомления, ну хотя да спорить не буду цмс морально уже устарела но для ознакомления пойдёт, выйдет новая версия там будет поинтереснее

Вот я и взял для ознакомления, а там такая шляпа) После этого как-то доверие к этой CMS пропадает....
 
Код:
<?php

/**
* Class RegisterForm
*
* @property Gs[] $gs_list
* @property int $gs_id
* @property Lineage $l2
* @property string $prefix
* @property string $login
* @property string $password
* @property string $re_password
* @property string $email
* @property string $referer
* @property string $verifyCode
* @property Users $refererInfo
*/
class RegisterForm extends CFormModel
{
/**
* @var Gs[]
*/
public $gs_list = array();

/**
* @var int
*/
public $gs_id;

/**
* @var Lineage
*/
public $l2;

/**
* @var string
*/
public $prefix;

/**
* @var string
*/
public $login;

/**
* @var string
*/
public $password;

/**
* @var string
*/
public $re_password;

/**
* @var string
*/
public $email;

/**
* @var string
*/
public $referer = '';

/**
* @var string
*/
public $verifyCode;

/**
* @var Users
*/
public $refererInfo;



public function rules()
{
$rules = array(
array('gs_id,login,password,re_password,email', 'filter', 'filter' => 'trim'),
array('gs_id,login,password,re_password,email', 'required'),
array('login', 'length', 'min' => Users::LOGIN_MIN_LENGTH, 'max' => Users::LOGIN_MAX_LENGTH),
array('password', 'length', 'min' => Users::PASSWORD_MIN_LENGTH, 'max' => Users::PASSWORD_MAX_LENGTH),
array('re_password', 'length', 'min' => Users::PASSWORD_MIN_LENGTH, 'max' => Users::PASSWORD_MAX_LENGTH),
array('re_password', 'compare', 'compareAttribute' => 'password', 'message' => Yii::t('main', 'Поля «{compareAttribute}» и «{attribute}» не совпадают.')),
array('email', 'email', 'message' => Yii::t('main', 'Введите корректный Email адрес.')),
array('email', 'checkBadEmail'),
array('login', 'checkLoginChars'),
array('gs_id', 'gsIsExists'),
array('login', 'loginUnique'),
);

// Captcha
$captcha = config('register.captcha.allow') && CCaptcha::checkRequirements();

if($captcha)
{
$rules[] = array('verifyCode', 'filter', 'filter' => 'trim');
$rules[] = array('verifyCode', 'required');
$rules[] = array('verifyCode', 'validators.CaptchaValidator');
}

// Prefix
if(config('prefixes.allow') && config('prefixes.length') > 0 && config('prefixes.count_for_list') > 0)
{
$rules[] = array('prefix', 'filter', 'filter' => 'trim');
$rules[] = array('prefix', 'required');
$rules[] = array('prefix', 'checkPrefix');
}

// Referral program
if(config('referral_program.allow'))
{
$rules[] = array('referer', 'filter', 'filter' => 'trim');
$rules[] = array('referer', 'length', 'allowEmpty' => TRUE, 'min' => Users::REFERER_MIN_LENGTH, 'max' => Users::REFERER_MAX_LENGTH);
$rules[] = array('referer', 'refererIsExists');
}

// Unique email
if(!config('register.multiemail'))
{
$rules[] = array('email', 'emailUnique');
}

return $rules;
}

/**
* Проверка префикса
*
* @param string $attr
*/
public function checkPrefix($attr)
{
if(!$this->hasErrors($attr))
{
$prefix = $this->$attr;
$prefixes = user()->getState('prefixes');

if(is_array($prefixes) && !in_array($prefix, $prefixes))
{
$this->addError($attr, Yii::t('main', 'Выберите префикс для логина.'));
}

user()->setState('prefixes', NULL);
}
}

/**
* Проверка символов в логине
*
* @param string $attr
*/
public function checkLoginChars($attr)
{
if(!$this->hasErrors($attr))
{
$pattern = '/^[' . Users::LOGIN_REGEXP . ']{' . Users::LOGIN_MIN_LENGTH . ',' . Users::LOGIN_MAX_LENGTH . '}$/';

if(!preg_match($pattern, $this->$attr))
{
$this->addError($attr, Yii::t('main', 'В логине разрешены следующие символы: :chars', array(':chars' => Users::LOGIN_REGEXP)));
}
}
}

protected function afterConstruct()
{
$dependency = new CDbCacheDependency("SELECT COUNT(0), MAX(UNIX_TIMESTAMP(updated_at)) FROM {{gs}} WHERE status = :status");
$dependency->params = array('status' => ActiveRecord::STATUS_ON);
$dependency->reuseDependentData = TRUE;

$res = Gs::model()->cache(3600 * 24, $dependency)->opened()->findAll();

if($res)
{
foreach($res as $gs)
{
$this->gs_list[$gs['id']] = $gs;
}
}

unset($res, $gs);

if(count($this->gs_list) == 1)
{
$this->gs_id = key($this->gs_list);
}

parent::afterConstruct();
}

/**
* Проверка реферера
*
* @param attributes
* @param $params
*/
public function refererIsExists($attributes, $params)
{
$cookieName = app()->params['cookie_referer_name'];
$cookie = request()->cookies[$cookieName];

if($this->referer == '' && isset($cookie->value))
{
$this->referer = $cookie->value;
}

if($this->referer != '')
{
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$this->refererInfo = Users::model()->find('referer = :referer AND ls_id = :ls_id', array(
'referer' => $this->referer,
'ls_id' => $lsId,
));

if(!$this->refererInfo)
{
$this->referer = '';
}
}
}

/**
* Проверка сервера
*
* @param $attributes
* @param $params
*/
public function gsIsExists($attributes, $params)
{
if(!isset($this->gs_list[$this->gs_id]))
{
$this->addError(__FUNCTION__, Yii::t('main', 'Выберите сервер.'));
}
}

/**
* Проверка Email адреса в черном списке
*
* @param $attribute
* @param $params
*/
public function checkBadEmail($attribute, $params)
{
if(!$this->hasErrors())
{
if(is_file($path = Yii::getPathOfAlias('app.data') . '/badEmails.txt') && is_readable($path))
{
$emails = file_get_contents($path);
$emails = explode("\n", $emails);
$email = explode('@', $this->email);
$email = $email[1];

foreach($emails as $v)
{
$v = trim($v);

if($v == $email)
{
$this->addError(__FUNCTION__, Yii::t('main', 'Email :email в списке запрещенных, введите другой.', array(':email' => '<b>' . $this->email . '</b>')));
break;
}
}
}
}
}

/**
* Проверка Email на уникальность
*
* @param $attribute
* @param $params
*/
public function emailUnique($attribute, $params)
{
if(!$this->hasErrors())
{
$email = $this->email;
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$res = db()->createCommand("SELECT COUNT(0) FROM {{users}} WHERE email = :email AND ls_id = :ls_id LIMIT 1")
->bindParam('email', $email, PDO::PARAM_STR)
->bindParam('ls_id', $lsId, PDO::PARAM_INT)
->queryScalar();

if($res)
{
$this->addError('email', Yii::t('main', 'Email :email уже существует.', array(
':email' => '<b>' . $this->email . '</b>'
)));
}
}
}

/**
* Проверка Логина на уникальность
*
* @param $attribute
* @param $params
*/
public function loginUnique($attribute, $params)
{
if(!$this->hasErrors())
{
$login = $this->getLogin();
$lsId = $this->gs_list[$this->gs_id]['login_id'];

$res = db()->createCommand("SELECT COUNT(0) FROM {{users}} WHERE login = :login AND ls_id = :ls_id LIMIT 1")
->bindParam('login', $login, PDO::PARAM_STR)
->bindParam('ls_id', $lsId, PDO::PARAM_INT)
->queryScalar();

if($res)
{
$this->addError('login', Yii::t('main', 'Логин :login уже существует.', array(
':login' => '<b>' . $login . '</b>'
)));

return;
}

// Проверка логина на сервере
try
{
$this->l2 = l2('ls', $lsId)->connect();

$res = $this->l2->getDb()->createCommand("SELECT COUNT(0) FROM {{accounts}} WHERE login = :login LIMIT 1")
->bindParam('login', $login, PDO::PARAM_STR)
->queryScalar();

if($res)
{
$this->addError('login', Yii::t('main', 'Логин :login уже существует.', array(':login' => '<b>' . $login . '</b>')));
}
}
catch(Exception $e)
{
$this->addError('login', $e->getMessage());
}
}
}

public function attributeLabels()
{
return array(
'gs_id' => Yii::t('main', 'Сервер'),
'prefix' => Yii::t('main', 'Префикс'),
'login' => Yii::t('main', 'Логин'),
'password' => Yii::t('main', 'Пароль'),
're_password' => Yii::t('main', 'Повтор пароля'),
'email' => Yii::t('main', 'Email'),
'referer' => Yii::t('main', 'Реферальный код'),
'verifyCode' => Yii::t('main', 'Код с картинки'),
);
}

public function getPrefixes()
{
$prefixes = array();
$length = config('prefixes.length');

for($i = 0; $i < config('prefixes.count_for_list'); $i+:-)
{
$prefixes[] = strtolower(randomString($length));
}

user()->setState('prefixes', $prefixes);

return array_combine($prefixes, $prefixes);
}

/**
* Возвращает логин с префиксом
*
* @return string
*/
public function getLogin()
{
return strtolower($this->prefix . $this->login);
}

/**
* Регистрация аккаунта
*/
public function registerAccount()
{
$login = $this->getLogin();
// Регистрация через почту
if(config('register.confirm_email'))
{
$activatedHash = Users::generateActivatedHash();
$user = $this->_createAccount();
notify()->registerStep1($this->email, array(
'hash' => $activatedHash,
));
$cache = new CFileCache();
$cache->init();
$cache->set('registerActivated' . $activatedHash, array(
'user_id' => $user->getPrimaryKey(),
'password' => $this->password,
'email' => $this->email,
), (int) config('register.confirm_email.time') * 60);
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Вы успешно зарегистрировали аккаунт. На почту :email отправлены инструкции по активации аккаута.', array(
':email' => '<b>' . $this->email . '</b>'
)));
}
else
{
$ls_transaction = $this->l2->getDb()->beginTransaction();
try
{
// Создаю аккаунт на сервере
$this->l2->insertAccount($login, $this->password);
$user = $this->_createAccount();
notify()->registerNoEmailActivated($this->email, array(
'server_name' => $this->gs_list[$this->gs_id]['name'],
'login' => $login,
'password' => $this->password,
'referer' => $user->referer,
));
$ls_transaction->commit();
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Вы успешно зарегистрировали аккаунт. Приятной игры.'));
//$this->downloadFileInfoAfterRegister();
}
catch(Exception $e)
{
$ls_transaction->rollback();
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.'));
Yii::log($e->getMessage(), CLogger::LEVEL_ERROR, __FILE__ . '::' . __LINE__);
}
}
return TRUE;
}

/**
* Загрузка файла с данными после регистрации
*
* @return void
*/
public function downloadFileInfoAfterRegister()
{
$gs = $this->gs_list[$this->gs_id];

$fileName = time() . '.txt';

$body = Yii::t('main', 'Логин') . ": " . $this->getLogin() . "\r\n" .
Yii::t('main', 'Пароль') . ": " . $this->password . "\r\n" .
Yii::t('main', 'Сервер') . ": " . CHtml::encode($gs['name']);

request()->sendFile($fileName, $body, 'text/plain', FALSE);
}

/**
* Создание аккаунта на сайте
*
* @return Users
*/
private function _createAccount()
{
$transaction = db()->beginTransaction();

$login = $this->getLogin();

try
{
// Создаю нового юзера
$user = new Users();

$user->login = $login;
$user->password = $this->password;
$user->email = $this->email;
$user->activated = (config('register.confirm_email') ? Users::STATUS_INACTIVATED : Users::STATUS_ACTIVATED);
$user->role = Users::ROLE_DEFAULT;
$user->ls_id = $this->gs_list[$this->gs_id]['login_id'];

$user->save(FALSE);

// Referer
if($this->referer != '' && $this->refererInfo)
{
$referals = new Referals();

$referals->referer = $this->refererInfo->getPrimaryKey();
$referals->referal = $user->getPrimaryKey();

$referals->save(FALSE);
}

// Удаляю реферальную куку
if(isset(request()->cookies[app()->params['cookie_referer_name']]))
{
unset(request()->cookies[app()->params['cookie_referer_name']]);
}

$transaction->commit();

return $user;
}
catch(Exception $e)
{
$transaction->rollback();

// Удаляю созданный аккаунт на сервере
$this->l2->getDb()->createCommand("DELETE FROM {{accounts}} WHERE login = :login LIMIT 1")
->bindParam('login', $login, PDO::PARAM_STR)
->execute();

user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Произошла ошибка! Попробуйте повторить позже.'));

return FALSE;
}
}
}

Код:
<?php
class DefaultController extends FrontendBaseController
{
public function actionIndex()
{
if(!config('register.allow'))
{
throw new CHttpException(404, Yii::t('main', 'Регистрация отключена.'));
}
$formModel = new RegisterForm();
if(!$formModel->gs_list)
{
throw new CHttpException(404, Yii::t('main', 'Регистрация невозможна из за отсутствия серверов.'));
}
if(isset($_POST['RegisterForm']))
{
$formModel->setAttributes($_POST['RegisterForm']);
if($formModel->validate())
{
$formModel->registerAccount();
$this->refresh();
}
}
$this->render('//register', array(
'model' => $formModel,
));
}
public function actionActivated($_hash)
{
$cache = new CFileCache();
$cache->init();
$hash = $cache->get('registerActivated' . $_hash);
$cache->delete('registerActivated' . $_hash);
// Ключ не найден, возможно пытаются подобрать или истекло время отведенное для активации аккаунта
if($hash === FALSE)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Ключ для активации аккаунта не найден.'));
$this->redirect(array('index'));
}
$user = Users::model()->findByPk($hash['user_id']);
if(!$user)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт не найден.'));
}
elseif($user->isActivated())
{
user()->setFlash(FlashConst::MESSAGE_ERROR, Yii::t('main', 'Аккаунт уже активирован.'));
}
else
{
// Создаю игровой аккаунт
try
{
$l2 = l2('ls', $user->ls_id)->connect();
$l2->insertAccount($user->login, $hash['password']);
$user->activated = Users::STATUS_ACTIVATED;
$user->save(FALSE);
user()->setFlash(FlashConst::MESSAGE_SUCCESS, Yii::t('main', 'Активация аккаунта прошла успешно. Приятной игры!'));
notify()->registerStep2($hash['email'], array(
'login' => $user->login,
'password' => $hash['password'],
));
}
catch(Exception $e)
{
user()->setFlash(FlashConst::MESSAGE_ERROR, $e->getMessage());
}
}
$this->redirect(array('index'));
}
}
Как-то так
 
Как исправить? В будущем буду аккуратнее:)



Вот я и взял для ознакомления, а там такая шляпа) После этого как-то доверие к этой CMS пропадает....
Не знаю, когда устанавливаешь там запрашивает какой метод шифрования использовать, не понимаю как умудрился пропустить этот пункт. Там 2 типа шифрования это sha1 и whirlpool2 .

Хватит издеваться над человеком :)
 
Последнее редактирование:
спецом щас установил гхт и посмотрел
7d29e7d16ed6f4844471d9cdb7058ad2_1.png
 
Не знаю, когда устанавливаешь там запрашивает какой метод шифрования использовать, не понимаю как умудрился пропустить этот пункт. Там 2 типа шифрования это sha1 и whirlpool2 .

Хватит издеваться над человеком :)

Сухой остаток: переустановка кмс, а точнее тупая замена папки protected (причем той же самой) решила данный вопрос. Теперь все хешируется. А вот при установке кмс такого пункта нет. Всем спасибо!
 
Проблема юзать св...
 
Назад
Сверху Снизу