W-gent and ObBot / Архив / Архив публикаций / Великое Объединение форумов

Великое Объединение форумов


Страница:  1 2 3
Редирект с YouTube shorts на страницу видео
Быстро, дёшево и качественно
Правильный генератор паролей
Language hack для любой CMS
Сложный парсер даты и времени начала и окончания мероприятия, написанных человеком
Простое решение парадокса Ферми
Thank God For The Bomb
Неверные загадки
Распахивание больших картинок на jQuery

 

Ash nazg durbatuluk, Ash nazg gimbatul. Ash nazg trakatuluk Ag burzum - ishi krimpatul!

Суть проблемы:
В интернете очень много форумов, объединённых единой тематикой, но разъединённых нахождением на разных ресурсах со своими владельцами, администраторами и постоянными посетителями.
Для рядового интернетчика практически нереально общаться на всех тематических форумах, а наиболее интересные авторы, увы, склонны заводить свои собственные ресурсы (особенно - в случае конфликта с администрацией форума, на котором они прежде обитали), что ещё больше усиливает разобщённость, тем более, что уходящие зачастую сманивают за собой своих друзей, разрывая их связи с остающимися.

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

Перспективы:
Тематические форумы на разных движках, объединённые при помощи разрабатываемого ПО, будут иметь большое технологическое преимущество перед форумами-одиночками и со временем самим фактом своего существования либо вытеснят их, либо принудят к синдикации.
Это позволит пользователям какоой-либо сети тематических форумов без повторения нудной процедуры регистрации общаться прямо на любимом сайте с пользователями других сайтов сети.
 

