architect/_archive/2025-11-cleanup/library/drupal/cmlexchange-patched/MANIFEST.md

CML Exchange Module - Манифест

Модуль: 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/):

Controllers (2 файла):

src/Controller/
├── CmlExchange.php                   # Главный контроллер обмена
└── OrdersDebug.php                   # Отладка заказов

Services (7 файлов):

src/Service/
├── CheckAuth.php                     # ✅ ИСПРАВЛЕН (Basic Auth)
├── CheckAuth.php.backup              # Резервная копия
├── DebugService.php                  # Сервис отладки
├── FileService.php                   # Работа с файлами
├── ImportPipeline.php                # Пайплайн импорта
├── Orders.php                        # Обработка заказов
└── Protocol.php                      # Протокол CommerceML

Forms (2 файла):

src/Form/
├── Import.php                        # Форма импорта
└── SettingsProtocol.php              # Настройки протокола

Drush Commands (1 файл):

src/Drush/Commands/
└── CmlexchangeCommands.php           # Drush команды

Hooks (1 файл):

src/Hook/
└── EntityView.php                    # Хуки просмотра сущностей

Utility (1 файл):

src/Utility/
└── FormStateExtraInterface.php       # Интерфейс для форм

Дополнительные файлы (созданы при сохранении):

├── README_PATCH.md                   # Документация патча (8 KB)
├── cmlexchange_config.yaml           # Рабочая конфигурация (1.5 KB)
├── cmlexchange-http-auth.patch       # Patch файл для Composer
└── MANIFEST.md                       # Этот файл

✅ Исправления

CheckAuth.php - исправлена поддержка Basic Auth

Файл: 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)

🚀 Установка в новый проект

Шаг 1: Установить через Composer

composer require 'drupal/cmlexchange:^1.20'

Шаг 2: Применить патч

Вариант 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"
      }
    }
  }
}

Шаг 3: Включить модуль

drush en cmlexchange -y
drush cr

Шаг 4: Настроить

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

📊 Endpoints модуля

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