Релиз LiveStreet 1.0.3

Сообщаем о выходе новой версии LS 1.0.3. Версия носит багфиксный характер.
Были закрыты две XSS уязвимости(спасибо HiMiC и PSNet ) и исправлено раскрытие директории в сессиях(еще раз спасибо PSNet ).

Обновленный дистрибутив уже доступен для загрузки — livestreetcms.ru/download/
Для закрытия этих багов для версий 1.0.2, 0.5.1 и 0.4.2 достаточно скачать этот патч и залить его поверх вашей версии LS.

Важное замечание! Настоятельно рекомендуем обновиться с версий 0.5 и 0.4 до актуальной 1.0.3. Т.к. помимо исправлений этого патча старые версии содержать множество других бед, в том числе и потенциальные уязвимости.

Изменения коснулись 4-х файлов:
config/jevix.php
engine/lib/external/Jevix/jevix.class.php
engine/lib/external/swfupload/swfupload.swf
engine/modules/session/Session.class.php

Подробнее можно посмотреть на гитхабе — github.com/livestreet/livestreet/commit/83c15587388dec02f8b97eac8a0d809a3233702c

Тонкая настройка почты

Столкнулся с тем, что при добавлении топиков, происходят достаточно сильные тормоза. После проведённого анализа выяснилось, что проблема тормозов ПОЧТА. При публикации топика происходит рассылка по всем пользователям, которые имеют отношение к блогу, в который происходит размещение материала.

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

В конфиге config/config.local.php добавляем следующие настройки

// Указывает на необходимость использовать режим отложенной рассылки сообщений на email
$config['module']['notify']['delayed'] = true;
// Если опция установлена в true, систему будет собирать записи заданий удаленной публикации, для вставки их в базу единым INSERT
$config['module']['notify']['insert_single'] = true;
// Количество отложенных заданий, обрабатываемых одним крон-процессом
$config['module']['notify']['per_process'] = 10;


Далее исправляем файл classes/modules/notify/Notify.class.php

Находим в нём функцию

