Compare commits

...

1 Commits

Author SHA1 Message Date
Suvendhu Hansa
7224a42012 userinterface: New package with backend plugin 2024-04-18 10:43:08 +05:30
8 changed files with 298 additions and 18 deletions

View File

@@ -7,37 +7,59 @@ include $(TOPDIR)/rules.mk
PKG_NAME:=userinterface
PKG_VERSION:=1.0.0
LOCAL_DEV:=0
ifneq ($(LOCAL_DEV),1)
PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=http://dev.iopsys.eu/userinterface.git
PKG_SOURCE_VERSION:=abcbcbcbbsbsbbsbsbsb
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz
PKG_MIRROR_HASH:=skip
endif
PKG_LICENSE:=BSD-3-Clause
PKG_LICENSE_FILES:=LICENSE
include $(INCLUDE_DIR)/package.mk
include ../bbfdm/bbfdm.mk
define Package/userinterface
SECTION:=utils
CATEGORY:=Utilities
SUBMENU:=TRx69
TITLE:=Package to add Device.UserInterface. datamodel support using bbfdm
DEPENDS:=+libbbfdm-api +nginx +nginx-util
MENU:=1
endef
MAKE_PATH:=src
define Package/userinterface/description
Package to add Device.UserInterface. datamodel support
endef
define Build/Compile
# Pass
ifeq ($(LOCAL_DEV),1)
define Build/Prepare
$(CP) -rf ~/git/userinterface/* $(PKG_BUILD_DIR)/
endef
endif
define Package/userinterface/install
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/uci-defaults
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/lib/upgrade/keep.d
$(INSTALL_DIR) $(1)/etc/userinterface
$(INSTALL_DIR) $(1)/etc/userinterface/plugins
$(INSTALL_DIR) $(1)/usr/libexec/rpcd
$(INSTALL_DATA) ./files/etc/config/userinterface $(1)/etc/config/userinterface
$(INSTALL_DATA) ./files/lib/upgrade/keep.d/userinterface $(1)/lib/upgrade/keep.d/userinterface
$(INSTALL_BIN) ./files/etc/init.d/userinterface $(1)/etc/init.d/userinterface
$(INSTALL_BIN) ./files/etc/uci-defaults/93-userinterface-firewall $(1)/etc/uci-defaults/93-userinterface-firewall
$(INSTALL_BIN) ./files/etc/uci-defaults/94-userinterface-json $(1)/etc/uci-defaults/94-userinterface-json
$(INSTALL_BIN) ./files/etc/firewall.userinterface $(1)/etc/firewall.userinterface
$(INSTALL_BIN) ./files/etc/uci-defaults/95-migrate-userinterface $(1)/etc/uci-defaults/95-migrate-userinterface
$(INSTALL_BIN) ./files/etc/firewall.userinterface $(1)/etc/userinterface/firewall.userinterface
$(INSTALL_BIN) ./files/etc/configure.userinterface $(1)/etc/userinterface/configure.userinterface
$(INSTALL_BIN) ./files/etc/rpc/userinterface $(1)/usr/libexec/rpcd/userinterface
$(call BbfdmInstallPluginInMicroservice,$(1)/etc/userinterface,$(PKG_BUILD_DIR)/src/libuserinterface.so)
$(call BbfdmInstallMicroServiceInputFile,$(1),./files/etc/input.json)
endef
$(eval $(call BuildPackage,userinterface))

View File

@@ -0,0 +1,87 @@
#!/bin/sh
. /lib/functions.sh
set_server_params() {
if [[ "${1}" = removed_* ]]; then
# This instance has been deleted so need to remove from nginx uci
config_get nginx_sec "${1}" section_name
if [ -n "${nginx_sec}" ]; then
uci -q delete nginx."${nginx_sec}"
fi
uci -q delete userinterface."${1}"
return 0
fi
config_get_bool enable "${1}" enable 0
config_get access "${1}" access
config_get interface "${1}" interface
config_get port "${1}" port
config_get path_prefix "${1}" path_prefix
config_get allow_host "${1}" allow_host
config_get protocol "${1}" protocol
if [ -z "${port}" ]; then
return 0
fi
# Check if section is present in nginx
nginx_sec=$(uci -q get nginx."${1}")
if [ -z "${nginx_sec}" ]; then
# Add new server section in nginx
uci -q set nginx."${1}"="server"
uci -q set nginx."${1}".server_name=${1}
fi
uci -q set nginx."${1}".uci_enable=$enable
uci -q set nginx."${1}".uci_access=$access
uci -q set nginx."${1}".uci_interface=$interface
uci -q set nginx."${1}".root=$path_prefix
uci -q delete nginx."${1}".listen
if [ "${protocol}" = "HTTPS" ]; then
uci -q add_list nginx."${1}".listen="$port ssl"
uci -q add_list nginx."${1}".listen="[::]:$port ssl"
else
uci -q add_list nginx."${1}".listen=$port
uci -q add_list nginx."${1}".listen=[::]:$port
fi
# Configure allowed hosts
nginx_includes=$(uci -q get nginx."${1}".include)
for i in $nginx_includes; do
if [[ "${i}" == allow_host_* ]]; then
uci -q del_list nginx."${1}".include="${i}"
rm -rf "/etc/nginx/${i}"
break
fi
done
if [ -n "${allow_host}" ]; then
host_file_path="/etc/nginx/allow_host_${1}"
for i in $allow_host; do
echo "allow $i;" >> "${host_file_path}"
done
echo "deny all;" >> "${host_file_path}"
uci -q add_list nginx."${1}".include="allow_host_${1}"
fi
}
configure_http_access() {
# Set server parameters in nginx
config_load userinterface
config_foreach set_server_params http_access
uci commit nginx
uci commit userinterface
# Inject firewall rules
procd_open_instance userinterface
/etc/userinterface/firewall.userinterface
procd_close_instance
}

View File

@@ -5,29 +5,32 @@ STOP=01
USE_PROCD=1
. /etc/userinterface/configure.userinterface
start_service() {
local enable
config_load userinterface
config_get_bool enable global enable 1
if [ ! -f "/etc/config/nginx" ]; then
if [ "${enable}" -eq "0" ]; then
return 0
fi
if [ "${enable}" -eq "1" ]; then
ubus call service state '{"name":"nginx", "spawn":true}'
else
ubus call service state '{"name":"nginx", "spawn":false}'
fi
configure_http_access
/etc/init.d/nginx reload
}
# Inject firewall rules
procd_open_instance userinterface
/etc/firewall.userinterface
procd_close_instance
stop_service() {
/etc/init.d/nginx stop
}
reload_service() {
stop
start
}
service_triggers()
{
procd_add_reload_trigger "userinterface" "nginx"
procd_add_reload_trigger "userinterface"
}

View File

@@ -0,0 +1,18 @@
{
"daemon": {
"config": {
"loglevel": "1"
},
"input": {
"type": "DotSo",
"name": "/etc/userinterface/libuserinterface.so",
"plugin_dir": "/etc/userinterface/plugins/"
},
"output": {
"type": "UBUS",
"parent_dm": "Device.",
"object": "UserInterface",
"root_obj": "bbfdm"
}
}
}

View File

@@ -0,0 +1,86 @@
#!/bin/sh
. /usr/share/libubox/jshn.sh
get_nginx_status() {
port="${1}"
nginx_pid=$(pgrep "nginx: master process")
json_init
if [ -z "${nginx_pid}" ]; then
json_add_string "server_status" "Error"
json_dump
return
fi
state="Error"
netstat -nltp | grep "${nginx_pid}/uci.conf" | awk '{print $4}' > /tmp/http_status
while read server; do
if [ -z "${server}" ]; then
continue
fi
sport=$(echo "${server##*:}")
if [ "${sport}" -eq "${port}" ]; then
state="Up"
break
fi
done < /tmp/http_status
rm -rf /tmp/http_status
json_add_string "server_status" "${state}"
json_dump
return
}
get_nginx_session_list() {
netstat -ntp | grep nginx | awk '{print $4,$5}' > /tmp/http_session
json_init
json_add_array "http_sessions"
while read server client; do
if [ -z "${server}" ] || [ -z "${client}" ]; then
continue
fi
sport=$(echo "${server##*:}")
cip=$(echo "${client}" | sed 's/:[^:]*$//g')
cport=$(echo "${client##*:}")
json_add_object ""
json_add_string "server_port" "${sport}"
json_add_string "client_ip" "${cip}"
json_add_string "client_port" "${cport}"
json_close_object
done < /tmp/http_session
json_close_array
json_dump
rm -rf /tmp/http_session
return
}
case "$1" in
list)
echo '{ "http_session": {}, "http_status": {"port":"String"} }'
;;
call)
case "$2" in
http_session)
get_nginx_session_list
;;
http_status)
read -r input
json_load "${input}"
json_get_var port "port"
json_cleanup
get_nginx_status "${port}"
;;
esac
;;
esac

View File

@@ -3,7 +3,7 @@
uci -q batch <<-EOT
delete firewall.userinterface
set firewall.userinterface=include
set firewall.userinterface.path=/etc/firewall.userinterface
set firewall.userinterface.path=/etc/userinterface/firewall.userinterface
set firewall.userinterface.reload=1
commit firewall
EOT

View File

@@ -0,0 +1,65 @@
#!/bin/sh
. /lib/functions.sh
parse_nginx_server() {
port=""
allow_host=""
protocol="HTTP"
# Check if section is already present in userinterface uci
sec=$(uci -q get userinterface."${1}")
if [ -n "${sec}" ]; then
# Section already present
return 0
fi
config_get_bool enable "${1}" uci_enable 1
config_get access "${1}" uci_access
config_get interface "${1}" uci_interface
config_get listen "${1}" listen
config_get include "${1}" include
config_get path_prefix "${1}" root
config_get ssl "${1}" ssl_certificate
for i in $listen; do
if [[ "${i}" == *:* ]]; then
port=$(echo $i | cut -d: -f 4)
else
port=$i
fi
break
done
for i in $include; do
if [[ "${i}" == allow_host_* ]]; then
allow_host=$(cat /etc/nginx/${i} | grep allow | cut -d' ' -f 2 | cut -d';' -f 1)
break
fi
done
if [ -n "${ssl}" ]; then
protocol="HTTPS"
fi
uci -q set userinterface."${1}"="http_access"
uci -q set userinterface."${1}".enable=$enable
uci -q set userinterface."${1}".access=$access
uci -q set userinterface."${1}".interface=$interface
uci -q set userinterface."${1}".port=$port
uci -q set userinterface."${1}".protocol=$protocol
uci -q set userinterface."${1}".path_prefix=$path_prefix
for i in $allow_host; do
uci -q add_list userinterface."${1}".allow_host="${i}"
done
}
migrate_uci_userinterface() {
config_load nginx
config_foreach parse_nginx_server server
uci commit userinterface
}
migrate_uci_userinterface

View File

@@ -1 +0,0 @@
/etc/nginx/allow_host_*