Модуль: drupal/cmlexchange
Версия: 1.20.0
Дата сохранения: 2025-11-15
Источник: pim-drupal (контейнер pim-drupal)
Статус: ✅ Исправлен и протестирован
Всего файлов: 26
Размер: 196 KB
cmlexchange-patched/
├── cmlexchange.info.yml # Метаданные модуля
├── cmlexchange.module # Основной файл модуля
├── cmlexchange.routing.yml # Роутинг (endpoints)
├── cmlexchange.services.yml # Сервисы
├── cmlexchange.links.menu.yml # Пункты меню
├── LICENSE.txt # Лицензия GPL-2.0+
└── README.md # Оригинальный README
config/
└── install/
└── cmlexchange.settings.yml # Дефолтная конфигурация
src/Controller/
├── CmlExchange.php # Главный контроллер обмена
└── OrdersDebug.php # Отладка заказов
src/Service/
├── CheckAuth.php # ✅ ИСПРАВЛЕН (Basic Auth)
├── CheckAuth.php.backup # Резервная копия
├── DebugService.php # Сервис отладки
├── FileService.php # Работа с файлами
├── ImportPipeline.php # Пайплайн импорта
├── Orders.php # Обработка заказов
└── Protocol.php # Протокол CommerceML
src/Form/
├── Import.php # Форма импорта
└── SettingsProtocol.php # Настройки протокола
src/Drush/Commands/
└── CmlexchangeCommands.php # Drush команды
src/Hook/
└── EntityView.php # Хуки просмотра сущностей
src/Utility/
└── FormStateExtraInterface.php # Интерфейс для форм
├── README_PATCH.md # Документация патча (8 KB)
├── cmlexchange_config.yaml # Рабочая конфигурация (1.5 KB)
├── cmlexchange-http-auth.patch # Patch файл для Composer
└── MANIFEST.md # Этот файл
Файл: src/Service/CheckAuth.php
Метод: baseAuthUser()
Проблема: Не работал Basic Auth через Nginx/Apache proxy
Решение: Добавлен парсинг заголовка HTTP_AUTHORIZATION
Код до исправления:
private function baseAuthUser() {
$user = FALSE;
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
$user = [
'name' => $_SERVER['PHP_AUTH_USER'],
'pass' => $_SERVER['PHP_AUTH_PW'],
];
}
return $user;
}
Код после исправления:
private function baseAuthUser() {
$user = FALSE;
if (isset($_SERVER['HTTP_AUTHORIZATION'])) {
$auth = [];
if (preg_match('/Basic\s+(.*)$/i', $_SERVER['HTTP_AUTHORIZATION'], $auth)) {
[$auth_name, $auth_pass] = explode(':', base64_decode($auth[1]));
$user = [
'name' => $auth_name,
'pass' => $auth_pass,
];
}
}
return $user;
}
Из cmlexchange.info.yml:
name: 'CML Exchange'
type: module
description: 'Commerce ML Exchange'
package: Commerce
core_version_requirement: ^9 || ^10 || ^11
dependencies:
- drupal:system (>=8.0)
composer require 'drupal/cmlexchange:^1.20'
Вариант A: Вручную
cd web/modules/contrib/cmlexchange
patch -p1 < /opt/claude-workspace/library/drupal/cmlexchange-patched/cmlexchange-http-auth.patch
Вариант B: Composer Patches
{
"extra": {
"patches": {
"drupal/cmlexchange": {
"Fix HTTP_AUTHORIZATION": "library/drupal/cmlexchange-patched/cmlexchange-http-auth.patch"
}
}
}
}
drush en cmlexchange -y
drush cr
drush config:set cmlexchange.settings auth 1 -y
drush config:set cmlexchange.settings auth-user '1c_exchange' -y
drush config:set cmlexchange.settings auth-pass 'YOUR_PASSWORD' -y
drush config:set cmlexchange.settings cmlmigrations 1 -y
drush cr
| Endpoint | Назначение | Метод |
|---|---|---|
/cmlexchange |
Основной endpoint обмена | GET/POST |
/cmlexchange/full |
Полный обмен | GET/POST |
/admin/config/services/cmlexchange |
Настройки | GET |
/admin/config/services/cmlexchange/import |
Ручной импорт | GET/POST |
# CheckAuth
curl -u "user:pass" "https://domain.com/cmlexchange?type=catalog&mode=checkauth"
# Init
curl -u "user:pass" "https://domain.com/cmlexchange?type=catalog&mode=init"
| Дата | Версия | Событие |
|---|---|---|
| 2025-11-14 | 1.20.0 | Установлен через Composer |
| 2025-11-14 | 1.20.0-patched | Исправлен CheckAuth.php |
| 2025-11-15 | 1.20.0-patched | Сохранён в library |
ВНИМАНИЕ: Модуль содержит рабочую конфигурацию с паролями!
Файл cmlexchange_config.yaml содержит:
- Логин: 1c_exchange
- Пароль: 1C_Exchange_2025_Strong
При использовании в production ОБЯЗАТЕЛЬНО поменяйте пароль!
Проект: pim-drupal
Workspace: /opt/claude-workspace
Документация: library/drupal/cmlexchange-patched/README_PATCH.md
Создано: 2025-11-15
Автор: Claude Code
Контрольная сумма: md5sum src/Service/CheckAuth.php