public function Send($oUserTo,$sTemplate,$sSubject,$aAssign=array(),$sPluginName=null) {


В этой функции находим строчку

if(Config::Get('module.notify.delayed')) {


И заменяем её на

$isNotifyDelayed = Config::Get('module.notify.delayed');
if (($sTemplate == "notify.registration_activate.tpl") || ($sTemplate == "notify.registration.tpl") || ($sTemplate == "notify.reactivation.tpl") || ($sTemplate == "notify.reminder_code.tpl") || ($sTemplate == "notify.reminder_password.tpl")) { $isNotifyDelayed = false; }
if($isNotifyDelayed) {


PS: Возможно разместил топик не в тот блог, но в другие писать к сожалению не могу. Видимо не хватает рейтинга или силы.

Небольшое дополнение:
Кто-то может забыть, поэтому напоминаю, что необходимо по крону запускать скрипт include/cron/notify.php

есть 2 варианта запуска.

1. используя HTTP.

для этого необходимо поправить .htaccess в папке include/cron/
содержание должно быть

Order Deny,Allow
Deny from all
Allow from XXX.XXX.XXX.XXX


вместо XXX.XXX.XXX.XXX укажите IP, с которого будет производиться HTTP запрос.
и в крон можно внести следующую запись

*/5 * * * *   wget -O- http://www.livestreet.ru/include/cron/notify.php >> /dev/null


2. либо из консоли.

и в крон можно внести следующую запись

*/5 * * * *   /usr/bin/php /vhosts/site.ru/www/include/cron/notify.php


Пути указывайте в соответствии с настройками вашего сервера.

Релиз LiveStreet 1.0.2

Сообщаем о выпуске промежуточной версии LiveStreet 1.0.2.
Основная причина — закрытие пассивной XSS (спасибо HiMiC ). Также были исправлены другие незначительные моменты по безопасности.
Полный список изменений относительно версии 1.0.1 доступен здесь — github.com/livestreet/livestreet/commit/479e97bea183b8ab863d45b8150fe6549b42f8ce

В новую версию вошли практически все изменения ядра из девел версии на текущий момент, что повысит, в частности, скорость работы сайта. Шаблоны не изменялись, поэтому должна быть полная 100% совместимость с текущими шаблонами и плагинами.

При обновлении с 1.0.1 достаточно перезаписать файлы из нового архива, каталог /templates/skin/ можно не перезаписывать.

Скачать можно здесь — livestreetcms.ru/download/

UPD
Список изменений:
  • фикс бага смены емайла, если у пользователя не было старого
  • если класс модуля не существует, то теперь выбрасывается эксепшен
  • доступ к какум только через http
  • фикс генератора плагинов из консоли
  • в конфиг вынесены настройки допустимого логина пользователя
  • фикс отображения адреса сайта плагина в списке плагинов
  • вынос в конфиг максимального размера текста топика для ссылок и опросов
  • возможность отключить обязательность проверки каптчи
  • фикс удаления комментариев
  • фикс раскрытия путей на сервере — замена функции getRequest на getRequestStr для строковых параметров
  • закрытие прямого доступа к plugin.xml, закрытие некоторых каталогов через htaccess
  • список допустимых протоколов для ссылок в парсере jevix
  • в классе LS методы заменены на статические
  • в сущности топика добавлены новые вспомогательные методы: getUrlEdit, getIsAllowDelete, getIsAllowEdit, getIsAllowAction
  • новая опция в конфиге $config['smarty']['compile_check'] для отключения проверки шаблонов перед компиляцией
  • фикс бага с передачей сессии в каптчу
  • фикс предпросмотра у топика-ссылки и опроса
  • фикс установки уровня php ошибок в Viewer
  • теперь, если файл шаблона плагина не найден, будет попытка его найти в каталоге шаблона плагина /default/, это позволит не дублировать файлы шаблонов для разных скинов
  • фикс утечки памяти при обработке конфига
  • для топика устанавливается canonical url
  • фикс экранирования полей в ORM
  • для ORM связи many-many добавлен новый метод clear() для удаления всех текущих связей
  • возможность в определении ORM связи has-many указывать дополнительный фильтр (4-й параметр)
  • поддержка группировки в условиях ORM запроса
  • фикс XSS в пагинации
  • в определении таблицы в ORM учитывается имя плагина, например, prefix_pluginname_user_invite
  • теперь при запуски из консоли функция func_getIp вернет 127.0.0.1
  • в jevix в обработку тегов TR_TAG_CALLBACK_FULL дополнительно передается содержание между тегов
  • в ls.ajax в хук дополнительно передаются параметры callback и more
  • оптимизация выборки инбоксов
  • фикс бага подписки на комменты к топику из закрытого блога
  • фикс удаления файлов изображения фото-сетов при удалении топика

Фикс диалоговых окон для ie7

Всем доброго времени суток.
В ie7 окно логина закрыто оверлеем, так же и окно загрузки изображений. Фикс этой проблемы:
идем в jquery.jqmodal.js, после строки 81. h.w.css('z-index', z); добавить строку
if (!h.w.is('.mutex')) h.w.addClass('mutex').appendTo('body');
класс mutex используется как семафор.

Наследование одного екшена разными плагинами

Здесь я высказался о проблеме. Сегодня я расскажу как её решить, а точнее какие изменения внести в ядро 042 из последней транковой версии.
Проблема эта однажды коснется почти каждого т.к. она весьма серьезная и с ней столкнутся — раз плюнуть, поэтому пост заносим в избранное.

Коротко напомню суть проблемы — если два разных плагина наследуют один общий екшен (например ActionSettings), и оба плагина выводят что-то в шаблон, то один из плагинов (который был активирован первым) завершится ошибкой не нахождения шаблона.

Fatal error: Uncaught exception 'Exception' with message 'Can not find the template: actions/ActionSettings/abc.tpl' in лалала


Читать дальше →

Наш вариант решения вопроса с рейтингом блогов

Итак, сделали рейтинг блогов зависимым от оценок постов, опубликованных в этих блогах.

в Rating.class.php

Берем функцию public function VoteTopic(UserEntity_User $oUser, TopicEntity_Topic $oTopic, $iValue)
, которая обрабатывает голосование за посты
Читать дальше →

Фикс Jevix'а

В Jevix'е есть небольшой баг. Тег <br>, заключенный в тег <code>, всеравно обрабатывается как перенос строки.

Например, как-то так (перед "\n" был <br>):
ob_start();
echo "SQL Error: $message
\n";
print_r($info);	
$msg=ob_get_contents();
ob_end_clean();
Хотя <br /> не обрабатывается:
ob_start();
echo "SQL Error: $message<br />\n";
print_r($info);	
$msg=ob_get_contents();
ob_end_clean();

Непорядок. Исправляем.
Читать дальше →