secubox-openwrt/package/secubox/luci-app-jitsi/root/usr/libexec/rpcd/luci.jitsi
CyberMind-FR 00082fe066 feat(jitsi): Add Jitsi Meet video conferencing integration
- secubox-app-jitsi: Docker-based Jitsi stack with jitsctl control CLI
- luci-app-jitsi: LuCI web configuration interface
- Catalog entry for SecuBox AppStore

Features:
- End-to-end encrypted video conferencing
- HAProxy integration with WebSocket/SSL support
- Mesh federation for SecuBox P2P network
- User authentication management
- Backup/restore functionality

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-31 13:29:06 +01:00

121 lines
3.3 KiB
Bash

#!/bin/sh
. /lib/functions.sh
. /usr/share/libubox/jshn.sh
JITSI_DIR="/srv/jitsi"
case "$1" in
list)
echo '{"status":{},"start":{},"stop":{},"restart":{},"install":{},"generate_config":{},"add_user":{"username":"str","password":"str"},"remove_user":{"username":"str"},"list_users":{},"logs":{"service":"str","lines":"int"}}'
;;
call)
case "$2" in
status)
# Get service status
json_init
# Check enabled
enabled=$(uci -q get jitsi.main.enabled)
domain=$(uci -q get jitsi.main.domain)
json_add_boolean "enabled" ${enabled:-0}
json_add_string "domain" "$domain"
# Check containers
if command -v docker >/dev/null 2>&1; then
json_add_boolean "docker_available" 1
json_add_object "containers"
for container in jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb; do
state=$(docker inspect -f '{{.State.Status}}' "$container" 2>/dev/null)
json_add_string "$container" "${state:-not_found}"
done
json_close_object
# Get stats from JVB if running
stats=$(docker exec jitsi-jvb curl -s http://localhost:8080/colibri/stats 2>/dev/null)
if [ -n "$stats" ]; then
conferences=$(echo "$stats" | jsonfilter -e '@.conferences' 2>/dev/null)
participants=$(echo "$stats" | jsonfilter -e '@.participants' 2>/dev/null)
json_add_object "stats"
json_add_int "conferences" ${conferences:-0}
json_add_int "participants" ${participants:-0}
json_close_object
fi
else
json_add_boolean "docker_available" 0
fi
json_dump
;;
start)
/etc/init.d/jitsi start >/dev/null 2>&1
echo '{"success":true}'
;;
stop)
/etc/init.d/jitsi stop >/dev/null 2>&1
echo '{"success":true}'
;;
restart)
/etc/init.d/jitsi restart >/dev/null 2>&1
echo '{"success":true}'
;;
install)
output=$(/usr/sbin/jitsctl install 2>&1)
json_init
json_add_boolean "success" 1
json_add_string "output" "$output"
json_dump
;;
generate_config)
output=$(/usr/sbin/jitsctl generate-config 2>&1)
json_init
json_add_boolean "success" 1
json_add_string "output" "$output"
json_dump
;;
add_user)
read -r input
username=$(echo "$input" | jsonfilter -e '@.username')
password=$(echo "$input" | jsonfilter -e '@.password')
output=$(/usr/sbin/jitsctl add-user "$username" "$password" 2>&1)
code=$?
json_init
json_add_boolean "success" $((code == 0))
json_add_string "output" "$output"
json_dump
;;
remove_user)
read -r input
username=$(echo "$input" | jsonfilter -e '@.username')
output=$(/usr/sbin/jitsctl remove-user "$username" 2>&1)
code=$?
json_init
json_add_boolean "success" $((code == 0))
json_add_string "output" "$output"
json_dump
;;
list_users)
domain=$(uci -q get jitsi.main.domain)
users=$(docker exec jitsi-prosody ls -1 /config/data/"$domain"/accounts/ 2>/dev/null | sed 's/\.dat$//' | tr '\n' ',')
json_init
json_add_string "users" "$users"
json_dump
;;
logs)
read -r input
service=$(echo "$input" | jsonfilter -e '@.service')
lines=$(echo "$input" | jsonfilter -e '@.lines')
[ -z "$lines" ] && lines=50
logs=$(cd "$JITSI_DIR" && docker-compose logs --tail="$lines" ${service:-} 2>&1 | tail -100)
json_init
json_add_string "logs" "$logs"
json_dump
;;
esac
;;
esac
exit 0