Интеграция с Joomla

Обсуждение вопросов и решений

Модератор: ykolesnikov

Ответить
sf51
OTRS Новобранец
Сообщения: 80
Зарегистрирован: 01 авг 2012, 23:31

Интеграция с Joomla

Сообщение sf51 » 18 авг 2012, 10:39

Никто не пробовал интегрировать OTRS с Joomla? Пользователи регистрируются на сайте, для работы с OTRS нужна ещё одна регистрация не удобно...
Нашёл проект Cognidox OTRS-Joomla-Gateway. Но там не реализована совместная база данных пользователей.

Есть решение проблемы?

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 05 апр 2013, 15:22

Удалось ли кому разобраться с этим вопросом?

Я так понял, что проще всего переписать генерацию/проверку паролей в OTRS и сделать скрипт синхронизации баз данных или просто подключить внешнюю базу данных.

Или при подключении внешней базы данных проверка паролей как-то гибко настраивается? подскажите пожалуйста.
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Интеграция с Joomla

Сообщение alexus » 05 апр 2013, 17:36

Cognidox OTRS-Joomla-Gateway предоставляет интерфейс.
А настройка базы клиентов - на ваш вкус. Можете клиентов заводить в жумле и в качестве бекенда OTRS указать эту базу
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 05 апр 2013, 17:45

Да, когнидокс подойдет в данный момент, но мне не известно, как долго он будет обновляться, будет ли поддерживать все плюшки новых версий otrs, динамические поля и т.п. (подозреваю, например, что те же динамические поля уже не поддерживает).
А настройка базы клиентов - на ваш вкус. Можете клиентов заводить в жумле и в качестве бекенда OTRS указать эту базу
Это понятно, но в базе Joomla пароли хранятся с солью и методом, скорее всего отличающимся от OTRS. Таким образом просто напросто не сработает логин в OTRS по базе в джумле.
Вероятно, я что-то не понимаю, был бы признателен за любую помощь.
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Решение: Интеграция с Joomla

Сообщение radioagent » 28 дек 2014, 17:03

Ну что же. Потрачена уйма времени, но решение получено. Постараюсь описать, чтобы такой же несчастный как я смог заняться чем-то более полезным.

Итак, интеграция проходит в два шага.

1. Подключение внешней базы данных.
Об этом много где написано, но даже из этого многого пришлось долго и упорно собирать целостную картину.
Ссылка на документацию: http://otrs.github.io/doc/manual/admin/ ... kends.html
Чтобы подключить новую базу в файле Kernel/Config.pm вставляем такой блок (копипастится из дефолтного конфига, например):

#обратите внимание, CustomerUser у нас уже есть в дефолте. поэтому здесь испльзуется CustomerUser1 , а далее еще и Table1 везде. Можно авторизоваться по сразу нескольким разным базам данных, для этого просто увеличиваем цифру в названии переменной на единицу и делаем далее по аналогии

Код: Выделить всё

