Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2011-09-21 20:30:58

Andre
Участник
Зарегистрирован: 2011-05-25
Сообщений: 24
Рейтинг :   
Сайт

Прикрутите капчу, кто в теме. 300 р.

Бюджет 300 рублей. Нужна капча, где только галочку надо поставить. Типа, "я не робот". Думаю, все такие капчи знают, видели.
Возьмётся кто-нибудь?

Не в сети

#2 2011-09-21 20:41:12

infinity237
Модератор
Откуда Russia, Moscow
Зарегистрирован: 2008-11-09
Сообщений: 2,674
Рейтинг :   176 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Лучше тогда уж писать систему "Вопрос - Ответ", как в новом DLE:
4afa0867000b03f315c0b900746bfcce.jpg

Не в сети

#3 2011-09-21 21:11:24

Andre
Участник
Зарегистрирован: 2011-05-25
Сообщений: 24
Рейтинг :   
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Ну нравится мне та капча smile

Не в сети

#4 2011-09-21 21:34:32

Север
Участник
Откуда Дальний Восток
Зарегистрирован: 2009-03-11
Сообщений: 79
Рейтинг :   
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

За проверку вопрос-ответ я тоже дам 300 р.:)


Тех. подержка Vbulletin √ <-- Отзывы

Не в сети

#5 2011-09-21 23:04:31

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Открываем: auth_basic.php
Находим:

array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));

После добавляем:

array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' =>  '','type' => 'checkbox'));

Находим:

// Preprocess login
	 	if (strlen($values['login'])<3) {
	 		// Слишком короткий логин
	 		$msg = $lang['auth_login_short'];
	 		return 0;
	 	}

После добавляем:

if(isset($values['who_bot']) && !empty($values['who_bot']))
		{
			// Дополнительная защита от ботов
	 		$msg = 'Ботам регистрация запрещена';
	 		return 0;
		}

Открываем cmodules.php
Находим:

if ($param['type'] == 'text') {
			$tvars['vars']['input'] = '<textarea name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>'.secure_html($param['value']).'</textarea>';
		} else if ($param['type'] == 'input') {
			$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="text" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
		} else if (($param['type'] == 'password')||($param['type'] == 'hidden')) {
			$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="'.$param['type'].'" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
		} else if ($param['type'] == 'select') {
			$tvars['vars']['input'] = '<select name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>';
			foreach ($param['values'] as $oid => $oval) {
				$tvars['vars']['input'].= '<option value="'.$oid.'"'.($param['value']==$oid?' selected':'').'>'.$oval.'</option>';
			}
			$tvars['vars']['input'].='</select>';
		} else if ($param['type'] = 'manual') {
			$tvars['vars']['input'] = $param['manual'];
		}

Меням на:

if ($param['type'] == 'text') {
			$tvars['vars']['input'] = '<textarea name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>'.secure_html($param['value']).'</textarea>';
		} else if ($param['type'] == 'input') {
			$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="text" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
		} else if ($param['type'] == 'checkbox') {
			$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="checkbox" title="'.$param['title'].'" '.$param['html_flags'].' value="1"  checked="checked"/>';
		} else if (($param['type'] == 'password')||($param['type'] == 'hidden')) {
			$tvars['vars']['input'] = '<input name="'.$param['name'].'" type="'.$param['type'].'" title="'.$param['title'].'" '.$param['html_flags'].' value="'.secure_html($param['value']).'"/>';
		} else if ($param['type'] == 'select') {
			$tvars['vars']['input'] = '<select name="'.$param['name'].'" title="'.$param['title'].'" '.$param['html_flags'].'>';
			foreach ($param['values'] as $oid => $oval) {
				$tvars['vars']['input'].= '<option value="'.$oid.'"'.($param['value']==$oid?' selected':'').'>'.$oval.'</option>';
			}
			$tvars['vars']['input'].='</select>';
		} else if ($param['type'] = 'manual') {
			$tvars['vars']['input'] = $param['manual'];
		}

