mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-20 01:20:35 +08:00
Compare commits
1 Commits
sysmngr_co
...
userintf_p
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7224a42012 |
@@ -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))
|
||||
|
||||
87
userinterface/files/etc/configure.userinterface
Normal file
87
userinterface/files/etc/configure.userinterface
Normal 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
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
18
userinterface/files/etc/input.json
Normal file
18
userinterface/files/etc/input.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
86
userinterface/files/etc/rpc/userinterface
Normal file
86
userinterface/files/etc/rpc/userinterface
Normal 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
|
||||
@@ -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
|
||||
|
||||
65
userinterface/files/etc/uci-defaults/95-migrate-userinterface
Executable file
65
userinterface/files/etc/uci-defaults/95-migrate-userinterface
Executable 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
|
||||
@@ -1 +0,0 @@
|
||||
/etc/nginx/allow_host_*
|
||||
Reference in New Issue
Block a user