$Self->{CustomerUser1} = {
    Name => 'Joomla database',
    Module => 'Kernel::System::CustomerUser::DB',
    Params => {
        DSN => 'DBI:mysql:database=ИМЯ_ВНЕШНЕЙ_БАЗЫ_ДАННЫХ;host=localhost',
        User => 'root',
        Password => 'ПАРОЛЬ_ОТ_БД',
        Table => 'jum_users',

#здесь jum_users - это таблица users из джумлы.

#далее идут стандартные настройки
    # customer unique id
    CustomerKey => 'email',
    # customer #
    CustomerID => 'id',
    #CustomerValid => 'block',
    CustomerUserListFields => ['id', 'name', 'email'],
    CustomerUserSearchFields => ['name', 'username', 'email'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['email'],
    CustomerUserNameFields => ['name'],
    CustomerUserEmailUniqCheck => 1,

#    # admin can change customer preferences
    AdminSetPreferences => 0,
#а это маппинг, здесь я всех пользователей логиню только по емейлу и емейл же считаю уникальным идентификатором. по UserLogin , кстати, выводится информация в окне "информация о клиенте"
    Map => [

        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target
        [ 'UserTitle',      'Name of user',     'name',        1, 0, 'var', '', 1 ],
        [ 'UserLogin',      'Username',         'email',       1, 1, 'var', '', 1 ],
        [ 'UserPassword',   'Password',         'password',    0, 1, 'var', '', 1 ],
        [ 'UserEmail',      'Email',            'email',       1, 1, 'var', '', 1 ],
        [ 'UserCustomerID', 'CustomerID',       'email',          0, 1, 'var', '', 1 ],
        [ 'LicenseDate', 'License expiration date',       'usertype',          0, 0, 'var', '', 1 ],
    ],
    # default selections
    Selections => {
        UserTitle => {
            'Mr.' => 'Mr.',
            'Mrs.' => 'Mrs.',
        },
    },
};


#Ниже идет настройка авторизации, где мы указываем из какой таблицы какие данные мы черпаем и какой модуль авторизации мы будем использовать. Я указал свой модуль авторизации - DBJ . email и password - это столбцы в таблице, которые будут испльзованы для логина и сверки с хешем пароля.
    # This is the auth. module against the otrs db
    $Self->{'Customer::AuthModule1'}                       = 'Kernel::System::CustomerAuth::DBJ';
    $Self->{'Customer::AuthModule::DBJ::Table1'}            = 'jum_users';
    $Self->{'Customer::AuthModule::DBJ::CustomerKey1'}      = 'email';
    $Self->{'Customer::AuthModule::DBJ::CustomerPassword1'} = 'password';
 
    # password crypt type (bcrypt|sha2|sha1|md5|crypt|plain) в родном файле авторизации по  db переменная type - это триггер, позволяющий выбрать тип шифрования. В Joomla 2 и выше используется шифрование с помощью библиотеки phpass, поэтому можно написать отдельный обработчик, который будет срабатывать по триггеру joomla. хотя ниже  я приведу код DBJ файла, в котором переменная type вообще не используется

    $Self->{'Customer::AuthModule::DBJ::CryptType1'} = 'joomla';

    $Self->{'Customer::AuthModule::DBJ::DSN1'} = "DBI:mysql:database=ИМЯ_БАЗЫ_ДАННЫХ;host=localhost";
    $Self->{'Customer::AuthModule::DBJ::User1'} = "root";
    $Self->{'Customer::AuthModule::DBJ::Password1'} = "ПАРОЛЬ";

}
2.Написание собственного модуля авторизации
Сначала подготовимся. В системе должна быть установлена библиотека phpass , точнее ее перловская реализация Authen::Passphrase::PHPass http://www.openwall.com/phpass/
Можно, конечно, самому написать кодировщик пароля в хеш. Но я перл впервые в жизни вижу, поэтому решил воспользоваться готовым.

Копируем файл System/CustomerAuth/DB.pm как DBJ.pm .
В нем в начале подключаем модуль Authen::Passphrase::PHPass:

Код: Выделить всё

# --
# Kernel/System/CustomerAuth/DB.pm - provides the db authentication
# Copyright (C) 2001-2014 OTRS AG, http://otrs.com/
# --
# This software comes with ABSOLUTELY NO WARRANTY. For details, see
# the enclosed file COPYING for license information (AGPL). If you
# did not receive this file, see http://www.gnu.org/licenses/agpl.txt.
# --

package Kernel::System::CustomerAuth::DBJ;

use strict;
use warnings;

use Crypt::PasswdMD5 qw(unix_md5_crypt);
use Digest::SHA;
use Authen::Passphrase::PHPass;
Затем ищем класс/функцию или как это здесь называется , sub Auth

и в нем находим кучу if else в которых в зависимости от значения переменной type происходит хеширование пароля, введенного пользователем ($Pw) и сравнение его с паролем из базы данных $GetPw

Используя библиотеку PHPass мы можем сделать все в пару строк:

Код: Выделить всё

#создаем объект phpass, передавая ему хеш.
my $ppr = Authen::Passphrase::PHPass->from_crypt($GetPw); 

#Просим проверить, а соответствует ли пароль $Pw указанному выше Хешу из БД джумлы
if($ppr->match($Pw)) {$PassCorrect = 'true'};
Я не программист и с перлом совершенно не знаком, поэтому не факт, что указанное выше работает везде и со всем.
В частности, пароли, захешированные методом, который использовался в джумле до PHPass могут не пройти (для себя я решил, что попрошу пользователей сменить пароль на хешируемый более надежными средствами, чем md5).
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 28 дек 2014, 17:07

PS кстати, для отладки очень удобно в файле DBJ.pm выставить переменную Debug=1 (по умолчанию она там определена равной нулю).
После этого в админке OTRS в логе системы можно увидеть, все, что выводится в этом участке кода (я его вот ниже даже сам поправил, чтобы инфа была более читаемой:

Код: Выделить всё

    if ( $Self->{Debug} > 0 ) {
        
        $Self->{LogObject}->Log(
            Priority => 'notice',
            Message  => "CustomerUser: '$User' tried to authenticate with Pw !-!: '$Pw' "
                . "(Login-UserID: $UserID/ CryptedPw: $CryptedPw/GetPw: $GetPw/Salt: $Salt/Addr: $RemoteAddr)",
        );
    }
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 22 мар 2015, 13:19

Даю поправку для OTRS 4.0

Внимательнее смотрите на шаблон для записи в Config.pm
Дело в том, что появился новый параметр, который может сэкономить кучу нервных клеток:

Код: Выделить всё

          Table => 'customer_user',
#            ForeignDB => 0,    # set this to 1 if your table does not have create_time, create_by, change_time and change_by fields
Если ссылаетесь на внешнюю БД без соответствующих полей, то нужно разкомментировать ForeignDB и присвоить единицу. Тогда из логов исчезнет такая ошибка:
Unknown column 'create_time' in 'field list', SQL: 'SELECT name, email, password, email, email, usertype, create_time, create_by, change_time, change_by, email FROM.........
Также DB.pm в 4.0 сильно изменился, поэтому аккуратно нужно вносить изменения, нельзя просто скопировать старый DBJ.pm , нужно аккуратно слить с новым DB.pm

Для тех, кто разбирается также плохо в перле, как я, вот здесь в коде ошибка:

Код: Выделить всё

#создаем объект phpass, передавая ему хеш.
my $ppr = Authen::Passphrase::PHPass->from_crypt($GetPw);

#Просим проверить, а соответствует ли пароль $Pw указанному выше Хешу из БД джумлы
if($ppr->match($Pw)) {$PassCorrect = 'true'};
Переменная $PassCorrect не объявлена.
Вот так будет работать:

Код: Выделить всё

#создаем объект phpass, передавая ему хеш.
my $ppr = Authen::Passphrase::PHPass->from_crypt($GetPw);
my $PassCorrect = 'false'

#Просим проверить, а соответствует ли пароль $Pw указанному выше Хешу из БД джумлы
if($ppr->match($Pw)) {$PassCorrect = 'true'};
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Интеграция с Joomla

Сообщение alexus » 22 мар 2015, 13:24

radioagent писал(а):Внимательнее смотрите на шаблон для записи в Config.pm
Дело в том, что появился новый параметр, который может сэкономить кучу нервных клеток:
Вообще-то он всегда был ;) !
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 14 июн 2015, 13:50

это просто ад :(
Начиная с Joomla 3.2, кажется, они переехали с phpass на bcrypt :(
Соответственно приведенный выше метод не годится; Да и встроенный bcrypt в стандартной реализации OTRS дает другой вид хеша.

Меня , очевидно, ждет разбор этого кода: https://github.com/joomla/joomla-cms/bl ... #L296-L387

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

Заранее спасибо.
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Интеграция с Joomla

Сообщение alexus » 14 июн 2015, 14:12

Вся интеграция с внешними системами делается через веб-сервисы с минимальными доработками исходного кода. Не стоит изобретать велосипед.
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 14 июн 2015, 15:19

Мне не нужна ни в коем случая никакая интеграция. Мне просто нужно подсосать базу данных пользователей из базы другого сайта.
Каким образом web-services могут быть мне полезны я не понимаю, т.к. никаких примеров решения схожей с моей задачи найти не удалось.
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Интеграция с Joomla

Сообщение alexus » 14 июн 2015, 16:12

Что значит - "подсосать"? Куда, зачем и каким образом это должно выглядеть?
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 15 июн 2015, 15:44

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

Фактически мне нужно: в интерфейсе агента видеть какую-то информацию о пользователе из базы данных пользователей Joomla.
Также нужно, чтобы пользователи работали с интерфейсом OTRS, имея возможность авторизовываться в OTRS по данным своим из Джумлы.

Есть OTRS гейтвей для джумлы. Но он не фонтан: ограниченный функционал создания заметки, невозможность просмотра истории обращений пользователем. Невозможность работы с Компаниями пользователей.

Поэтому я замаппил базу пользователей в настройках otrs, осталось сделать авторизацию. А в ней только одна загвоздка - разный способ хеширования паролей в otrs (не смотря на то, как много типов он поддерживает) и в joomla.

Я, конечно, никого не прошу за меня написать код, но вдруг кто уже это реализовывал и не жалко поделиться кодом :)
Если я допилю, тоже поделюсь, как делал у
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

alexus
OTRS Гуру
Сообщения: 5192
Зарегистрирован: 20 сен 2010, 18:17
Откуда: Москва
Благодарил (а): 92 раза
Поблагодарили: 82 раза

Re: Интеграция с Joomla

Сообщение alexus » 15 июн 2015, 15:48

radioagent писал(а):Поэтому я замаппил базу пользователей в настройках otrs, осталось сделать авторизацию. А в ней только одна загвоздка - разный способ хеширования паролей в otrs (не смотря на то, как много типов он поддерживает) и в joomla.
Придётся модифицировать модуль авторизации в OTRS
С уважением,
Алексей Юсов

Prod: OTRS CE ITSM 6.0.28 on CentOS 7 Apache 2.4 MariaDB 10.4.13 + Radiant Customer Portal

Radiant System OTRS Intergrator RU
Группа OTRS Community в Teleram
Хотите внедрить OTRS? Спросите меня как!

radioagent
OTRS Новобранец
Сообщения: 22
Зарегистрирован: 05 апр 2013, 15:13
Контактная информация:

Re: Интеграция с Joomla

Сообщение radioagent » 15 июн 2015, 16:00

Ну да. Выше я описал, как это сделать для Joomla < 3.2
Сейчас вот новый вызов :)

Ладно, буду пилить. Потом выложу здесь результат.
С уважением,
Игорь
---------------------------------------------------------------------
Использую свежайший релиз OTRS Help Desk на FreeBSD

Ответить