И всё...

Не в сети

#6 2011-09-21 23:14:28

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

А от кого это спасает? Они же все чекбоксы отмечают всегда

Не в сети

#7 2011-09-21 23:21:03

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Wolverine, Всё может быть, но мне лично помогло на своем форуме от этого спама...

Не в сети

#8 2011-09-22 09:48:36

Andre
Участник
Зарегистрирован: 2011-05-25
Сообщений: 24
Рейтинг :   
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

ROZARD, огромное спасибище!!!

Не в сети

#9 2011-11-20 20:11:13

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Применил - работает, но опять появилась хренотень с письмами. Доходят только на гугловские ящики. Подобное у меня уже было http://ngcms.ru/forum/viewtopic.php?id=1790, тогда вы мне не слабо помогли, сам в коде дуб-дубом. Может подскажите в чём дело, в моём "сложном случае")

Не в сети

#10 2011-11-20 20:14:20

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Burelom, А у хостеров спрашивал?

Не в сети

#11 2011-11-20 20:25:23

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Так ответ примерно тот же: "Аосмотрите дамп почтового запроса в скриптах при отправке:
Есть обязательное условие: поле FROM должно указыввать на почтовый
ящик который реально создан в нашей почтовой системе (т.е. Вы
завели ящик у нас и в поле from указываете его)"
А что я там модернизирую мои проблемы(( Проблема появилась после изменений описанных выше, при изменениях в auth_basic.php, чтот видимо затронуло из прошлых изменений. Хреново хостинг 1 gb дружит с ng-почтой, в новой версии почта работает тоже только после изменения auth_basic.php, как советовали в прошлой ветке. С другими движками всё ок.

Не в сети

#12 2011-11-20 20:31:06

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Эти изменения никак не влияют на отправку почты...

Не в сети

#13 2011-11-20 21:17:46

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Перепроверил, почта работает до изменений. Внёс поправки в cmodules.php - работает, после изменений в auth_basic.php письма перестают приходить, хотя чекбокс работает отлично.

Не в сети

#14 2011-11-20 21:21:39

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Burelom, Скинь мне в личку адрес сайта, попробую сам у тебя зарегистрироваться

Не в сети

#15 2011-11-20 21:35:16

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Пробую сейчас на новом сайте, со всеми настройками по умолчанию и дефолтным шаблоном, чтоб точно убедиться что дело в изменениях auth_basic.php. Если не пойдёт, кину адрес в личку.

Не в сети

#16 2011-11-20 23:41:51

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Хак работает отлично, а вот с функцией sendEmailMessage (auth_basic) в 9.3 лучше не стало, не работает на хостинге 1gb. Попробовал так: http://ngcms.ru/forum/viewtopic.php?id=1790, видимо что-то изменили в плагине, метод уже не работает.

Не в сети

#17 2011-11-20 23:43:46

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Плагин даже не обновлялся..

Не в сети

#18 2011-11-21 00:08:04

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

ROZARD, прикреплённый auth_basic.php (личка) хорошо работает без хака, с хаком пепец. Плагин взял со старого сайта (0.9.2), изменения в нём сделаны по советам из соседней ветки. Поэтому и подумал, что в 0.9.3 что-то поменяли. Понимаю, что у других работает, не все же сидят на 1 gb.

<?php

// Protect against hack attempts
if (!defined('NGCMS')) die ('HAL');


//
// Прописываем свой модуль
//
global $AUTH_METHOD;
global $AUTH_CAPABILITIES;
global $config;

class auth_basic {

	// Осуществить вход
	// $username	= логин
	// $password	= пароль
	// $auto_scan	= если 1, то функция сама должна найти нужные параметры среди POST'ов
	function login($auto_scan = 1, $username = '', $password = '') {
		global $mysql;

	        if ($auto_scan) {
			$username = $_REQUEST['username'];
			$password = $_REQUEST['password'];
		}
		$password = EncodePassword($password);

		$sql = "select * from ".uprefix."_users where name = ".db_squote($username)." and pass=".db_squote($password);
		$row = $mysql->record($sql);

		// Проверяем нужна ли активация
		if ($row['activation']) {
			return 'ERR:NEED.ACTIVATE';
		}

		if ($row) { return $row; }
		return '';
	}

	//
	// Сохранить в БД информацию о том, что пользователь авторизовался
	// $dbrow	= строка из нашей таблицы пользователей
	function save_auth($dbrow) {
		global $config, $mysql, $ip;

        // создаём random cookie
        $auth_cookie = md5((isset($config['crypto_salt'])?$config['crypto_salt']:'').uniqid(rand(),1));

		$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip).", authcookie = ".db_squote($auth_cookie)." where id=".db_squote($dbrow['id']);
		$mysql->query($query);

		// Вставить юзеру куку
		@setcookie('zz_auth', $auth_cookie, ($config['remember']?(time() + 3600 * 24 * 365):0), '/');

		return 1;
	}

	//
	// Проверить авторизацию пользователя
	function check_auth() {
	 	global $config, $mysql, $ip;

	 	$auth_cookie = isset($_COOKIE['zz_auth'])?$_COOKIE['zz_auth']:'';
	 	if (!$auth_cookie) { return ''; }

	 	$query = "select * from ".uprefix."_users where authcookie = ".db_squote($auth_cookie)." limit 1";
	 	$row = $mysql->record($query);

		// Check for "IPLOCK" protection
		if (pluginGetVariable('auth_basic', 'iplock') && ($ip != $row['ip'])) {
			return '';
		}

		// Auth done
	 	if ($row['name']) {
			// Check if we need to update last visit field
	 		if ((pluginGetVariable('auth_basic', 'lastupdate') > 0) && ((time() - $row['last']) > pluginGetVariable('auth_basic', 'lastupdate'))) {
	 			$query = "update ".uprefix."_users set last = ".db_squote(time()).", ip=".db_squote($ip)." where id=".db_squote($row['id']);
	 			$mysql->query($query);
	 		}

	 		return $row;
	 	}
	 	return '';
	}

	//
	// Отменить авторизацию
	function drop_auth() {
	 	global $config, $mysql, $userROW;

	 	$auth_cookie = $_COOKIE['zz_auth'];
	 	if (!$auth_cookie) { return; }

		$mysql->query("update ".uprefix."_users set authcookie = '' where id=".db_squote($userROW['id']));
		@setcookie('zz_auth', '', time() - 3600 * 24 * 365, '/');
	 	return;
	}

	//
	// Вернуть массив параметров, необходимых при регистрации
	function get_reg_params() {
		global $config, $lang;
		$params = array();
		LoadPluginLang('auth_basic', 'auth','','auth');
		array_push($params, array('name' => 'login', title => $lang['auth_login'], 'descr' => $lang['auth_login_descr'],'type' => 'input'));
		if ($config['register_type'] >= 3) {
                	array_push($params, array('name' => 'password', title => $lang['auth_pass'], 'descr' => $lang['auth_pass_descr'], 'type' => 'password'));
			array_push($params, array('name' => 'password2', title => $lang['auth_pass2'], 'descr' => $lang['auth_pass2_descr'],'type' => 'password'));
		}
		array_push($params, array('name' => 'email', title => $lang['auth_email'], 'descr' => $lang['auth_email_descr'],'type' => 'input'));
		array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' =>  '','type' => 'checkbox'));
		return $params;
	}

	//
	// Провести регистрацию
	// params = параметры полученные из get_reg_params()
	// values = значения для вышеуказанных параметрах
	// msg	= сообщение об ошибке
	// Возвращаемые значения:
	// 0 - ошибка
	// 1 - всё ok
	function register(&$params, $values, &$msg) {
	 	global $config, $mysql, $lang, $tpl;

		LoadPluginLang('auth_basic', 'auth','','auth');

	 	$error = 0;
	 	$values['login'] = trim($values['login']);

	 	// Preprocess login
	 	if (strlen($values['login'])<3) {
	 		// Слишком короткий логин
	 		$msg = $lang['auth_login_short'];
	 		return 0;
	 	}
		
		if(isset($values['who_bot']) && !empty($values['who_bot']))
        {
            // Дополнительная защита от ботов
             $msg = 'Ботам регистрация запрещена';
             return 0;
        }

		// Проверяем логин на запрещенные символы
		$csError = false;
		switch (pluginGetVariable('auth_basic', 'regcharset')) {
			case 0:
				if (!preg_match('#^[A-Za-z0-9\.\_\-]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 1:
				if (!preg_match('#^[А-Яа-яёЁ0-9\.\_\-]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 2:
				if (!preg_match('#^[А-Яа-яёЁA-Za-z0-9\.\_\-]+$#s', $values['login'])) {
					print "CASE2-err [".$values['login']."]";
					$csError = true;
				}
				break;
			case 3:
				if (!preg_match('#^[\x21-\x7e\xc0-\xffёЁ]+$#s', $values['login'])) {
					$csError = true;
				}
				break;
			case 4:
				break;

		}


	 	if (preg_match('/[&<>\\"'."'".']/', $values['login']) || $csError) {
	 		// Запрещенные HTML символы
	 		$msg = $lang['auth_login_html'];
	 		return 0;
	 	}


	 	if ($config['register_type'] >= 3) {
	 		if (strlen($values['password']) < 3) {
		 		// Слишком короткий пароль
		 		$msg = $lang['auth_pass_short'];
		 		return 0;

		 	} else if ($values['password'] != $values['password2']) {
		 		// Несовпадение паролей
		 		$msg = $lang['auth_pass_diff'];
		 		return 0;
		 	}
		}

		if ((strlen($values['email']) > 70) || (!preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/", $values['email']))) {
			// Неверный email
			$msg = $lang['auth_email_wrong'];
			return 0;

		}

		$row = $mysql->record("select * from ".uprefix."_users where lower(name)=".db_squote(strtolower($values['login']))." or mail=".db_squote($values['email']));
		if (is_array($row)) {
			// Дублирование логина/email'а
			if (strtolower($row['mail']) == strtolower($values['email'])) {
				// email dup
				$msg = $lang['auth_email_dup'];
				return 0;
			}
			// Если не мыло, то логин
			$msg = $lang['auth_login_dup'];
			return 0;
		}

		// Всё в порядке, регим
		$add_time = time() + ($config['date_adjust'] * 60);

		// Статус пользователя по умолчанию
		$regstatus = intval(pluginGetVariable('auth_basic','regstatus'));
		if (($regstatus < 1)||($regstatus > 4))
			$regstatus = 4;

		// Определяем действия в зависимости от типа регистрации
		switch ($config['register_type']) {

			// 0 - Мгновенная [автогенерация пароля, без email нотификации]
			case 0:
				$newpassword = MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}'), array($values['login'], $newpassword), $lang['auth_reg.success0'])
				));
				break;

			// 1 - Простая [автогенерация пароля, с email нотификацией]
			case 1:
				$newpassword = MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $newpassword);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success1'])
			));
				break;

			// 2 - С подтверждением [автогенерация пароля, пароль отправляется на email адрес и не показывается в админке]
			case 2:
				$newpassword	=	MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($newpassword)).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");
				$userid			=	$mysql->record('select LAST_INSERT_ID() as id');
				$link			=	generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);

				$actlink		=	'<a href="'.$link.'">'.$link.'</a>';

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $newpassword);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $newpassword, $values['email']), $lang['auth_reg.success2'])
			));
				break;

			// 3 - Ручная с нотификацией [ручная генерация пароля, email нотификация]
			case 3:
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '')");

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $values['password']);
				$tvars['regx'] = array(
					'#\[activation\].+?\[\/activation]#is' => '',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
						$values['email'],
						$lang['letter_title'],
						$msg,
						'html',
						'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success3'])
				));

				break;

			// 4 - Ручная с подтверждением [ручная генерация пароля, подтверждение email адреса]
			case 4:
				$actcode		=	MakeRandomPassword();
				$mysql->query("INSERT INTO ".uprefix."_users (name, pass, mail, status, reg, last, activation) VALUES (".db_squote($values['login']).", ".db_squote(EncodePassword($values['password'])).", ".db_squote($values['email']).", ".$regstatus.", '".$add_time."', '', ".db_squote($actcode).")");
				$userid			=	$mysql->record('select LAST_INSERT_ID() as id');
				$link			=	generatePluginLink('core', 'activation', array('userid' => $userid['id'], 'code' => $actcode), array(), false, true);

				$actlink		=	'<a href="'.$link.'">'.$link.'</a>';

				$tvars['vars'] = array( 'login' => $values['login'],
										'home' => home,
										'password' => $values['password'],
										'activate_url' => $actlink);

				$tvars['regx'] = array(
					'#\[activation\](.+?)\[\/activation]#is' => '$1',
				);

				$tpl -> template('register', GetPluginLangDir('auth_basic'));
				$tpl -> vars('register', $tvars);
				$msg = $tpl->show('register');

				sendEmailMessage(
					$values['email'],
					$lang['letter_title'],
					$msg,
					'html',
					'***@***'
				);
				msg(array(
					"text" => $lang['msgo_registered'],
					"info" => str_replace(array('{login}', '{password}', '{email}'), array($values['login'], $values['password'], $values['email']), $lang['auth_reg.success4'])
				));
			//print "<pre>".var_export($lang, true)."</pre>";
		}

		return 1;

	}

	//
	// Вернуть массив параметров, необходимых для восстановления пароля
	function get_restorepw_params() {
		global $config, $lang;
		$params = array();

		LoadPluginLang('auth_basic', 'auth','','auth');
		$mode = pluginGetVariable('auth_basic','restorepw');
		if (!$mode) {
			return false;
			//array_push($params, array('text' => $lang['auth_norestore']));
			//return $params;
	        }

		array_push($params, array('text' => $lang['auth_restore_'.$mode]));
	        if ($mode != 'email') {
			array_push($params, array('name' => 'login', title => $lang['auth_login'],'type' => 'input'));
		}
		if ($mode != 'login') {
			array_push($params, array('name' => 'email', title => $lang['auth_email'],'type' => 'input'));
		}
		return $params;
	}

	//
	// Восстановить пароль
	function restorepw(&$params, $values, &$msg) {
	 	global $config, $mysql, $lang, $tpl;

	 	$error = 0;
	 	$values['login'] = trim($values['login']);
	 	$values['email'] = trim($values['email']);

		LoadPluginLang('auth_basic', 'auth','','auth');
		$mode = pluginGetVariable('auth_basic','restorepw');

	 	if (!$mode) {
	 		$msg = $lang['auth_norestore'];
	 		return 0;
	 	}

	 	$px = array();

		if ($mode != 'email') {
			if (!$values['login']) {
	 			$msg = $lang['auth_login_require'];
	 			return 0;
	 		}
	 		array_push($px, "name = ".db_squote($values['login']));
	 	}

	 	if ($mode != 'login') {
	 		if (!$values['email']) {
				$msg = $lang['auth_email_require'];
				return 0;
			}
	 		array_push($px, "mail = ".db_squote($values['email']));
		}

		$query = "select * from ".uprefix."_users where ".implode(' and ',$px);
		$row = $mysql->record($query);
		if (is_array($row)) {
		 	// Нашли юзера
			$newpassword = MakeRandomPassword();
			$mysql->query("UPDATE ".uprefix."_users SET newpw=".db_squote(EncodePassword($newpassword))." WHERE id=".$row['id']);

			$tvars['vars'] = array( 'login' => $row['name'],
						'home' => home,
						'newpw' => $newpassword);
			$tvars['vars']['pwurl'] = generatePluginLink('core', 'lostpassword', array('userid' => $row['id'], 'code' => EncodePassword($newpassword)), array(), false, true);

			$tpl -> template('restorepw', GetPluginLangDir('auth_basic'));
			$tpl -> vars('restorepw', $tvars);

			sendEmailMessage($row['mail'],$lang['auth_mail_subj'],$tpl->show('restorepw'), false, '***@***');
			msg(array("text" => $lang['msgo_sent']));

			return 1;

		} else {
			$msg = $lang['auth_nouser'];
			return 0;
		}
        }

	//
  // Подтверждение восстановления пароля
  //
  function confirm_restorepw(&$msg, $reqid = NULL, $reqsecret = NULL) {
		global $config, $mysql, $lang, $tpl;

		LoadPluginLang('auth_basic', 'auth','','auth');

	 	$row = $mysql->record("select * from ".uprefix."_users where id = ".db_squote($reqid));
	 	if (is_array($row)) {
	 		if ($reqsecret == $row['newpw']) {
	 			// OK !!!
	 			$msg = $lang['auth_newpw_ok'];
	 			$mysql->query('update '.uprefix.'_users set pass=newpw where id = '.db_squote($reqid));
	 			return 1;
	 		}
	 	}
		$msg = $lang['auth_newpw_fail'];
		return 0;
	}
}

$AUTH_METHOD['basic']	= new auth_basic;
$AUTH_CAPABILITIES['basic'] = array('login' => '1', 'db' => '1');

if (pluginGetVariable('auth_basic','en_dbprefix')) {
	$config['uprefix'] = pluginGetVariable('auth_basic','dbprefix');
}

Изменено ROZARD (2011-11-21 00:09:39)

Не в сети

#19 2011-11-21 00:14:45

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Burelom, Тот что в личке вообще странный и работать он не будет, но зато хак есть от ботов:

sendEmailMessage(
                    $values['email'],
                    $lang['letter_title'],
                    $msg,
                    false,
                    false,
                    'html'
                );
sendEmailMessage(
                    $values['email'],
                    $lang['letter_title'],
                    $msg,
                    'html'
                );

В приведенном тобой варианте всё нормально, но хака нет...

Не в сети

#20 2011-11-21 00:41:47

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Как нет?

array_push($params, array('name' => 'who_bot', title => 'Если не бот сними галочку:', 'descr' =>  '','type' => 'checkbox'));

и

if(isset($values['who_bot']) && !empty($values['who_bot']))
        {
            // Дополнительная защита от ботов
             $msg = 'Ботам регистрация запрещена';
             return 0;
        }

Всё на местах, этот вариант сейчас на сайте (родная почта прописана вместо звёздочек)

Не в сети

#21 2011-11-21 00:46:38

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: Прикрутите капчу, кто в теме. 300 р.

Burelom, Да не может не работать в таком случае...
Хорошо бы взглянуть весь архив с изменениями без звездочек.

Не в сети

#22 2011-11-21 00:48:33

Burelom
Участник
Зарегистрирован: 2011-01-26
Сообщений: 62
Рейтинг :   

Re: Прикрутите капчу, кто в теме. 300 р.

Отбой) Дело было не в бобине)) У хостера неполадки с почтовым сервером, вопрос решили, письма стали доходить. Отрубили сервер после установки хака, зараза) столько времени потерял и вам голову заморочил, пойду убьюсь о стену и хостера за одно))) Спасибо!

Не в сети

Подвал раздела

Работает на FluxBB