Bug 47399

Summary: Доступ через API (модуль mod_xml_rpc) => 404, поэтому freeswitch-webui не работает
Product: Sisyphus Reporter: Artem Varaksa <varaksaaa>
Component: freeswitchAssignee: Anton Farygin <rider>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: at, cas, crux, ender, lav, ldv, mike, qa_viy, rider, shaba, viy
Version: unstable   
Hardware: x86_64   
OS: Linux   

Description Artem Varaksa 2023-08-30 14:17:15 MSK
Описание ошибки
===============

1. # apt-get install -y freeswitch-{daemon,webui}
2. # sed -i "s/<\/modules>/<load module=\"mod_xml_rpc\"\/><\/modules>/" /etc/freeswitch/autoload_configs/modules.conf.xml
3. # sed -i 's/<param name="http-port" value="8080"\/>/<param name="http-port" value="1234"\/>/' /etc/freeswitch/autoload_configs/xml_rpc.conf.xml
4. # systemctl restart freeswitch; sleep 3; systemctl status freeswitch
5. Перейти по адресу # echo "http://$(hostname -i):1234/portal/index.html"

Проверить работу:
6. Открыть вкладки: Users, Calls, Channels, Show (> Codecs), Sofia
7. Открыть вкладку Users > Add User > ввести User ID: test > нажать Create

9. Проверить поддержку WebSocket:
- # sed -i 's/<\/settings>/<param name="enable-websocket" value="true"\/>\n<\/settings>/' /etc/freeswitch/autoload_configs/xml_rpc.conf.xml
- # systemctl restart freeswitch; sleep 3; systemctl status freeswitch
- Проверить, что в (# tail -f /var/log/freeswitch/freeswitch.log) появилось сообщение вида (c "with websocket"):
  > [NOTICE] mod_xml_rpc.c:1263 Starting HTTP Port 1234, DocRoot [/usr/share/freeswitch/htdocs] with websocket.
- Проверить наличие надписи "Socket Disconnected!" в правом верхнем углу веб-интерфейса
- Проверить работу интерфейса в соответствие с шагами 6-7


Фактический результат
=====================

Веб-интерфейс не работает ни с WebSocket, ни без него (надпись "Socket Disconnected!" не исчезает даже при его включении).

В консоли браузера ошибки 404 (Not Found) вида:

> WebSocket connection to 'ws://<ip>:1234/socket' failed: Error during WebSocket handshake: Unexpected response code: 404
> GET http://<ip>:1234/api/event_sink?command=create-listener&events=ALL&format=json 404 (Not Found)

На шаге 7 ошибка 405 (Method Not Allowed):

> POST http://<ip>:1234/txtapi/lua?portal/create_user.lua%20test 405 (Method Not Allowed)

При вызове API-методов через curl результат такой же, даже если предоставить Basic-аутентификацию (аналогично примерам в документации https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_xml_rpc_1048928/):

> # curl 'http://localhost:1234/webapi/help' --user freeswitch:works
> <HTML><HEAD><TITLE>Error 404</TITLE></HEAD><BODY><H1>Error 404</H1><P>Not Found</P><p><HR><b><i><a href="http://xmlrpc-c.sourceforge.net">ABYSS Web Server for XML-RPC For C/C++</a></i></b> version 1.54.6<br></p></BODY></HTML>


Ожидаемый результат
===================

Корректная работа веб-интерфейса (как с включённой поддержкой WebSocket, так и без неё). Ошибок нет.


Воспроизводимость
=================

Воспроизводится на виртуальных машинах:

[p10] server-10.1-x86-64
freeswitch-daemon-1.10.9-alt1.x86_64
freeswitch-webui-1.10.9-alt1.x86_64

[sisyphus] server-10.1-x86-64
freeswitch-daemon-1.10.10-alt1.x86_64
freeswitch-webui-1.10.10-alt1.x86_64

Проверялось в браузерах на реальной машине [p10] kworkstation-10.1-x86-64:
chromium-gost-110.0.5481.177-alt1.p10.1.x86_64
firefox-esr-102.12.0-alt2.x86_64