Русское сообщество fluxbb

Быстрый лёгкий надёжный форумный движок

Вы не вошли.

Объявление

Вы можете внести свой вклад в содержание сайта. Жертвователи попадут в почетную группу "Спонсоры". Поддержать сайт.

#1 2014-12-14 05:16:13

Deadpool
Новичок
Зарегистрирован: 2014-12-14
Сообщений: 2

[Дополнение]Простейшая интеграция FluxBB\PunBB с DLE версий 9.X и 10.X

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

Рецепт мой, реализован у меня путём "хака", т.е. изменения оригинальных файлов. Если кто может, Сделайте модулем.

Сразу оговорюсь. Функция регистрации при этот методе ложится на плечи DLE. А форум просто забирает из базы.

Требования:
0. И форум и DLE должны быть в одной базе. ЭТО ВАЖНО!
1. FluxBB\PunBB достаточно новой версии (я ньюфаг, т.е. незнаю как там с файлами ранее 1,5).
2. DLE версий 9.X - 10.X. С возможностью доступа к исходникам, т.е. демка не подходит. Нужна лицензия. Или...  wink
3. Немного времени.

ВАРНИНГ:
Делайте бекапы!

Сам процесс:
1. Откройте файл login.php внутри корневого каталога форума.
Найдите строки:

	if (!empty($cur_user['password']))
	{
		$form_password_hash = pun_hash($form_password); // Will result in a SHA-1 hash

		// If there is a salt in the database we have upgraded from 1.3-legacy though haven't yet logged in
		if (!empty($cur_user['salt']))
		{
			if (sha1($cur_user['salt'].sha1($form_password)) == $cur_user['password']) // 1.3 used sha1(salt.sha1(pass))
			{
				$authorized = true;

				$db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\', salt=NULL WHERE id='.$cur_user['id']) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
			}
		}
		// If the length isn't 40 then the password isn't using sha1, so it must be md5 from 1.2
		else if (strlen($cur_user['password']) != 40)
		{
			if (md5($form_password.$salt1) == $cur_user['password']) // Visman
			{
				$authorized = true;

				$db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\' WHERE id='.$cur_user['id']) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
			}
		}
		// Otherwise we should have a normal sha1 password
		else
			$authorized = ($cur_user['password'] == $form_password_hash);
	}

И замените их на:

	if (!empty($cur_user['password']))
	{
		$form_password_hash = pun_hash($form_password); // Will result in a SHA-1 hash

		// If there is a salt in the database we have upgraded from 1.3-legacy though haven't yet logged in
		if (!empty($cur_user['salt']))
		{
			if (md5(md5($form_password)) == $cur_user['password']) // 1.3 used sha1(salt.sha1(pass))
			{
				$authorized = true;

				$db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\', salt=NULL WHERE id='.$cur_user['id']) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
			}
		}
		// If the length isn't 40 then the password isn't using sha1, so it must be md5 from 1.2
		else if (strlen($cur_user['password']) != 40)
		{
			if (md5(md5($form_password)) == $cur_user['password']) // Visman
			{
				$authorized = true;

				$db->query('UPDATE '.$db->prefix.'users SET password=\''.$form_password_hash.'\' WHERE id='.$cur_user['id']) or error('Unable to update user password', __FILE__, __LINE__, $db->error());
			}
		}
		// Otherwise we should have a normal sha1 password
		else
			$authorized = ($cur_user['password'] == $form_password_hash);
	}

Т.е. этим ходом мы меняем шифрование с солёного мд5 на просто двойной мд5. Такое у нас условие для связи с DLE.

2. Далее мы переходим к DLE
Всего нужно внести 3 правки:
Открываем 'engine/modules/register.php'. Находим там строку

$db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip) VALUES ('$name', '$regpassword', '$email', '$add_time', '$add_time', '" . $config['reg_group'] . "', '', '', '', '', '" . $_IP . "')" );

И ниже её вставляем:

$db->query( "INSERT INTO frm_users (username, group_id, password, email, email_setting, timezone, dst, language, style, registered, registration_ip, last_visit, salt, activate_key) VALUES ('$name', '2', '$regpassword', '$email', '1', '12', '0', 'Russian', 'Air', '1418514553', '$_IP', '1418514553', 'o23121ss12h1', 'o23121ss12h1')");

Обратите внимание. Тут важно сразу менять нужные параметры.
Главное что следует учесть - у вас таблица с пользователями на форуме может отличаться. Поэтому замените 'frm_users' в начале на своё.

Далее отредактируйте под себя.
Например группа пользователя - '2', это параметр разу за '$name'. А 6 с конца тут слово Air - это стандартный скин для форума. '1418514553' это время в формате Unix-Time. А 'o23121ss12h1' это соль.

3. После завершения второго шага всё уже работает. Но как быть с восстановлением пароля? Ведь если кто его потеряет, автоматом он не поменяется!

Для решения этой проблемы открываем 'engine/modules/lostpassword.php'
Находим строку:

$db->query( "UPDATE " . USERPREFIX . "_users set password='" . md5( md5( $new_pass ) ) . "', allowed_ip = '' WHERE user_id='$douser'" );

И ниже пишем:

$db->query( "UPDATE frm_users SET password='" . md5( md5( $new_pass ) ) . "' WHERE username = '$douser'");

Опять же, не забывая поменять 'frm_users' на своё значение!

Вот и всё. Надеюсь, помог хоть кому-нибудь.

Редактировался Deadpool (2014-12-14 05:36:24)

Offline

#2 2014-12-14 05:42:48

Deadpool
Новичок
Зарегистрирован: 2014-12-14
Сообщений: 2

Re: [Дополнение]Простейшая интеграция FluxBB\PunBB с DLE версий 9.X и 10.X

Еще забыл про 'changepassword.php'. но там сами разберётесь.

Offline

Подвал доски

Под управлением FluxBB. Хостинг Hostens