Новости Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla

👩‍💻 SW JProjects v.2.5.0 - компонент каталога цифровых проектов на Joomla.Компонент - менеджер цифровых проектов для Joomla! CMS. Компонент обеспечивает создание каталога цифровых проектов и предоставляет возможность скачивания, в том числе с использованием лицензионных ключей.👩‍💻 v.2.5.0. Что нового?Схемы структур данных для серверов обновлений. Теперь с SW JProjects вы может создавать сервер обновлений не только для расширений Joomla, но и свои собственные. Например, вам нужно, чтобы структура данных сервера обновлений была другая и формат должен быть, например, не XML, а JSON. Формирование структуры данных для сервера обновлений расширений Joomla вынесено в отдельный плагин. Вы можете создать свой собственный плагин и реализовать в нём нужную вам структуру данных, добавив или наоборот исключив отображаемые данные. Сервер обновлений в компоненте по-прежнему отображает информацию о списке проектов и их версиях, о конкретном проекте и его changelog.Можно выбрать схему данных сервера обновлений глобально для всего компонента, выбрать другую схему данных для категории проектов, а так же выбрать схему в каждом проекте.

Разработчикам в качестве образца можно посмотреть плагин схемы данных для Joomla в составе компонента или же плагин-образец JSON-схемы на GitHub.
Группа плагинов swjprojects. Для нужд компонента создана группа плагинов swjprojects. В частности, в этой группе находится плагин структуры данных Joomla расширений для сервера обновлений.Изменение языковых констант. Изменены некоторые языковые константы в панели администратора. Если вы делали переопределение констант - переопределите их снова.👩‍💻 Joomla 6. Внесены изменения для корректной установки и работы компонента на Joomla 6. Компонент успешно протестирован на Joomla 6-beta2.Минимальная версия Joomla - 5. Подняты минимальные системные требования: Joomla 5.0.0 и PHP 8.1.
- Страница расширения👉 Плагин-образец кастомной JSON-схемы данных для сервера обновлений на GitHub.- GitHub расширения- Документация на GitHub- Joomla Extensions Directory#joomla #расширения

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод...

👩‍💻 Как триггерить события для плагинов на манер Joomla 5+?В Joomla 6 должны удалить метод triggerEvent(), с помощью которого раньше вызывались события для плагинов. Теперь чтобы в своём коде вызвать событие для плагина и получить от него результаты нужно:- создать объект класса события- передать в него параметры

use Joomla\CMS\Event\AbstractEvent;use Joomla\CMS\Factory;use Joomla\CMS\Plugin\PluginHelper;// Грузим плагины нужных группPluginHelper::importPlugin('system');// Создаём объект события$event = AbstractEvent::create('onAfterInitUniverse', [    'subject' => $this,    'data'    => $data, // какие-то данные    'article' => $article, // ещё материал вдовесок    'product' => $product, // и товаров подвезли]);// Триггерим событиеFactory::getApplication()->getDispatcher()->dispatch(    $event->getName(), // Тут можно строку передать 'onAfterInitUniverse'    $event);// Получаем результаты// В случае с AbstractEvent это может быть не 'result',// а что-то ещё - куда сами отдадите данные.// 2-й аргумент - значение по умолчанию, // если не получены результаты$results = $event->getArgument('result', []);
Плюсы такого подхода - вам не нужно запоминать порядок аргументов и проверять их наличие. Если вы написали свой класс события, то в плагине можно получать аргументы с помощью методов $event->getArticle(), $event->getData(), $event->getProduct() и подобными - реализуете сами под свои нужды. Если такой класс события написали, то создаёте экземпляр своего класса события и укажите его явно в аргументе eventClass
use Joomla\Component\MyComponent\Administrator\Event\MyCoolEvent;$event = MyCoolEvent::create('onAfterInitUniverse', [    'subject'    => $this,    'eventClass' => MyCoolEvent::class, // ваш класс события    'data'       => $data, // какие-то данные    'article'    => $article, // ещё материал вдовесок    'product'    => $product, // и товаров подвезли]);
Ожидаемо, что класс вашего события будет расширять AbsractEvent или другие классы событий Joomla.🙁 Есть неприятный нюанс - нельзя просто так вызывать событие и ничего не передать в аргументы. Аргумент subject обязательный. Но если вы всё-таки не хотите туда ничего передавать - передайте туда пустой stdClass или объект Joomla\registry\Registry.
@joomlafeed#joomla #php #webdev

0 Пользователей и 1 Гость просматривают эту тему.
  • 2 Ответов
  • 3200 Просмотров
*

linykc

  • Осваиваюсь на форуме
  • 30
  • 13 / 0
Всем доброго времени суток!
Думаю многим разработчикам и админам приходилось не раз вычищать сайты от злобных шеллов, вирей и прочей грязи залитой на наши драгоценные сайты, всякими турецкими борцами за свободу, ливанскими кибер террористами и прочими надоедливыми ахламонами...
Скажу честно,  как они меня уже зае задолбали!

очень часто на взломанных сайтах в логах находились явные признаки наглого брутфорса...(подбора пароля)
да и софта для сего злодеяния на просторах интернетов навалом...

В связи с этим пришло в голову мне такое: а почему бы не поставить капчу на авторизацию в админку? тогда ведь бот не сможет подобрать пароль (ну я на это надеюсь ;D).

В общем к делу:

Задача: повысить безопасность от взлома админки добавлением reCaptha к форме авторизации в панель управления сайта. (пошарив по сусекам интернета, решения готового я так и не нашел - пришлось мудрить "свое" - в кавычках потому как все же способы подключения реCAPTCHA к компонентам и пр. найти вполне реально.)

Решение:

1) включаем сам плагин реCAPTCHA, получаем у Google ключики для своего домена, включаем в настройках плагина тему "white" (сие по желанию, просто сочетается лучше с видом страницы авторизации bluestork)
2) редактируем файл/добавляем в папку HTML самго шаблона админки темплейт модуля mod_login  - в нем выводится форма авторизации
/administrator/templates/bluestork/html/mod_login/default.php или /administrator/modules/mod_login/tmpl/default.php
(прикладываю уже готовый код, думаю что тут добавлять будет понятно)
Код
// No direct access.
defined('_JEXEC') or die;
JHtml::_('behavior.keepalive');

