Bug 55493

Summary: Проблема интеграции alterator-bro с Alterator и получение ошибки "Sorry, bro, unexpected login response"
Product: Альт Сервер Reporter: Sin Ivan <mr-zo99>
Component: Ошибки работыAssignee: Evgeny Sinelnikov <sin>
Status: NEW --- QA Contact: qa-p8 <qa-p8>
Severity: normal    
Priority: P5    
Version: 11.0   
Hardware: x86_64   
OS: Linux   
Attachments:
Description Flags
Скриншот ошибки авторизации none

Description Sin Ivan 2025-08-05 14:58:48 MSK
Created attachment 19285 [details]
Скриншот ошибки авторизации

Здравствуйте, уважаемые коллеги!

Возникла проблема при попытке интеграции библиотеки "alterator-bro" с Alterator при разработке нового модуля.
Делаю модуль, для которого требуется использование данной библиотеки.

Структура файлов:
   Файл `index.html` расположен: `/usr/share/alterator/ui/iec104`
    (В нем подключены `bro.js` и мой `iec104.js`).
    Код `index.html`:
    ```html
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
    <html wf="none">
      <head>
        <link type="text/css" rel="stylesheet" href="/design/styles/iec104.css" />
        <script src="/design/scripts/bro.js"></script>
        <script src="/design/scripts/iec104.js"></script>
        <title>Протокол МЭК 104</title>   
      </head>
      <body>
        <!-- Содержимое модуля -->
      </body>
    </html>
    ```
*   Файлы `bro.js` и `iec104.js` расположены: `/usr/share/alterator/design/scripts`
*   Файл бэкенда `iec104` расположен: `/usr/lib/alterator/backend3`
*   Файл `ajax.scm` (из `alterator-bro`) расположен: `/usr/share/alterator/ui/bro`

Проблема:
При загрузке страницы модуля `index.html` в браузере возникают ошибки (см.скриншот).
Консоль браузера показывает пустой `Response` для AJAX-запросов, инициируемых библиотекой `bro.js`.

Конкретная ошибка в коде `bro.js` (строка 150):
Исходя из кода (150 строка):

function bro_login (data, callback) {
 116     if (!data) data = {};
 117     var xhr = new XMLHttpRequest ();
 118     xhr.open ("POST", AHTTPD_PREFIX +
 119                       "/login?ajax=commit-login&continue=%2f&msienocache=" + Math.random(),
 120               true);
 121     xhr.onreadystatechange = function () {
 122         if (this.readyState == XMLHttpRequest.DONE) {
 123             var self = this;
 124             _bro_handle_message (self, function (resp) {
 125                 if (!resp || !resp.error) {
 126                     var session_cookie = BRO_GET_SESSION_COOKIE.exec (self.responseText);
 127                     var session_token = BRO_GET_SESSION_TOKEN.exec (self.responseText);
 128                     if (session_cookie && session_cookie[1]) {
 129                         resp = {
 130                             session : {
 131                                 session_cookie : session_cookie[1],
 132                                 session_token : (session_token &&
 133                                                  session_token[1] ?
 134                                                  session_token[1] :
 135                                                  null)
 136                             }
 137                         };
 138                         if (data.max_age == null)
 139                             data.max_age = BRO_MAX_AGE_DEFAULT;
 140                         if (data.max_age) {
 141                             document.cookie = "session=" +
 142                                               resp.session.session_cookie +
 143                                               ";path=/;" +
 144                                               ";max-age=" + data.max_age +
 145                                               ";secure";
 146                         }
 147                     } else {
 148                         resp = {
 149                             error : {
 150                                 message : "Sorry, bro, unexpected login response",
 151                                 responseText : self.responseText,
 152                                 code : 8
 153                             }
 154                         };
 155                     }
 156                 }

не получается извлечь session_cookie. По какой причине пока не ясно.
В функции `bro_login` (строки 116-156) не удается извлечь `session_cookie`.
Возникает ошибка: `message : "Sorry, bro, unexpected login response"` (строка 150 файла `bro.js`).

Вопросы:
1.  Правильно ли расположены файлы библиотеки `alterator-bro` и моего модуля с точки зрения Alterator?
2.  Возможно ли использовать библиотеку `alterator-bro` напрямую с Alterator, НЕ используя Nginx или другой какой-либо внешний веб-сервер, или же для работы `bro.js` требуется наличие такого сервера для корректной обработки AJAX-запросов и сессий?
3.  Какова может быть причина "unexpected login response" и пустых ответов (Response) для AJAX-запросов?

Прошу подсказать правильный подход к интеграции и устранению данной проблемы.