Формулировка технического задания:

 
0. Пересмотреть данное ТЗ в сторону максимальной совместимости с уже существующими стандартами RSS-экспорта, как простейшими (RSS Feed Егора Николаева, http://naklon.info/rss/about.htm), так и продвинутыми (Total Syndication Suite для phpBB 3.0.4, http://www.phpbb.com/community/viewtopic.php?f=70&t=1431255&start=0)

1. Разработать (либо найти готовый и обсудить на предмет пригодности) единый стандарт (формат) XML(RSS?)-ленты, содержащей всю полноту информации, необходимой для импорта сообщений, включая данные, отражающие структуру форума.
 
2. Проверить на предмет применимости и, при необходимости, переделать и дополнить следующую предлагаемую таблицу в базе данных, используемую модулями синдикации:
<?php
$q=<<<End
CREATE TABLE IF NOT EXISTS syndicate (
 ID INT(8) unsigned NOT NULL auto_increment, //Основной индекс таблицы
 host VARCHAR(32),   // Хост партнёра, на котором размещён его форум, ОБЯЗАН совпадать с соответствующим именем пользователя на нашем форуме.
 our_password VARCHAR(32),   // Наш пароль на сайте партнёра
 import_allowed BOOL DEFAULT TRUE, // Чекбокс, разрешающий или приостанавливающий импорт сообщений с хоста
 import_messages_limit TINYINT UNSIGNED DEFAULT 100, // Число месагов, которое мы желаем импортить за 1 раз с этого партнёра
 import_last_date DATETIME DEFAULT '1970-01-01 00:00',
 import_request_template varchar(255) DEFAULT 'GET http://[host]/syndicate.php?syndicate_do=export&login=[our_host]&password=[our_password]&date=[import_last_date]&limit=[import_messages_limit] HTTP/1.1\r\n', // Шаблон запроса к партнёрскому сайту, снабжённый предупреждающей надписью "РУКАМИ НЕ ТРОГАТЬ!"
// Как вариант, в более поздних версиях вместо этого темплэйта будет выбор из списка поддерживаемых версий RSS-лент партнёрских форумов, а соответствующие им запросы будут храниться внутри скрипта.           
 import_period INT(8) UNSIGNED DEFAULT 600, // Минимальный период, с которым можно делать запросы к партнёру, в секундах
 login_template varchar(255) DEFAULT 'POST http://[host]/login.php?referer=http%3A%2F%2Fwww.[host]%2F&UserName=[login]&PassWord=[password] HTTP/1.1\r\n', //Шаблон запроса к партнёрскому сайту на проверку пароля юзера username@host
//версия для phpBB   login_template varchar(255) DEFAULT 'POST http://[host]/login.php?username=[login]&password=[password]&redirect= HTTP/1.1\r\n', //Шаблон запроса к партнёрскому сайту на проверку пароля юзера username@host
 login_success_template varchar(255) DEFAULT '/Выход[^<]*</a>/si', // Шаблон положительного ответа об ауторизации в виде регулярного выражения
// Как вариант, в более поздних версиях вместо последних двух темплэйтов будет выбор из списка поддерживаемых версий движков партнёрских форумов, а соответствующие этим движкам запросы будут храниться внутри скрипта. 
 PRIMARY KEY (`ID`)
)
End;
?>
 
2. Разработать для наиболее популярных форумных движков IPB и phpBB утилиты, осуществляющие импорт и экспорт сообщений в XML-формате (см. п.1)
Утилиты должна иметь возможность инклюдиться при выполнении кода форума либо запускаться Cron'ом в качестве отдельного php-файла. Программное обеспечение должно быть представлено в открытом исходном коде, чтобы администраторы сайтов могли лично проверить его перед установкой и убедиться в отсутствии вредоносного кода.
Работа утилиты определяется параметром"syndicate_do", в зависимости от которого:
2.1. В случае, если параметр "syndicate_do" не установлен, утилита понимает, что её инклюдит скрипт ауторизации и ничего не делает. В этом случае, инклюдящий скрипт может пользоваться добавленными в утилиту функциями syndicate_get_login_template($host) и syndicate_get_login_success_template($host), возвращающими соответствующие $host значения шаблона на проверку пароля и шаблона положительного ответа.
 
2.2. В случае, если параметр "syndicate_do" равен "export", утилита осуществляет экспорт сообщений, используя дополнительные входные параметры.
2.2.1. Дополнительные входные параметры:
2.2.1.1. "login" и "password" - идентификатор и пароль партнёрского форума либо частного лица, запрашивающего поток сообщений (строки), либо отсутствие этого параметра.
2.2.1.2. "date" - время создания либо изменения первого отдаваемого сообщения (строка в формате GMT), либо отсутствие этого параметра.
2.2.1.3. "limit" - желательное количество отдаваемых сообщений.
2.2.2. Описание работы:
2.2.2.1.1. В начале работы утилита проверяет соответствие идентификатора и пароля, в соответствующей таблице зарегистрированных пользователей базы данных форума (если эти параметры заданы) и при несоответствии делает антибрутфорсовую паузу в 5 секунд, записывает в hacklog IP-адрес и запрошенные параметры и обнуляет параметр "login".
2.2.2.1.2. Если параметр "login" отсутствует, утилита устанавливает его в "Guest" (неавторизованный посетитель).
Для следующих версий предусмотреть более секьюрный вариант: утилита берёт данные пользователя из сессии, а сервер партнёра, обращаясь за лентой, сначала производит ауторизацию через login.php методом POST.
2.2.2.2. Утилита проверяет параметр "date" и при некорректности обнуляет его, а при корректности приводит к виду "YYYY-MM-DD HH:mm" локального времени сервера.
2.2.2.3. Утилита проверяет параметр "limit" и при некорректности устанавливает его в 10. Или в 100. Или в ещё какое-то понравившееся число (обосновать выбор в комментарии к коду).
2.2.2.4.Утилита выполняет поиск, в количестве, равном двойному значению параметра"limit", по форумам сообщений, удовлетворяющих следующим условиям:
2.2.2.4.1. Пользователь, запрашивающий ленту, имеет доступ к данной ветке форума хотя бы по чтению.
2.2.2.4.2. Имя автора сообщения не содержит символа "@".
2.2.2.4.3.1. Если параметр "date" не пуст: время создания либо последнего изменения данного сообщения больше, чем значение параметра"date"; выборка упорядочена по возрастанию максимума из дат создания и изменения сообщения.
2.2.2.4.3.2. Если параметр "date" пуст: ищутся последние по времени сообщения; выборка упорядочена по убыванию максимума из дат создания и изменения сообщения.
2.2.2.5. Выборка урезается до размеров, приблизительно соответствующих параметру "limit" по следующему правилу:
Если число сообщений в выборке превышает параметр "limit", то заданное им число сообщений отсчитывается от начала выборки, определяется время найденного сообщения, и из выборки исключаются сообщения с большим (или, в случае пустого параметра "date", меньшим) временем создания или изменения. Возможное превышение заданного числа сообщений необходимо, т.к. разные сообщения могут иметь одинаковое время создания/изменения.
2.2.2.6. Сообщения из выборки включаются в ленту в порядке увеличения времени создания или последнего изменения. Лента выдаётся партнёру.
2.2.2.7. В следующих версиях предусмотреть возможность PGP-шифрования передаваемой ленты во избежание перехвата личной конфиденциальной информации, предназначенной только для пользователей, имеющих доступ к копируемому под-форуму.
 
2.3.В случае, если параметр "syndicate_do" равен "import", утилита осуществляет импорт сообщений, используя дополнительный входной параметр "host" - имя хоста партнёра, с обязательным учётом кодировки сообщений форума и кодировки ленты.
2.3.1. В начале работы утилита проверяет значение параметра "host". В случае, если этот параметр не установлен, утилита устанавливает его равным хосту, у которого наименьшее значение import_last_date при установленном поле import_allowed.
2.3.2. Описание работы:
2.3.2.1. В случае, если параметр "host" некорректен, утилита завершает работу с внесением записи в лог ошибок.
2.3.2.2. В случае, если значение import_last_date для данного хоста меньше текущего времени лишь на число секунд, меньшее import_period, утилита завершает работу.
2.3.2.3. Утилита обращается к партнёрской ленте, считывает ответ и проверяет его на корректность. В случае, если ответ не является корректным XML-потоком, утилита завершает работу с записью в лог ошибок.
2.3.2.4. Утилита размещает (либо изменяет) полученные сообщения в базе данных форума с учётом прав доступа, установленных для тех или иных пользователей партнёрского форума, а также с учётом наличия либо отсутствия на форуме одноимённых разделов и тем:
2.3.2.4.1. Встречая в сообщении имя ранее не зарегистрированного пользователя, утилита регистрирует его в базе форума с именем вида "имя_пользователя@доменное_имя_партнёрского_форума", с заведомо неверным нулевым паролем, правами доступа на уровне зарегистрированного пользователя (Вариант для будущих версий и только для IPB: с правами зарегистрированного пользователя и с членством в той же группе, что и пользователь "доменное_имя_партнёрского_форума") и гиперссылкой на поиск данного пользователя на партнёрском форуме в качестве адреса личного сайта.
2.3.2.4.2. Встречая имя пользователя, не имеющего прав написания сообщений в данную тему, утилита игнорирует сообщение.
2.3.2.4.2.1. Встречая в тексте сообщения цитату пользователя, не имеющего прав написания сообщений в данную тему, утилита заменяет цитату гиперссылкой на цитируемое сообщение (если таковая присутствует) либо на поиск данного пользователя на партнёрском форуме.
2.3.2.4.3. Встречая имя под-форума, не существующего на данном форуме, утилита игнорирует сообщение.
2.3.2.4.4. Встречая имя темы, не существующей на данном форуме, но находящейся в под-форуме, существующем на данном форуме, утилита создаёт в этом под-форуме такую тему и делает автора сообщения топикстартером созданной темы.
2.3.2.4.5. Встречая сообщение, уже существующее в базе с таким же именем пользователя и датой создания, утилита сначала удаляет дубликат из базы.
2.3.2.4.6. В ходе работы утилита устанавливает значение import_last_date - наибольшее время создания либо изменения для полученных (включая проигнорированные) сообщений. Если лента не содержит ни одного сообщения, import_last_date устанавливается равным текущему времени.
 
3. Разработать для последних версий наиболее популярных форумных движков IPB и phpBB модификации, обеспечивающие:
3.1. Вывод в неиндексируемом поисковиками виде сообщений, имена авторов которых содержат знак "@".
3.2. При авторизации с логином вида "имя_пользователя@доменное_имя_партнёрского_форума" - проверку пароля на партнёрском сайте методом передачи на партнёрский форум запроса, хранящегося в поле таблицы login_template, и если ответ соответствует шаблону из поля login_success_template, то создание пользователя "имя_пользователя" со всеми правами пользователя "имя_пользователя@доменное_имя_партнёрского_форума" и введённым паролем и установку данных созданного пользователя в сессии.
3.3. Блокировку регистрации с именем "имя_пользователя" в случае, если существует хотя бы один зарегистрированный пользователь с именем вида "имя_пользователя@*".
3.4. Администрирование синдикаций средствами админки форума либо средствами отдельной админки.
4. Обсудить меры защиты от несанкционированных рассылок в свете увеличивающейся при синдикации привлекательности объединённых форумов для спамеров.
 
5. Составить инструкцию по установке и использованию разработанных модулей синдикации, а также краткий F.A.Q.