// recaptcha start`s here - подключаем плагин
JPluginHelper::importPlugin('captcha');
$dispatcher = JDispatcher::getInstance();
$dispatcher->trigger('onInit','dynamic_recaptcha_1');
// recaptcha end`s here

?>
<form action="<?php echo JRoute::_('index.php', true, $params->get('usesecure')); ?>" method="post" id="form-login">
<fieldset class="loginform">

<label id="mod-login-username-lbl" for="mod-login-username"><?php echo JText::_('JGLOBAL_USERNAME'); ?></label>
<input name="username" id="mod-login-username" type="text" class="inputbox" size="15" />

<label id="mod-login-password-lbl" for="mod-login-password"><?php echo JText::_('JGLOBAL_PASSWORD'); ?></label>
<input name="passwd" id="mod-login-password" type="password" class="inputbox" size="15" />

<label id="mod-login-language-lbl" for="lang"><?php echo JText::_('MOD_LOGIN_LANGUAGE'); ?></label>
<?php echo $langs; ?>

            <?php // recaptcha start`s here - здесь выводим капчу ?>
             <div id="dynamic_recaptcha_1" style="clear: both;"></div>
       <?php // recaptcha end`s here ?>
            
            
<div class="button-holder">
<div class="button1">
<div class="next">
<a href="#" onclick="document.getElementById('form-login').submit();">
<?php echo JText::_('MOD_LOGIN_LOGIN'); ?></a>
</div>
</div>
</div>

<div class="clr"></div>
<input type="submit" class="hidebtn" value="<?php echo JText::_( 'MOD_LOGIN_LOGIN' ); ?>" />
<input type="hidden" name="option" value="com_login" />
<input type="hidden" name="task" value="login" />
<input type="hidden" name="return" value="<?php echo $return; ?>" />
<?php echo JHtml::_('form.token'); ?>
</fieldset>
</form>


3) редактируем оверрайд-файл login.php самого шаблона админки, точнее его часть ( впринципе это не обязательно, и делается лишь для наведения марафета в отображении формы логина)

Код
<?php // ищем div ID "lock" - это картинка с замочком. вставляем сразу после него div с классом "clr" - без него все смотрится очень криво ?>
<div id="lock"></div>
                     <div class="clr"></div>


4) правим функцию login в компоненте com_login (/administrator/components/com_login/controller.php) - здесь происходит проверка валидности логина/пароля

Код

public function login()
{
// Check for request forgeries.
JSession::checkToken('request') or jexit(JText::_('JINVALID_TOKEN'));

$app = JFactory::getApplication();

$model = $this->getModel('login');
$credentials = $model->getState('credentials');
$return = $model->getState('return');

        // recaptcha start`s here
   $post = JRequest::get('post');      
        JPluginHelper::importPlugin('captcha');
        $dispatcher = JDispatcher::getInstance();
        $res = $dispatcher->trigger('onCheckAnswer',$post['recaptcha_response_field']);
        if(!$res[0]){
           $app->redirect($return);
        }
        // recaptcha end`s here
        
$result = $app->login($credentials, array('action' => 'core.login.admin'));

if (!($result instanceof Exception)) {
$app->redirect($return);
}

parent::display();
}



5) проверяем работу.


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

P.S. решение требует тестирования, поэтому прошу всех желающих отписываться в этой теме. ( в аттаче все редактируемые файлы)
Хорошо бы конечно написать системный плагин, чтоб не редактировать файлы после каждого обновления, но тут у меня к сожалению опыта очень мало, так что если кто поможет с написанием плагина - буду рад. Думаю доп защита админ части никогда не будет лишней.

P.P.S. Работал я с последней на текущий момент версией Joomla 2.5.14

« Последнее редактирование: 26.08.2013, 23:36:24 от linykc »
*

prometheus

  • Захожу иногда
  • 84
  • 7 / 0
Извиняюcь не по теме реCAPTCHA, но по моему мнению эффективнее решение у плагина backendtoken
Смысл его что он выдаст приглашение на авторизацию если в урле будет введен правильный токен с секретным словом типа /administrator/index.php?token=MySecretKey
Я его еще упростил и если введен неправильный токен, то идет не редирект а просто пустая страница 404
так серверу легче пусть стучатся сколько угодно. По логам вообще нет попыток подбора потому что адрес /administrator выдает 404 в этом еще и некоторое запутывание на предмет выявление принадлежности к CMS
*

linykc

  • Осваиваюсь на форуме
  • 30
  • 13 / 0
Извиняюcь не по теме реCAPTCHA, но по моему мнению эффективнее решение у плагина backendtoken
Смысл его что он выдаст приглашение на авторизацию если в урле будет введен правильный токен с секретным словом типа /administrator/index.php?token=MySecretKey

да о подобном решении я знаю, сам пользуюсь плагином adminexile- делает тоже самое.
но имхо переборщить с безопасностью невозможно... я бы и амбарный замок на админку навесил если бы мог... =)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться