From b63935e76399dd1fb0050f16c4dd215c7e23d310 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 3 Oct 2026 17:31:57 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=A4=20Sync=202026-10-03=2017:31:57?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aliyundrive-webdav/Makefile | 2 +- .../files/aliyundrive-webdav.init | 4 - clouddrive2/files/clouddrive2.init | 4 - dae/Makefile | 2 +- dae/files/dae.init | 4 - daed/Makefile | 2 +- daed/files/daed.init | 4 - fail2banop/Makefile | 2 +- fail2banop/files/fail2banop.init | 4 - floatip/Makefile | 2 +- floatip/files/floatip.init | 4 - ghttpd/Makefile | 2 +- ghttpd/files/ghttpd.init | 4 - gowebdav/Makefile | 4 +- homeredirect/Makefile | 2 +- homeredirect/files/etc/init.d/homeredirect | 4 - istoreenhance/Makefile | 2 +- istoreenhance/files/istoreenhance.init | 4 - kismet/Makefile | 2 +- kismet/files/kismet_drone.init | 4 - kismet/files/kismet_server.init | 4 - luci-app-3cat/root/etc/init.d/3cat | 4 - luci-app-adguardhome/patches/01_init.patch | 4 - .../root/etc/init.d/adguardhome | 4 - .../root/etc/uci-defaults/adguardhome | 4 - luci-app-advancedplus/Makefile | 2 +- .../root/etc/init.d/advancedplus | 4 - luci-app-amlogic/Makefile | 4 +- .../resources/view/amlogic/config.js | 9 +- luci-app-amlogic/root/etc/config/amlogic | 4 +- luci-app-ap-modem/Makefile | 2 +- luci-app-ap-modem/root/etc/init.d/ap_modem | 4 - .../root/etc/init.d/autoreboot | 4 - luci-app-change-mac/Makefile | 2 +- .../root/etc/init.d/change-mac | 4 - .../root/etc/init.d/chinadns-ng | 4 - luci-app-clashoo/Makefile | 2 +- .../resources/view/clashoo/overview.js | 4 - .../root/usr/share/rpcd/ucode/luci.clashoo | 4 - luci-app-cpe/Makefile | 2 +- luci-app-cpe/root/etc/init.d/modem | 4 - luci-app-daed/Makefile | 2 +- luci-app-daed/root/etc/init.d/luci_daed | 4 - luci-app-daede/Makefile | 2 +- .../etc/uci-defaults/90-luci-app-daede-init | 4 - luci-app-droidmodem/Makefile | 2 +- .../root/usr/share/droidnet/monitoring | 4 - luci-app-droidnet/Makefile | 2 +- .../root/usr/share/droidnet/monitoring | 4 - luci-app-eqosplus/Makefile | 2 +- luci-app-eqosplus/root/etc/init.d/eqosplus | 4 - luci-app-flowproxy/Makefile | 2 +- .../root/usr/share/rpcd/ucode/luci.flowproxy | 5 +- luci-app-fogvdn/Makefile | 2 +- luci-app-fogvdn/root/etc/init.d/fogvdn | 4 - .../root/etc/init.d/gobinetmodem | 4 - luci-app-gpioled/Makefile | 2 +- luci-app-gpioled/root/etc/init.d/gpioled | 4 - luci-app-homeproxy-pro/Makefile | 2 +- .../etc/homeproxy-pro/scripts/runtime/dns.sh | 4 - .../homeproxy-pro/scripts/runtime/firewall.sh | 4 - .../root/etc/init.d/hypermodem | 4 - luci-app-miniproxy/Makefile | 2 +- luci-app-miniproxy/files/miniproxy | 4 - luci-app-modem/Makefile | 2 +- luci-app-modem/root/etc/init.d/modem | 4 - luci-app-natter/Makefile | 2 +- luci-app-natter/root/etc/init.d/natter | 4 - luci-app-natter2/Makefile | 2 +- luci-app-natter2/root/etc/init.d/natter2 | 5 +- luci-app-neko/Makefile | 2 +- luci-app-neko/htdocs/nekoclash/index.php | 455 + luci-app-neko/htdocs/nekoclash/settings.php | 280 + luci-app-neko/root/etc/init.d/neko | 4 - luci-app-nekobox/Makefile | 2 +- luci-app-nekobox/htdocs/nekobox/ping.php | 8023 +++++++++++++++++ luci-app-nekobox/root/etc/init.d/neko | 4 - luci-app-netdata/Makefile | 2 +- .../root/usr/share/netdata/webcn/netdata.init | 4 - .../root/etc/init.d/netwiz-monitor | 4 - luci-app-nezhav1/Makefile | 2 +- luci-app-nezhav1/root/etc/init.d/nezha-agent | 4 - luci-app-npc/Makefile | 2 +- luci-app-npc/root/etc/init.d/npc | 4 - luci-app-open-box/Makefile | 2 +- luci-app-open-box/root/etc/init.d/openbox | 4 - .../root/etc/init.d/openbox-panel | 4 - luci-app-passwall/Makefile | 2 +- luci-app-passwall/luasrc/passwall/api.lua | 2 +- .../luasrc/passwall/util_sing-box.lua | 9 +- .../luasrc/passwall/util_xray.lua | 2 +- .../share/passwall/helper_chinadns_add.lua | 79 +- .../usr/share/passwall/helper_dnsmasq.lua | 54 +- .../share/passwall/helper_smartdns_add.lua | 77 +- .../root/usr/share/passwall/iptables.sh | 2 +- .../root/usr/share/passwall/nftables.sh | 6 +- luci-app-passwall2/Makefile | 2 +- luci-app-passwall2/luasrc/passwall2/api.lua | 2 +- .../luasrc/passwall2/util_sing-box.lua | 7 +- .../root/usr/share/passwall2/nftables.sh | 4 - luci-app-pcimodem/root/etc/init.d/pcimodem | 4 - luci-app-smartsafehub/CHANGELOG.md | 50 + luci-app-smartsafehub/Makefile | 4 +- .../frontend/package-lock.json | 4 +- luci-app-smartsafehub/frontend/package.json | 2 +- .../frontend/src/api/smartsafehub.ts | 7 + .../frontend/src/app/App.tsx | 24 + .../frontend/src/login/LoginApp.tsx | 12 +- luci-app-smartsafehub/frontend/src/main.tsx | 2 +- .../frontend/src/pages/SafeShieldPage.tsx | 113 +- .../frontend/src/pages/SettingsPage.tsx | 69 +- .../frontend/src/types/rules.ts | 4 - .../frontend/src/types/system.ts | 5 + .../frontend/src/utils/timezone.ts | 7 + .../root/etc/config/smartsafehub | 3 + .../90-smartsafehub-system-defaults | 30 +- .../rpcd/acl.d/luci-app-smartsafehub.json | 1 + .../root/usr/share/rpcd/ucode/smartsafehub.uc | 9 + .../share/rpcd/ucode/smartsafehub/system.uc | 155 +- .../ucode/luci/template/smartsafehub/login.ut | 6 +- .../root/www/luci-static/smartsafehub/app.css | 2 +- .../root/www/luci-static/smartsafehub/app.js | 4 +- luci-app-smartsafehub/tests/test-health.sh | 4 +- .../tests/test-package-contract.sh | 4 + .../tests/test-rpc-contract.sh | 3 +- .../tests/test-safeshield-page-contract.sh | 42 + .../tests/test-settings-ui-contract.sh | 24 + .../tests/test-system-defaults.sh | 23 +- .../tests/test-system-time-contract.sh | 30 +- luci-app-sms-tool-js/Makefile | 2 +- .../root/etc/init.d/my_new_sms | 4 - luci-app-sms-tool/Makefile | 2 +- luci-app-sms-tool/root/etc/init.d/smsled | 4 - luci-app-spdmodem/root/etc/init.d/spdmodem | 4 - .../root/etc/init.d/shadowsocks-rust | 4 - luci-app-substore/CHANGELOG.md | 62 + luci-app-substore/Makefile | 2 +- luci-app-substore/README.en.md | 6 +- luci-app-substore/README.md | 6 +- luci-app-substore/docs/INSTALL.md | 6 +- luci-app-substore/po/zh-cn/substore.po | 19 +- .../usr/lib/lua/luci/view/substore/combo.htm | 17 +- .../usr/lib/lua/luci/view/substore/form.htm | 17 +- .../lib/lua/luci/view/substore/local_form.htm | 16 +- luci-app-substore/tests/rules_fields_test.lua | 16 + .../root/usr/bin/ram_release.sh | 4 - luci-app-tailscale-ng/Makefile | 2 +- .../root/etc/init.d/luci-app-tailscale-ng | 4 - luci-app-usbmodem/root/etc/init.d/usbmodem | 4 - luci-app-wan-mac/Makefile | 2 +- luci-app-wan-mac/root/etc/init.d/wan_mac | 4 - luci-app-webd/Makefile | 2 +- luci-app-webd/root/etc/init.d/webd | 4 - luci-app-zerotier/Makefile | 2 +- .../resources/view/zerotier/general.js | 4 - .../root/usr/libexec/rpcd/luci-zerotier | 4 - luci-mod-status/Makefile | 2 +- .../view/status/include/30_network.js | 33 +- mergerfs/Makefile | 2 +- mergerfs/files/mergerfs.init | 4 - miniupnpd/Makefile | 2 +- miniupnpd/files/miniupnpd.init | 4 - mnh/Makefile | 2 +- mnh/files/mnh.init | 4 - mwan3-nft/Makefile | 2 +- mwan3-nft/files/lib/mwan3/common.sh | 4 - mwan3-nft/files/lib/mwan3/mwan3.sh | 4 - my-dnshelper/Makefile | 2 +- .../share/my-dnshelper/https-dns-proxy.init | 4 - netdata/Makefile | 2 +- netdata/files/netdata.init | 4 - open-app-filter/Makefile | 2 +- open-app-filter/files/appfilter.init | 4 - openwrt-e2guardian/Makefile | 2 +- openwrt-e2guardian/files/e2guardian.init | 4 - openwrt-mwgp/Makefile | 2 +- openwrt-mwgp/files/mwgp.init | 4 - pgyvpn/Makefile | 2 +- pgyvpn/files/etc/init.d/pgyvpn | 4 - phtunnel/Makefile | 2 +- phtunnel/files/etc/init.d/phtunnel | 4 - pikpak-webdav/Makefile | 2 +- pikpak-webdav/files/pikpak-webdav.init | 4 - qBittorrent-Enhanced-Edition/Makefile | 2 +- .../files/qbittorrent.init | 4 - qbittorrent/Makefile | 2 +- qbittorrent/files/qbittorrent.init | 4 - qosmate/Makefile | 2 +- qosmate/etc/init.d/qosmate-autorate | 4 - rosy-file-server/Makefile | 2 +- rosy-file-server/files/rosyfs.init | 4 - rustdesk-server/Makefile | 2 +- rustdesk-server/files/rustdesk-server.init | 4 - safeshield/Makefile | 2 +- .../share/rpcd/ucode/safeshield/runtime.uc | 4 - safeshield/spec/support/lifecycle_cases.sh | 4 - safeshield/tests/ucode/test_runtime.uc | 4 - shadowsocks-libev/Makefile | 2 +- .../files/shadowsocks-libev.init | 4 - tailscale-next/Makefile | 2 +- tailscale-next/files/tailscale.init | 4 - totd/Makefile | 2 +- totd/root/etc/init.d/totd | 4 - udpspeeder/Makefile | 2 +- udpspeeder/files/udpspeeder-init | 4 - unishare/Makefile | 2 +- unishare/files/unishare.init | 4 - vlmcsd/Makefile | 2 +- vlmcsd/files/vlmcsd.init | 4 - vpn-policy-routing/Makefile | 2 +- .../files/vpn-policy-routing.init | 4 - vpnbypass/Makefile | 2 +- vpnbypass/files/vpnbypass.init | 4 - wrtbwmon/Makefile | 2 +- wrtbwmon/net/etc/init.d/wrtbwmon | 4 - xkcptun/Makefile | 2 +- xkcptun/files/xkcptun.init | 4 - xl2tpd-ext/Makefile | 2 +- xl2tpd-ext/files/xl2tpd.init | 4 - 219 files changed, 9704 insertions(+), 670 deletions(-) create mode 100644 luci-app-neko/htdocs/nekoclash/index.php create mode 100644 luci-app-neko/htdocs/nekoclash/settings.php create mode 100644 luci-app-nekobox/htdocs/nekobox/ping.php create mode 100644 luci-app-smartsafehub/frontend/src/utils/timezone.ts diff --git a/aliyundrive-webdav/Makefile b/aliyundrive-webdav/Makefile index 755fefccd..454a47568 100644 --- a/aliyundrive-webdav/Makefile +++ b/aliyundrive-webdav/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=aliyundrive-webdav PKG_VERSION:=2.3.3 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz diff --git a/aliyundrive-webdav/files/aliyundrive-webdav.init b/aliyundrive-webdav/files/aliyundrive-webdav.init index 4e305477b..841a84dfd 100755 --- a/aliyundrive-webdav/files/aliyundrive-webdav.init +++ b/aliyundrive-webdav/files/aliyundrive-webdav.init @@ -95,7 +95,3 @@ start_service() { service_triggers() { procd_add_reload_trigger "aliyundrive-webdav" } - -reload_service() { - restart -} diff --git a/clouddrive2/files/clouddrive2.init b/clouddrive2/files/clouddrive2.init index 62d527abb..54bcdd5bc 100644 --- a/clouddrive2/files/clouddrive2.init +++ b/clouddrive2/files/clouddrive2.init @@ -39,7 +39,3 @@ stop_service() { killall -q clouddrive [ -d "$mount_point" ] && fusermount -u "$mount_point" } - -reload_service() { - restart -} diff --git a/dae/Makefile b/dae/Makefile index 0b3d21648..bc735203b 100644 --- a/dae/Makefile +++ b/dae/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=dae PKG_VERSION:=2026.09.24 -PKG_RELEASE:=48 +PKG_RELEASE:=49 PKG_SOURCE:=dae-src-2026.09.24-17135da7c881.tar.gz PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/dae-src diff --git a/dae/files/dae.init b/dae/files/dae.init index 671c9263e..394897e63 100644 --- a/dae/files/dae.init +++ b/dae/files/dae.init @@ -67,7 +67,3 @@ service_triggers() { hot_reload() { /etc/init.d/dae running && "$PROG" reload "$(cat /var/run/dae.pid)" } - -reload_service() { - restart -} diff --git a/daed/Makefile b/daed/Makefile index ce8845d3c..d738e3a41 100644 --- a/daed/Makefile +++ b/daed/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=daed PKG_VERSION:=2026.09.24 -PKG_RELEASE:=59 +PKG_RELEASE:=60 PKG_SOURCE:=daed-src-2026.09.24-527bb166b1ae.tar.gz PKG_SOURCE_URL:=https://github.com/kenzok8/openwrt-daede/releases/download/daed-src diff --git a/daed/files/daed.init b/daed/files/daed.init index be0a7282e..9277774db 100644 --- a/daed/files/daed.init +++ b/daed/files/daed.init @@ -81,7 +81,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "$CONF" } - -reload_service() { - restart -} diff --git a/fail2banop/Makefile b/fail2banop/Makefile index 756df9b6e..9d227dfdb 100644 --- a/fail2banop/Makefile +++ b/fail2banop/Makefile @@ -12,7 +12,7 @@ PKG_ARCH_FAIL2BANOP:=$(ARCH) PKG_NAME:=fail2banop # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable PKG_SOURCE_DATE:=1.0.1 -PKG_RELEASE:=2 +PKG_RELEASE:=3 ARCH_HEXCODE:= ifeq ($(ARCH),x86_64) ARCH_HEXCODE=8664 diff --git a/fail2banop/files/fail2banop.init b/fail2banop/files/fail2banop.init index 959d7686b..29dc1904e 100755 --- a/fail2banop/files/fail2banop.init +++ b/fail2banop/files/fail2banop.init @@ -35,7 +35,3 @@ service_triggers() { procd_add_reload_trigger "$NAME" } - -reload_service() { - restart -} diff --git a/floatip/Makefile b/floatip/Makefile index bbe68b37d..374168599 100644 --- a/floatip/Makefile +++ b/floatip/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=floatip PKG_VERSION:=1.1.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=jjm2473 include $(INCLUDE_DIR)/package.mk diff --git a/floatip/files/floatip.init b/floatip/files/floatip.init index d824c8b50..3f2261014 100755 --- a/floatip/files/floatip.init +++ b/floatip/files/floatip.init @@ -76,7 +76,3 @@ service_stopped() { service_triggers() { procd_add_reload_trigger "network" "floatip" } - -reload_service() { - restart -} diff --git a/ghttpd/Makefile b/ghttpd/Makefile index 1a857939e..c74e04016 100644 --- a/ghttpd/Makefile +++ b/ghttpd/Makefile @@ -11,7 +11,7 @@ PKG_ARCH_ghttpd:=$(ARCH) PKG_NAME:=ghttpd PKG_VERSION:=0.0.5 -PKG_RELEASE:=6 +PKG_RELEASE:=7 PKG_SOURCE:=$(PKG_NAME)-binary-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://github.com/Carseason/openwrt-packages/releases/download/prebuilt/ PKG_HASH:=skip diff --git a/ghttpd/files/ghttpd.init b/ghttpd/files/ghttpd.init index b7da1c766..310aa62c9 100755 --- a/ghttpd/files/ghttpd.init +++ b/ghttpd/files/ghttpd.init @@ -48,7 +48,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "ghttpd" } - -reload_service() { - restart -} diff --git a/gowebdav/Makefile b/gowebdav/Makefile index 784d4c5fc..ba1f95a0f 100644 --- a/gowebdav/Makefile +++ b/gowebdav/Makefile @@ -6,8 +6,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gowebdav -PKG_VERSION:=5.16.1 -PKG_RELEASE:=23 +PKG_VERSION:=5.17.0 +PKG_RELEASE:=24 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=https://codeload.github.com/hacdias/webdav/tar.gz/v$(PKG_VERSION)? diff --git a/homeredirect/Makefile b/homeredirect/Makefile index b3a3ca11b..67df2f019 100644 --- a/homeredirect/Makefile +++ b/homeredirect/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=HomeRedirect PKG_VERSION:=2.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_DATE:=20260930 PKG_MAINTAINER:=xiaoqingfeng diff --git a/homeredirect/files/etc/init.d/homeredirect b/homeredirect/files/etc/init.d/homeredirect index a4ca8f84f..2f5145442 100644 --- a/homeredirect/files/etc/init.d/homeredirect +++ b/homeredirect/files/etc/init.d/homeredirect @@ -151,7 +151,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "homeredirect" } - -reload_service() { - restart -} diff --git a/istoreenhance/Makefile b/istoreenhance/Makefile index 65362c128..bb2ff2d90 100644 --- a/istoreenhance/Makefile +++ b/istoreenhance/Makefile @@ -12,7 +12,7 @@ PKG_ARCH_ISTOREENHANCE:=$(ARCH) PKG_NAME:=istoreenhance # use PKG_SOURCE_DATE instead of PKG_VERSION for compitable PKG_SOURCE_DATE:=0.8.1 -PKG_RELEASE:=10 +PKG_RELEASE:=11 ARCH_HEXCODE:= ifeq ($(ARCH),x86_64) ARCH_HEXCODE=8664 diff --git a/istoreenhance/files/istoreenhance.init b/istoreenhance/files/istoreenhance.init index a57dbeefc..7a6bf8c9f 100755 --- a/istoreenhance/files/istoreenhance.init +++ b/istoreenhance/files/istoreenhance.init @@ -70,7 +70,3 @@ disabled_mirrors() { service_stopped() { disabled_mirrors } - -reload_service() { - restart -} diff --git a/kismet/Makefile b/kismet/Makefile index ff79370f3..5e94487f7 100644 --- a/kismet/Makefile +++ b/kismet/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=kismet PKG_VERSION:=2016-07-R1 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_LICENSE:=LGPLv2.1 PKG_CPE_ID:=cpe:/a:kismet:kismet diff --git a/kismet/files/kismet_drone.init b/kismet/files/kismet_drone.init index ba03a59d1..c23fa6b70 100755 --- a/kismet/files/kismet_drone.init +++ b/kismet/files/kismet_drone.init @@ -25,10 +25,6 @@ stop_service() { service_stop "${PROG}" } -reload_service() { - restart -} - service_triggers() { procd_add_reload_trigger "${NAME}" } diff --git a/kismet/files/kismet_server.init b/kismet/files/kismet_server.init index 2762f0468..a1e9f8fe5 100755 --- a/kismet/files/kismet_server.init +++ b/kismet/files/kismet_server.init @@ -25,10 +25,6 @@ stop_service() { service_stop "${PROG}" } -reload_service() { - restart -} - service_triggers() { procd_add_reload_trigger "${NAME}" } diff --git a/luci-app-3cat/root/etc/init.d/3cat b/luci-app-3cat/root/etc/init.d/3cat index 23e0df08e..8d3ef5d09 100755 --- a/luci-app-3cat/root/etc/init.d/3cat +++ b/luci-app-3cat/root/etc/init.d/3cat @@ -111,7 +111,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "$NAME" } - -reload_service() { - restart -} diff --git a/luci-app-adguardhome/patches/01_init.patch b/luci-app-adguardhome/patches/01_init.patch index 3830cd0fe..f8cf05d2c 100644 --- a/luci-app-adguardhome/patches/01_init.patch +++ b/luci-app-adguardhome/patches/01_init.patch @@ -248,7 +248,3 @@ index 4712913..1383834 100755 } service_triggers() { - -reload_service() { - restart -} diff --git a/luci-app-adguardhome/root/etc/init.d/adguardhome b/luci-app-adguardhome/root/etc/init.d/adguardhome index 642258581..1383834f1 100755 --- a/luci-app-adguardhome/root/etc/init.d/adguardhome +++ b/luci-app-adguardhome/root/etc/init.d/adguardhome @@ -266,7 +266,3 @@ service_triggers() { procd_add_raw_trigger 'interface.*.up' 5000 /etc/init.d/adguardhome restart fi } - -reload_service() { - restart -} diff --git a/luci-app-adguardhome/root/etc/uci-defaults/adguardhome b/luci-app-adguardhome/root/etc/uci-defaults/adguardhome index e33c9f089..d19d531ee 100755 --- a/luci-app-adguardhome/root/etc/uci-defaults/adguardhome +++ b/luci-app-adguardhome/root/etc/uci-defaults/adguardhome @@ -107,7 +107,3 @@ elif [ -z "$OLD_CONFIG_NEW_OPT_FILE" ] && [ "$OLD_CONFIG_FILE" != "$NEW_CONFIG_F else echo "AdGuard Home config is in its default path '$NEW_CONFIG_FILE'" fi - -reload_service() { - restart -} diff --git a/luci-app-advancedplus/Makefile b/luci-app-advancedplus/Makefile index 1c1c6eb07..f606369a9 100644 --- a/luci-app-advancedplus/Makefile +++ b/luci-app-advancedplus/Makefile @@ -11,7 +11,7 @@ LUCI_DEPENDS:=+luci-compat +curl LUCI_PKGARCH:=all PKG_VERSION:=1.8.9 -PKG_RELEASE:=2 +PKG_RELEASE:=3 define Package/$(PKG_NAME)/conffiles /etc/config/advancedplus diff --git a/luci-app-advancedplus/root/etc/init.d/advancedplus b/luci-app-advancedplus/root/etc/init.d/advancedplus index c24feb5a6..4c19b8615 100755 --- a/luci-app-advancedplus/root/etc/init.d/advancedplus +++ b/luci-app-advancedplus/root/etc/init.d/advancedplus @@ -151,7 +151,3 @@ reload() { restart } - -reload_service() { - restart -} diff --git a/luci-app-amlogic/Makefile b/luci-app-amlogic/Makefile index 108ea844d..eae8c9de7 100644 --- a/luci-app-amlogic/Makefile +++ b/luci-app-amlogic/Makefile @@ -22,11 +22,11 @@ PKG_NAME:=luci-app-amlogic # DD = day (01 = 1st) # NN = daily release sequence (01 = first release of the day, 02 = second, ...) # Example below: 26.10.0101 = October 1, 2026, 1st release of the day -PKG_VERSION:=26.10.0101 +PKG_VERSION:=26.10.0301 # PKG_RELEASE marks the LuCI variant; onekey-install.sh relies on it (do NOT bump) # 1 = Lua version (lua branch) → tag: 26.10.0101 # 2 = JS version (main branch) → tag: 26.10.0101-js -PKG_RELEASE:=19 +PKG_RELEASE:=20 PKG_LICENSE:=GPL-2.0 License PKG_MAINTAINER:=ophub diff --git a/luci-app-amlogic/htdocs/luci-static/resources/view/amlogic/config.js b/luci-app-amlogic/htdocs/luci-static/resources/view/amlogic/config.js index f4afb6b77..29148b46c 100644 --- a/luci-app-amlogic/htdocs/luci-static/resources/view/amlogic/config.js +++ b/luci-app-amlogic/htdocs/luci-static/resources/view/amlogic/config.js @@ -54,14 +54,14 @@ return view.extend({ const repo = o.option(form.Value, 'amlogic_firmware_repo', _('OpenWrt download repository:'), _('Set the OpenWrt files download repository on github.com in [Online Download Update].')); - repo.default = 'https://github.com/breakingbadboy/OpenWrt'; + repo.default = 'https://github.com/ophub/amlogic-s9xxx-openwrt'; repo.rmempty = false; // 3. Tags keyword const tag = o.option(form.Value, 'amlogic_firmware_tag', _('OpenWrt download tags keyword:'), _('Set the OpenWrt files download tags keyword for github.com in [Online Download Update].')); - tag.default = 'ARMv8'; + tag.default = 'OpenWrt_lede_'; tag.rmempty = false; // 4. File suffix @@ -76,15 +76,14 @@ return view.extend({ const kpath = o.option(form.ListValue, 'amlogic_kernel_path', _('Kernel download repository:'), _('Set the kernel files download repository on github.com in [Online Download Update].')); - kpath.value('https://github.com/breakingbadboy/OpenWrt'); kpath.value('https://github.com/ophub/kernel'); - kpath.default = 'https://github.com/breakingbadboy/OpenWrt'; + kpath.default = 'https://github.com/ophub/kernel'; kpath.rmempty = false; // 6. Kernel tags; available tags depend on the selected kernel repo. // Default is auto-derived from kernel_release suffixes (-rk3588/-rk35xx). const currentKpath = uci.get('amlogic', 'config', 'amlogic_kernel_path') || - 'https://github.com/breakingbadboy/OpenWrt'; + 'https://github.com/ophub/kernel'; const knownTags = { kernel_rk3588: 'kernel_rk3588 [Rockchip RK3588 Kernel]', kernel_rk35xx: 'kernel_rk35xx [Rockchip RK35xx Kernel]', diff --git a/luci-app-amlogic/root/etc/config/amlogic b/luci-app-amlogic/root/etc/config/amlogic index 1e5cf1265..2de524717 100644 --- a/luci-app-amlogic/root/etc/config/amlogic +++ b/luci-app-amlogic/root/etc/config/amlogic @@ -1,8 +1,8 @@ config amlogic 'config' option enable '1' - option amlogic_firmware_repo 'https://github.com/breakingbadboy/OpenWrt' - option amlogic_firmware_tag 'ARMv8' + option amlogic_firmware_repo 'https://github.com/ophub/amlogic-s9xxx-openwrt' + option amlogic_firmware_tag 'OpenWrt_lede_' option amlogic_firmware_suffix '.img.gz' option amlogic_kernel_path 'https://github.com/ophub/kernel' option amlogic_kernel_tags '' diff --git a/luci-app-ap-modem/Makefile b/luci-app-ap-modem/Makefile index 46d483d6b..b348edf1b 100644 --- a/luci-app-ap-modem/Makefile +++ b/luci-app-ap-modem/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_VERSION:=1.0.5-r20241208 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=jjm2473 LUCI_TITLE:=Easy Access AP / Modem diff --git a/luci-app-ap-modem/root/etc/init.d/ap_modem b/luci-app-ap-modem/root/etc/init.d/ap_modem index 3d9e509b6..78ff7a8ba 100755 --- a/luci-app-ap-modem/root/etc/init.d/ap_modem +++ b/luci-app-ap-modem/root/etc/init.d/ap_modem @@ -206,7 +206,3 @@ stop_service() { clean_config /etc/init.d/network reload } - -reload_service() { - restart -} diff --git a/luci-app-autoreboot/root/etc/init.d/autoreboot b/luci-app-autoreboot/root/etc/init.d/autoreboot index ebaa15807..147b14f64 100755 --- a/luci-app-autoreboot/root/etc/init.d/autoreboot +++ b/luci-app-autoreboot/root/etc/init.d/autoreboot @@ -42,7 +42,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "$CONF" } - -reload_service() { - restart -} diff --git a/luci-app-change-mac/Makefile b/luci-app-change-mac/Makefile index e1a6308d1..00d2e990e 100644 --- a/luci-app-change-mac/Makefile +++ b/luci-app-change-mac/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk LUCI_NAME:=luci-app-change-mac PKG_VERSION:=0.3.9 -#PKG_RELEASE:=1 +#PKG_RELEASE:=2 LUCI_TITLE:=LuCI for MAC address randomizer LUCI_DEPENDS:=+bash +rgmac +getopt diff --git a/luci-app-change-mac/root/etc/init.d/change-mac b/luci-app-change-mac/root/etc/init.d/change-mac index 9d4b2c18a..23ae4843e 100755 --- a/luci-app-change-mac/root/etc/init.d/change-mac +++ b/luci-app-change-mac/root/etc/init.d/change-mac @@ -102,10 +102,6 @@ restart() { start } -reload_service() { - restart -} - service_triggers() { procd_add_reload_trigger "$CONFIG_NAME" } diff --git a/luci-app-chinadns-ng/root/etc/init.d/chinadns-ng b/luci-app-chinadns-ng/root/etc/init.d/chinadns-ng index aa30c81d6..542a36369 100755 --- a/luci-app-chinadns-ng/root/etc/init.d/chinadns-ng +++ b/luci-app-chinadns-ng/root/etc/init.d/chinadns-ng @@ -185,7 +185,3 @@ stop_service() { config_load chinadns-ng config_foreach destroy_chnroute_ipset chinadns-ng } - -reload_service() { - restart -} diff --git a/luci-app-clashoo/Makefile b/luci-app-clashoo/Makefile index 2e0ed92d1..f5578e304 100644 --- a/luci-app-clashoo/Makefile +++ b/luci-app-clashoo/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-clashoo PKG_VERSION:=1.31.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/overview.js b/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/overview.js index 504775903..fd810822f 100644 --- a/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/overview.js +++ b/luci-app-clashoo/htdocs/luci-static/resources/view/clashoo/overview.js @@ -2024,7 +2024,3 @@ return view.extend({ handleSave: null, handleReset: null }); - -reload_service() { - restart -} diff --git a/luci-app-clashoo/root/usr/share/rpcd/ucode/luci.clashoo b/luci-app-clashoo/root/usr/share/rpcd/ucode/luci.clashoo index 97eea06ba..06caa0601 100755 --- a/luci-app-clashoo/root/usr/share/rpcd/ucode/luci.clashoo +++ b/luci-app-clashoo/root/usr/share/rpcd/ucode/luci.clashoo @@ -4709,7 +4709,3 @@ return { success: false, message: '还原失败: ' + e }; }; return { 'luci.clashoo': methods }; - -reload_service() { - restart -} diff --git a/luci-app-cpe/Makefile b/luci-app-cpe/Makefile index ae7dbb371..f5186ec60 100644 --- a/luci-app-cpe/Makefile +++ b/luci-app-cpe/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-cpe #软件包版本 PKG_VERSION:=5.0.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 #真正编译当前软件包的目录 PKG_BUILD_DIR:= $(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-cpe/root/etc/init.d/modem b/luci-app-cpe/root/etc/init.d/modem index 864e8d4ee..dffe31cc1 100755 --- a/luci-app-cpe/root/etc/init.d/modem +++ b/luci-app-cpe/root/etc/init.d/modem @@ -101,7 +101,3 @@ stop_service() echo "quectel-CM has stoped." } - -reload_service() { - restart -} diff --git a/luci-app-daed/Makefile b/luci-app-daed/Makefile index ff7b570c6..d920be107 100644 --- a/luci-app-daed/Makefile +++ b/luci-app-daed/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-daed PKG_VERSION:=1.4 -PKG_RELEASE:=2 +PKG_RELEASE:=3 LUCI_TITLE:=LuCI Support for DAED LUCI_DEPENDS:=+daed +zoneinfo-asia +luci-compat diff --git a/luci-app-daed/root/etc/init.d/luci_daed b/luci-app-daed/root/etc/init.d/luci_daed index 8d70ad1f3..dede99c16 100755 --- a/luci-app-daed/root/etc/init.d/luci_daed +++ b/luci-app-daed/root/etc/init.d/luci_daed @@ -87,7 +87,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "$CONF" } - -reload_service() { - restart -} diff --git a/luci-app-daede/Makefile b/luci-app-daede/Makefile index a24e67296..fbc8ec084 100644 --- a/luci-app-daede/Makefile +++ b/luci-app-daede/Makefile @@ -6,7 +6,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-daede PKG_VERSION:=1.15 -PKG_RELEASE:=48 +PKG_RELEASE:=49 PKG_MAINTAINER:=kenzok8 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init b/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init index 08130f6cf..afeacfb72 100644 --- a/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init +++ b/luci-app-daede/root/etc/uci-defaults/90-luci-app-daede-init @@ -107,7 +107,3 @@ if [ -f /etc/config/dae ]; then fi exit 0 - -reload_service() { - restart -} diff --git a/luci-app-droidmodem/Makefile b/luci-app-droidmodem/Makefile index ebb270b86..5b83b5f23 100644 --- a/luci-app-droidmodem/Makefile +++ b/luci-app-droidmodem/Makefile @@ -10,7 +10,7 @@ LUCI_DESCRIPTION:=Manage Android modem and optimize network settings. PKG_MAINTAINER:=Hilman Maulana PKG_VERSION:=1.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=Apache-2.0 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-droidmodem/root/usr/share/droidnet/monitoring b/luci-app-droidmodem/root/usr/share/droidnet/monitoring index 5f3a8a200..7310f0fe4 100644 --- a/luci-app-droidmodem/root/usr/share/droidnet/monitoring +++ b/luci-app-droidmodem/root/usr/share/droidnet/monitoring @@ -298,7 +298,3 @@ else echo " stop Stop the service" echo " restart Restart the service" fi - -reload_service() { - restart -} diff --git a/luci-app-droidnet/Makefile b/luci-app-droidnet/Makefile index ebb270b86..5b83b5f23 100644 --- a/luci-app-droidnet/Makefile +++ b/luci-app-droidnet/Makefile @@ -10,7 +10,7 @@ LUCI_DESCRIPTION:=Manage Android modem and optimize network settings. PKG_MAINTAINER:=Hilman Maulana PKG_VERSION:=1.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=Apache-2.0 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-droidnet/root/usr/share/droidnet/monitoring b/luci-app-droidnet/root/usr/share/droidnet/monitoring index 5f3a8a200..7310f0fe4 100644 --- a/luci-app-droidnet/root/usr/share/droidnet/monitoring +++ b/luci-app-droidnet/root/usr/share/droidnet/monitoring @@ -298,7 +298,3 @@ else echo " stop Stop the service" echo " restart Restart the service" fi - -reload_service() { - restart -} diff --git a/luci-app-eqosplus/Makefile b/luci-app-eqosplus/Makefile index fc7a14eb2..8d4a142d0 100644 --- a/luci-app-eqosplus/Makefile +++ b/luci-app-eqosplus/Makefile @@ -18,7 +18,7 @@ LUCI_DEPENDS:=+ip-full +tc +nftables +bc +kmod-ifb LUCI_PKGARCH:=all PKG_VERSION:=1.3.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:=sirpdboy define Build/Compile diff --git a/luci-app-eqosplus/root/etc/init.d/eqosplus b/luci-app-eqosplus/root/etc/init.d/eqosplus index 68b80dc19..f74b5fdd0 100755 --- a/luci-app-eqosplus/root/etc/init.d/eqosplus +++ b/luci-app-eqosplus/root/etc/init.d/eqosplus @@ -52,7 +52,3 @@ stop_service(){ eqosplus stop } - -reload_service() { - restart -} diff --git a/luci-app-flowproxy/Makefile b/luci-app-flowproxy/Makefile index aef27ab0f..648046eb3 100644 --- a/luci-app-flowproxy/Makefile +++ b/luci-app-flowproxy/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-flowproxy PKG_VERSION:=1.0.4 -PKG_RELEASE:=2 +PKG_RELEASE:=3 LUCI_TITLE:=LuCI Support for FlowProxy Traffic Diversion LUCI_DEPENDS:=+luci-base +nftables +kmod-nft-core +ip-full diff --git a/luci-app-flowproxy/root/usr/share/rpcd/ucode/luci.flowproxy b/luci-app-flowproxy/root/usr/share/rpcd/ucode/luci.flowproxy index 7e0d34bf1..0a7e3b7ce 100755 --- a/luci-app-flowproxy/root/usr/share/rpcd/ucode/luci.flowproxy +++ b/luci-app-flowproxy/root/usr/share/rpcd/ucode/luci.flowproxy @@ -227,7 +227,4 @@ const methods = { clear_logs: { call: function() { try { writefile(LOG_FILE, ''); return { result: true }; } catch(e) { return { result: false }; } } } }; -return { 'luci.flowproxy': methods }; -reload_service() { - restart -} +return { 'luci.flowproxy': methods }; \ No newline at end of file diff --git a/luci-app-fogvdn/Makefile b/luci-app-fogvdn/Makefile index f2c02036c..c69d1086e 100644 --- a/luci-app-fogvdn/Makefile +++ b/luci-app-fogvdn/Makefile @@ -9,7 +9,7 @@ include $(INCLUDE_DIR)/package.mk LLUCI_TITLE:=Luci for OpenFog Pear P2P CDN LUCI_PKGARCH:=all PKG_VERSION:=7 -PKG_RELEASE:=1 +PKG_RELEASE:=2 LUCI_DEPENDS:=+luci-compat +fogvdn +jq +lsblk include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-fogvdn/root/etc/init.d/fogvdn b/luci-app-fogvdn/root/etc/init.d/fogvdn index 18e32f835..7f2b1c743 100755 --- a/luci-app-fogvdn/root/etc/init.d/fogvdn +++ b/luci-app-fogvdn/root/etc/init.d/fogvdn @@ -134,7 +134,3 @@ reload_servie() stop start } - -reload_service() { - restart -} diff --git a/luci-app-gobinetmodem/root/etc/init.d/gobinetmodem b/luci-app-gobinetmodem/root/etc/init.d/gobinetmodem index 7909f7de7..953ee96c6 100755 --- a/luci-app-gobinetmodem/root/etc/init.d/gobinetmodem +++ b/luci-app-gobinetmodem/root/etc/init.d/gobinetmodem @@ -78,7 +78,3 @@ stop_service() echo "quectel-CM has stoped." } - -reload_service() { - restart -} diff --git a/luci-app-gpioled/Makefile b/luci-app-gpioled/Makefile index 9b6bc6afc..502ccec84 100644 --- a/luci-app-gpioled/Makefile +++ b/luci-app-gpioled/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-gpioled PKG_VERSION:=1.0.1-20230809 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_MAINTAINER:= LUCI_TITLE:=LuCI for GPIO LED diff --git a/luci-app-gpioled/root/etc/init.d/gpioled b/luci-app-gpioled/root/etc/init.d/gpioled index d7718649f..db5e44d4c 100755 --- a/luci-app-gpioled/root/etc/init.d/gpioled +++ b/luci-app-gpioled/root/etc/init.d/gpioled @@ -46,7 +46,3 @@ restart_service() { stop_service start_service } - -reload_service() { - restart -} diff --git a/luci-app-homeproxy-pro/Makefile b/luci-app-homeproxy-pro/Makefile index ebb875aae..a9d3789d4 100644 --- a/luci-app-homeproxy-pro/Makefile +++ b/luci-app-homeproxy-pro/Makefile @@ -18,7 +18,7 @@ LUCI_DEPENDS:= \ PKG_NAME:=luci-app-homeproxy-pro PKG_VERSION:=28.10.1.14 -PKG_RELEASE:=17 +PKG_RELEASE:=18 LUCI_BASENAME:=homeproxy-pro diff --git a/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/dns.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/dns.sh index 0b7084202..e4ed1bd10 100644 --- a/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/dns.sh +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/dns.sh @@ -264,7 +264,3 @@ hp_dnsmasq_remove_snippets() { /etc/init.d/dnsmasq restart >"/dev/null" 2>&1 \ || log "Warning: failed to restart dnsmasq after removing the homeproxy-pro snippets." } - -reload_service() { - restart -} diff --git a/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/firewall.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/firewall.sh index 728519d6d..60b693ac3 100644 --- a/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/firewall.sh +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/firewall.sh @@ -108,7 +108,3 @@ hp_firewall_teardown() { fw4 reload >"/dev/null" 2>&1 || true hp_restore_upnp_mappings } - -reload_service() { - restart -} diff --git a/luci-app-hypermodem/root/etc/init.d/hypermodem b/luci-app-hypermodem/root/etc/init.d/hypermodem index e581caf62..39436ee76 100755 --- a/luci-app-hypermodem/root/etc/init.d/hypermodem +++ b/luci-app-hypermodem/root/etc/init.d/hypermodem @@ -184,7 +184,3 @@ stop_service() { killall quectel-CM >/dev/null 2>&1 } - -reload_service() { - restart -} diff --git a/luci-app-miniproxy/Makefile b/luci-app-miniproxy/Makefile index fb6d870e9..46a8d4a2a 100644 --- a/luci-app-miniproxy/Makefile +++ b/luci-app-miniproxy/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-miniproxy PKG_VERSION:=4.2 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_LICENSE:=MIT PKG_LICENSE_FILES:=LICENSE diff --git a/luci-app-miniproxy/files/miniproxy b/luci-app-miniproxy/files/miniproxy index d65e41811..154301ef3 100644 --- a/luci-app-miniproxy/files/miniproxy +++ b/luci-app-miniproxy/files/miniproxy @@ -185,7 +185,3 @@ function start_ipv6_service() { enable_ipv4_tproxy enable_ipv6_tproxy } - -reload_service() { - restart -} diff --git a/luci-app-modem/Makefile b/luci-app-modem/Makefile index dc9b424b4..fa1a5c313 100644 --- a/luci-app-modem/Makefile +++ b/luci-app-modem/Makefile @@ -7,7 +7,7 @@ PKG_NAME:=luci-app-modem LUCI_TITLE:=LuCI support for Modem LUCI_PKGARCH:=all PKG_VERSION:=1.4.4 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_LICENSE:=GPLv3 PKG_LINCESE_FILES:=LICENSE PKF_MAINTAINER:=Siriling diff --git a/luci-app-modem/root/etc/init.d/modem b/luci-app-modem/root/etc/init.d/modem index e0f2f892b..a22e59efb 100755 --- a/luci-app-modem/root/etc/init.d/modem +++ b/luci-app-modem/root/etc/init.d/modem @@ -774,7 +774,3 @@ stop_service() esac done } - -reload_service() { - restart -} diff --git a/luci-app-natter/Makefile b/luci-app-natter/Makefile index 943961da6..2368b125d 100755 --- a/luci-app-natter/Makefile +++ b/luci-app-natter/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-natter PKG_VERSION:=1.1 -PKG_RELEASE:=1 +PKG_RELEASE:=2 LUCI_TITLE:=LuCI Support for Natter LUCI_PKGARCH:=all diff --git a/luci-app-natter/root/etc/init.d/natter b/luci-app-natter/root/etc/init.d/natter index 55c9bfb14..3ebbad4fb 100755 --- a/luci-app-natter/root/etc/init.d/natter +++ b/luci-app-natter/root/etc/init.d/natter @@ -227,7 +227,3 @@ uci_get_by_type() { local ret=$(uci get natter.@$1[$2].$3 2>/dev/null) echo ${ret:=$4} } - -reload_service() { - restart -} diff --git a/luci-app-natter2/Makefile b/luci-app-natter2/Makefile index d40bc4188..2749cd602 100755 --- a/luci-app-natter2/Makefile +++ b/luci-app-natter2/Makefile @@ -4,7 +4,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-natter2 PKG_VERSION:=1.0 -PKG_RELEASE:=1 +PKG_RELEASE:=2 LUCI_TITLE:=LuCI Support for Natter v2.2.1 LUCI_PKGARCH:=all diff --git a/luci-app-natter2/root/etc/init.d/natter2 b/luci-app-natter2/root/etc/init.d/natter2 index 64eb9170e..3660e401a 100755 --- a/luci-app-natter2/root/etc/init.d/natter2 +++ b/luci-app-natter2/root/etc/init.d/natter2 @@ -105,7 +105,4 @@ service_triggers() { uci_get_by_type() { local ret=$(uci get natter2.@$1[$2].$3 2>/dev/null) echo ${ret:=$4} -} -reload_service() { - restart -} +} \ No newline at end of file diff --git a/luci-app-neko/Makefile b/luci-app-neko/Makefile index 5124ade2d..6d4fbded4 100644 --- a/luci-app-neko/Makefile +++ b/luci-app-neko/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_MAINTAINER:=nosignal PKG_NAME:=luci-app-neko PKG_VERSION:=1.2.4-beta -PKG_RELEASE:=1 +PKG_RELEASE:=3 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-neko/htdocs/nekoclash/index.php b/luci-app-neko/htdocs/nekoclash/index.php new file mode 100644 index 000000000..b70ff9d53 --- /dev/null +++ b/luci-app-neko/htdocs/nekoclash/index.php @@ -0,0 +1,455 @@ + + * + * Contributors: + * - bobbyunknown + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +include './cfg.php'; +include './devinfo.php'; +$str_cfg=substr($selected_config, strlen("$neko_dir/config")+1); +$core_mode = exec("uci -q get neko.cfg.core_mode"); + +if(isset($_POST['neko'])){ + $dt = $_POST['neko']; + if ($core_mode == 'mihomo') { + if ($dt == 'start') shell_exec("$neko_dir/core/neko -s"); + if ($dt == 'disable') shell_exec("$neko_dir/core/neko -k"); + if ($dt == 'restart') shell_exec("$neko_dir/core/neko -r"); + if ($dt == 'clear') { + shell_exec("echo 'Log cleared...' > $neko_dir/tmp/log.txt"); + shell_exec("echo 'Log cleared...' > $neko_dir/tmp/neko_log.txt"); + } + } elseif ($core_mode == 'singbox') { + if ($dt == 'start') shell_exec("$neko_dir/core/singbox -s"); + if ($dt == 'disable') shell_exec("$neko_dir/core/singbox -k"); + if ($dt == 'restart') shell_exec("$neko_dir/core/singbox -r"); + if ($dt == 'clear') { + shell_exec("echo 'Log cleared...' > $neko_dir/tmp/log.txt"); + shell_exec("echo 'Log cleared...' > $neko_dir/tmp/singbox_log.txt"); + } + } +} +$neko_status=exec("uci -q get neko.cfg.enabled"); + +if ($core_mode == 'mihomo') { + $binary_log = "$neko_dir/tmp/mihomo_log.txt"; +} elseif ($core_mode == 'singbox') { + $binary_log = "$neko_dir/tmp/singbox_log.txt"; +} + +if ($core_mode == 'mihomo') { +} elseif ($core_mode == 'singbox') { +} +?> + +
+
+
+ +
Neko Home
+
+
+ +
+ +
+
+ + + + + +
+
Active Core
+
+ +
+
+
+
+
+ +
+
+ +
System Information
+
+
+
+ +
+
+ + IP Address +
+ Loading... +
+ +
+
+ + ISP +
+ Loading... +
+ +
+
+ + Devices +
+ +
+
+
+ + RAM +
+ +
+
+
+ + OS Version +
+ +
+
+
+ + Kernel Version +
+ +
+
+
+ + Uptime +
+ +
+
+
+
+ + +
+
+ +
Neko
+
+
+
+
+ + Status +
+
+
+ RUNNING\n"; + else echo "\n"; + echo "\n"; + ?> +
+
+
+ +
+
+ + Control +
+
+
+
+ + Enable Mihomo + '; + echo ''; + echo ''; + } elseif ($core_mode == 'singbox') { + echo ''; + echo ''; + echo ''; + } + ?> +
+
+
+
+ +
+
+ + Running Mode +
+ " disabled> +
+
+
+ + +
+
+ +
Traffic Statistics
+
+
+ +
+
+

-

+
Download
+
+
+

-

+
Upload
+
+
+ +
+ +
+
+
+ + +
+
+
+ +
+
+
+ + +
Binary Log
+ + +
+ +
+
+
+
+
+
+
+
+ + diff --git a/luci-app-neko/htdocs/nekoclash/settings.php b/luci-app-neko/htdocs/nekoclash/settings.php new file mode 100644 index 000000000..c20a3c5ae --- /dev/null +++ b/luci-app-neko/htdocs/nekoclash/settings.php @@ -0,0 +1,280 @@ + + * + * Contributors: + * - bobbyunknown + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +include './cfg.php'; + +$themeDir = "$neko_www/assets/theme"; +$arrFiles = array(); +$arrFiles = glob("$themeDir/*.css"); + +$neko_version = exec("opkg list-installed | grep luci-app-neko | cut -d ' - ' -f3"); +$neko_latest = exec("curl -m 5 -f -s https://raw.githubusercontent.com/nosignals/openwrt-neko/main/luci-app-neko/Makefile | grep PKG_VERSION: | cut -d= -f2"); +$stat = 0; +if ($neko_version == $neko_latest){ + $stat = 0; +} +else { + $stat = 1; +} + +for($x=0;$xUPDATING NEKO TO VERSION ".$neko_latest."
"; + echo "DONT CLOSE THIS TAB
"; + echo "if in 30s not showing notification, you can try again update"; + file_put_contents('/tmp/neko_update', $str_update); + exec("chmod +x /tmp/neko_update"); + shell_exec("/tmp/neko_update"); + echo "

Done Updating, Please reload this tab

"; + shell_exec("rm /tmp/neko_update"); + } + else{ + echo "

Check your Internet Connection!!!.

"; + } +} +$fwstatus=shell_exec("uci get neko.cfg.new_interface"); +?> + + +
+
+
+ +
Core Settings
+
+
+ + +
+ + Core is currently running. Please stop the service first to change the core. +
+ + +
+
+ + +
+ +
+
+
+
+
+
+
+ +
Neko Settings
+
+
+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+
+
+
+
+
+ +
Software Information
+
+
+ + + + + + + + + + + + + + + + + + + +
Auto Reload Firewall
+
+ + +
+
Client Version +
-
+
+
+ +
+
Core Version +
-
+
+ Update +
+
+
+
+
+
+
+ +
About
+
+
+
+
NekoClash
+

NekoClash is a family friendly Clash Proxy tool, this tool makes it easy for users to use Clash Proxy, and User can modify your own Theme based Bootstrap, inspired by OpenClash Tools. NekoClash has writen by PHP, and BASH.

+

This tool aims to make it easier to use Clash Proxy

+

If you have questions or feedback about NekoClash you can contact me on the DBAI Discord Server link below

+ +
External Links
+ + +

Please don't CHANGE or REMOVE this Credit!.

+
+
+
+
+ \ No newline at end of file diff --git a/luci-app-neko/root/etc/init.d/neko b/luci-app-neko/root/etc/init.d/neko index e21edae0c..ec185c2f1 100755 --- a/luci-app-neko/root/etc/init.d/neko +++ b/luci-app-neko/root/etc/init.d/neko @@ -48,7 +48,3 @@ stop() { stop_service() { stop } - -reload_service() { - restart -} diff --git a/luci-app-nekobox/Makefile b/luci-app-nekobox/Makefile index 5b90f1c3f..ac2aa9dec 100644 --- a/luci-app-nekobox/Makefile +++ b/luci-app-nekobox/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_MAINTAINER:=Thaolga PKG_NAME:=luci-app-nekobox PKG_VERSION:=2.0.9 -PKG_RELEASE:=4 +PKG_RELEASE:=6 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/luci-app-nekobox/htdocs/nekobox/ping.php b/luci-app-nekobox/htdocs/nekobox/ping.php new file mode 100644 index 000000000..b9f1b112b --- /dev/null +++ b/luci-app-nekobox/htdocs/nekobox/ping.php @@ -0,0 +1,8023 @@ +/dev/null")); + +date_default_timezone_set($timezone ?: 'UTC'); +?> + + false, + 'message' => '' + ]; + + if (is_dir($nekoDir)) { + if (deleteNekoTmpDirectory($nekoDir)) { + $response['success'] = true; + $response['message'] = 'Directory cleared successfully.'; + } else { + $response['message'] = 'Failed to delete the directory.'; + } + } else { + $response['message'] = 'The directory does not exist.'; + } + + header('Content-Type: application/json'); + echo json_encode($response); + exit; +} + +function deleteNekoTmpDirectory($dir) { + if (!file_exists($dir)) { + return true; + } + if (!is_dir($dir)) { + return unlink($dir); + } + + foreach (scandir($dir) as $item) { + if ($item === '.' || $item === '..') { + continue; + } + + if (!deleteNekoTmpDirectory($dir . DIRECTORY_SEPARATOR . $item)) { + return false; + } + } + + return rmdir($dir); +} +?> + +"; + $singbox_autostart = $autostart; +} +?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/luci-app-nekobox/root/etc/init.d/neko b/luci-app-nekobox/root/etc/init.d/neko index dbcece81b..b5ae8fbf6 100755 --- a/luci-app-nekobox/root/etc/init.d/neko +++ b/luci-app-nekobox/root/etc/init.d/neko @@ -48,7 +48,3 @@ stop() { $BIN -k fi } - -reload_service() { - restart -} diff --git a/luci-app-netdata/Makefile b/luci-app-netdata/Makefile index 7727ee724..decd052b7 100644 --- a/luci-app-netdata/Makefile +++ b/luci-app-netdata/Makefile @@ -10,7 +10,7 @@ LUCI_DEPENDS:=+netdata PKG_NAME:=luci-app-netdata PKG_VERSION:=2.0.4 -PKG_RELEASE:=4 +PKG_RELEASE:=5 PKG_LICENSE:=GPL-3.0 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init index f2db196e7..3f7941771 100644 --- a/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init +++ b/luci-app-netdata/root/usr/share/netdata/webcn/netdata.init @@ -99,7 +99,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger 'netdata' } - -reload_service() { - restart -} diff --git a/luci-app-netwiz/luci-app-netwiz/root/etc/init.d/netwiz-monitor b/luci-app-netwiz/luci-app-netwiz/root/etc/init.d/netwiz-monitor index cea4aa92f..6e986b710 100644 --- a/luci-app-netwiz/luci-app-netwiz/root/etc/init.d/netwiz-monitor +++ b/luci-app-netwiz/luci-app-netwiz/root/etc/init.d/netwiz-monitor @@ -142,7 +142,3 @@ stop_service() { service_triggers() { procd_add_reload_trigger "netwiz" } - -reload_service() { - restart -} diff --git a/luci-app-nezhav1/Makefile b/luci-app-nezhav1/Makefile index b3bf886cd..6c6522afa 100644 --- a/luci-app-nezhav1/Makefile +++ b/luci-app-nezhav1/Makefile @@ -15,7 +15,7 @@ LUCI_TITLE:=Nezha Agent is the client version 2 of the Nezha Panel. LUCI_DEPENDS:=+nezha-agentv1 LUCI_PKGARCH:=all PKG_VERSION:=30.0 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_MAINTAINER:= include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-nezhav1/root/etc/init.d/nezha-agent b/luci-app-nezhav1/root/etc/init.d/nezha-agent index 4a47b08bb..d8d8e836f 100755 --- a/luci-app-nezhav1/root/etc/init.d/nezha-agent +++ b/luci-app-nezhav1/root/etc/init.d/nezha-agent @@ -98,7 +98,3 @@ service_triggers() { # 触发服务重载 procd_add_reload_trigger "nezha-agent" } - -reload_service() { - restart -} diff --git a/luci-app-npc/Makefile b/luci-app-npc/Makefile index c8c992c49..9dfa4f6cb 100755 --- a/luci-app-npc/Makefile +++ b/luci-app-npc/Makefile @@ -7,7 +7,7 @@ LUCI_TITLE:=LuCI support for NPS Client(NPC) LUCI_DEPENDS:=+npc LUCI_PKGARCH:=all PKG_VERSION:=1.3 -PKG_RELEASE:=1 +PKG_RELEASE:=2 include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-npc/root/etc/init.d/npc b/luci-app-npc/root/etc/init.d/npc index 4cd072e09..783340531 100755 --- a/luci-app-npc/root/etc/init.d/npc +++ b/luci-app-npc/root/etc/init.d/npc @@ -65,7 +65,3 @@ uci_get_by_type() { local ret=$(uci get npc.@$1[$2].$3 2>/dev/null) echo ${ret:=$4} } - -reload_service() { - restart -} diff --git a/luci-app-open-box/Makefile b/luci-app-open-box/Makefile index c47f87db9..c1d83e9eb 100644 --- a/luci-app-open-box/Makefile +++ b/luci-app-open-box/Makefile @@ -2,7 +2,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-open-box PKG_VERSION:=0.1.280 -PKG_RELEASE:=5 +PKG_RELEASE:=6 PKG_MAINTAINER:=liandu2024 PKG_LICENSE:=GPL-3.0-or-later diff --git a/luci-app-open-box/root/etc/init.d/openbox b/luci-app-open-box/root/etc/init.d/openbox index 983ab3b7a..f73bb2b10 100755 --- a/luci-app-open-box/root/etc/init.d/openbox +++ b/luci-app-open-box/root/etc/init.d/openbox @@ -90,7 +90,3 @@ status() { echo "openbox is not running" return 1 } - -reload_service() { - restart -} diff --git a/luci-app-open-box/root/etc/init.d/openbox-panel b/luci-app-open-box/root/etc/init.d/openbox-panel index 2392a7893..2e71e35c2 100755 --- a/luci-app-open-box/root/etc/init.d/openbox-panel +++ b/luci-app-open-box/root/etc/init.d/openbox-panel @@ -89,10 +89,6 @@ status() { return 1 } -reload_service() { - restart -} - service_triggers() { procd_add_reload_trigger "openbox" } diff --git a/luci-app-passwall/Makefile b/luci-app-passwall/Makefile index 3e4a4b409..db3f3eaa3 100644 --- a/luci-app-passwall/Makefile +++ b/luci-app-passwall/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall PKG_VERSION:=26.10.1 -PKG_RELEASE:=307 +PKG_RELEASE:=308 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall/luasrc/passwall/api.lua b/luci-app-passwall/luasrc/passwall/api.lua index 21ff282df..399807e6b 100644 --- a/luci-app-passwall/luasrc/passwall/api.lua +++ b/luci-app-passwall/luasrc/passwall/api.lua @@ -185,7 +185,7 @@ end function exec_call(cmd) math.randomseed(os.time()) local tag = "\x01__RC__" .. tostring(math.random(100000, 999999)) .. "\x01" - local f = io.popen('(' .. cmd .. '); printf "\\n' .. tag .. '%d" "$?"') + local f = io.popen('(' .. cmd .. ') 2>&1; printf "\\n' .. tag .. '%d" "$?"') local out = f:read("*a") or "" f:close() local rc = out:match(tag .. "(%d+)%s*$") diff --git a/luci-app-passwall/luasrc/passwall/util_sing-box.lua b/luci-app-passwall/luasrc/passwall/util_sing-box.lua index c8c30683d..a7de4ffe6 100644 --- a/luci-app-passwall/luasrc/passwall/util_sing-box.lua +++ b/luci-app-passwall/luasrc/passwall/util_sing-box.lua @@ -56,10 +56,9 @@ function geo_convert_srs(var) if not fs.access(output_srs_file) and bin then local cmd = string.format("%q -type %q -action convert -input %q -list %q -output %q -lowmem=true", bin, prefix, geo_path, rule_name, output_srs_file) - sys.call(cmd) - local status = fs.access(output_srs_file) and "success." or "failed!" - if status == "failed!" then - api.log(string.format(" - %s:%s 转换为srs格式:%s", prefix, rule_name, status)) + local code, out = api.exec_call(cmd) + if code ~= 0 or not fs.access(output_srs_file) then + api.log(string.format(" - %s:%s 转换为srs格式:%s [%s]", prefix, rule_name, "failed!", out)) end end end @@ -1985,7 +1984,7 @@ function gen_config(var) table.insert(dns.servers, { tag = fakedns_tag, type = "fakeip", - inet4_range = "198.18.0.0/15", + inet4_range = "198.18.0.0/16", inet6_range = "2001:2::/48", }) diff --git a/luci-app-passwall/luasrc/passwall/util_xray.lua b/luci-app-passwall/luasrc/passwall/util_xray.lua index 5db76e844..ce1f57001 100644 --- a/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -1752,7 +1752,7 @@ function gen_config(var) if remote_dns_fake or inner_fakedns == "1" then fakedns = {} local fakedns4 = { - ipPool = "198.18.0.0/15", + ipPool = "198.18.0.0/16", poolSize = 65535 } local fakedns6 = { diff --git a/luci-app-passwall/root/usr/share/passwall/helper_chinadns_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_chinadns_add.lua index 148502d2e..4b9c7aed5 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_chinadns_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_chinadns_add.lua @@ -93,15 +93,13 @@ end local function get_geosite(list_arg, out_path) local geosite_path = api.uci_get_c("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/" geosite_path = geosite_path:match("^(.*)/") .. "/geosite.dat" - if not is_file_nonzero(geosite_path) then return 1 end + if not is_file_nonzero(geosite_path) then return 1, "File geosite.dat not found" end + if not list_arg or list_arg == "" then return 1, "Site list cannot be empty" end + if not out_path or out_path == "" then return 1, "Output path cannot be empty" end local bin = api.finded_com("geoview") - if bin and list_arg and out_path then - local cmd = string.format("%q -type geosite -append=true -input %q -list %q -output %q -lowmem=true", - bin, geosite_path, list_arg, out_path) - sys.call(cmd) - return 0 - end - return 1 + local cmd = string.format("%q -type geosite -append=true -input %q -list %q -output %q -lowmem=true", + bin, geosite_path, list_arg, out_path) + return api.exec_call(cmd) end sys.call("mkdir -p %s" % FLAG_PATH) @@ -127,6 +125,9 @@ end --自定义规则组,后声明的组具有更高优先级 --屏蔽列表 local file_block_host = CACHE_RULES_PATH .. "/block_host" +if not fs.access(file_block_host .. "_ok") then + api.remove(file_block_host) +end if USE_BLOCK_LIST == "1" and not fs.access(file_block_host) then local block_domain, lookup_block_domain = {}, {} local geosite_arg = "" @@ -152,13 +153,19 @@ if USE_BLOCK_LIST == "1" and not fs.access(file_block_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_block_host) == 0 then + local code, out = get_geosite(geosite_arg, file_block_host) + if code == 0 then log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)完成") else - log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)失败!") + log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_block_host) then + sys.call("touch " .. file_block_host .. "_ok") + end end if USE_BLOCK_LIST == "1" and is_file_nonzero(file_block_host) then tmp_lines = { @@ -214,6 +221,9 @@ end --直连(白名单)列表 local file_direct_host = CACHE_RULES_PATH .. "/direct_host" +if not fs.access(file_direct_host .. "_ok") then + api.remove(file_direct_host) +end if USE_DIRECT_LIST == "1" and not fs.access(file_direct_host) then local direct_domain, lookup_direct_domain = {}, {} local geosite_arg = "" @@ -239,13 +249,19 @@ if USE_DIRECT_LIST == "1" and not fs.access(file_direct_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_direct_host) == 0 then + local code, out = get_geosite(geosite_arg, file_direct_host) + if code == 0 then log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)完成") else - log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)失败!") + log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_direct_host) then + sys.call("touch " .. file_direct_host .. "_ok") + end end if USE_DIRECT_LIST == "1" and is_file_nonzero(file_direct_host) then local sets = { @@ -264,6 +280,9 @@ end --代理(黑名单)列表 local file_proxy_host = CACHE_RULES_PATH .. "/proxy_host" +if not fs.access(file_proxy_host .. "_ok") then + api.remove(file_proxy_host) +end if USE_PROXY_LIST == "1" and not fs.access(file_proxy_host) then local proxy_domain, lookup_proxy_domain = {}, {} local geosite_arg = "" @@ -289,13 +308,19 @@ if USE_PROXY_LIST == "1" and not fs.access(file_proxy_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_proxy_host) == 0 then + local code, out = get_geosite(geosite_arg, file_proxy_host) + if code == 0 then log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)完成") else - log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)失败!") + log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_proxy_host) then + sys.call("touch " .. file_proxy_host .. "_ok") + end end if USE_PROXY_LIST == "1" and is_file_nonzero(file_proxy_host) then local sets = { @@ -480,20 +505,22 @@ if IS_SHUNT_NODE and not only_global then end if not USE_CACHE and USE_GEOVIEW == "1" then - local return_direct, return_proxy, return_black - if geosite_direct_arg ~= "" then - return_direct = get_geosite(geosite_direct_arg, shunt_direct_host_tmp) + local ok = true + local function resolve(arg, dest) + if arg == "" then return end + local code, out = get_geosite(arg, dest) + if code ~= 0 then + ok = false + log(" - 解析[分流节点] Geosite 失败![" .. out .. "]") + end end - if geosite_proxy_arg ~= "" then - return_proxy = get_geosite(geosite_proxy_arg, shunt_proxy_host) - end - if geosite_black_arg ~= "" then - return_black = get_geosite(geosite_black_arg, shunt_black_host) - end - if return_direct == 0 and return_proxy == 0 and return_black == 0 then + resolve(geosite_direct_arg, shunt_direct_host_tmp) + resolve(geosite_proxy_arg, shunt_proxy_host) + resolve(geosite_black_arg, shunt_black_host) + if ok then log(" - 解析[分流节点] Geosite 完成") else - log(" - 解析[分流节点] Geosite 失败!") + api.remove(MD5_FILE) end end @@ -577,7 +604,7 @@ end --是否接受直连 DNS 空响应 if DEFAULT_TAG == "none_noip" then table.insert(config_lines, "noip-as-chnip") end -if DEFAULT_TAG == nil or DEFAULT_TAG == "smart" or DEFAULT_TAG == "none_noip" then DEFAULT_TAG = "none" end +if not DEFAULT_TAG or DEFAULT_TAG == "smart" or DEFAULT_TAG == "none_noip" then DEFAULT_TAG = "none" end table.insert(config_lines, "default-tag " .. DEFAULT_TAG) diff --git a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.lua b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.lua index f6895a2d6..46ab50db5 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_dnsmasq.lua @@ -321,16 +321,16 @@ function add_rule(var) local function foreach_geosite(list_arg, callback) local geosite_path = api.uci_get_c("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/" geosite_path = geosite_path:match("^(.*)/") .. "/geosite.dat" - if not fs.access(geosite_path) then return end + if not fs.access(geosite_path) then return 1, "File geosite.dat not found" end + if not list_arg or list_arg == "" then return 1, "Site list cannot be empty" end local bin = api.finded_com("geoview") - if not (bin and list_arg) then return end local cmd = string.format("%q -type geosite -action extract -input %q -list %q -lowmem=true", bin, geosite_path, list_arg) - local pipe = io.popen(cmd) - if not pipe then return end - for line in pipe:lines() do - if line ~= "" then callback(line) end + local code, out = api.exec_call(cmd) + if code ~= 0 then return code, out end + for line in out:gmatch("[^\r\n]+") do + callback(line) end - pipe:close() + return 0 end local function get_dns_config_key() @@ -405,6 +405,7 @@ function add_rule(var) if not fs.access(CACHE_DNS_PATH) then fs.mkdir(CACHE_DNS_PATH) + local GEO_SUCCESS = true --屏蔽列表 if USE_CHINADNS_NG == "0" and USE_BLOCK_LIST == "1" then @@ -425,10 +426,15 @@ function add_rule(var) f:close() end if USE_GEOVIEW == "1" and geosite_arg ~= "" then - foreach_geosite(geosite_arg, function(line) + local code, out = foreach_geosite(geosite_arg, function(line) set_domain_address(line, "") end) - log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)完成") + if code == 0 then + log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)完成") + else + log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)失败![" .. out .. "]") + GEO_SUCCESS = false + end end end @@ -503,12 +509,17 @@ function add_rule(var) log(string.format(" - 域名白名单(whitelist):%s", fwd_dns or "默认")) end if USE_GEOVIEW == "1" and geosite_arg ~= "" then - foreach_geosite(geosite_arg, function(line) + local code, out = foreach_geosite(geosite_arg, function(line) add_excluded_domain(line) set_domain_dns(line, fwd_dns) set_domain_ipset(line, table.concat(sets, ",")) end) - log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)完成") + if code == 0 then + log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)完成") + else + log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)失败![" .. out .. "]") + GEO_SUCCESS = false + end end end end @@ -556,7 +567,7 @@ function add_rule(var) log(string.format(" - 代理域名表(blacklist):%s", fwd_dns or "默认")) end if USE_GEOVIEW == "1" and geosite_arg ~= "" then - foreach_geosite(geosite_arg, function(line) + local code, out = foreach_geosite(geosite_arg, function(line) add_excluded_domain(line) if NO_PROXY_IPV6 == "1" then set_domain_address(line, "::") @@ -564,7 +575,12 @@ function add_rule(var) set_domain_dns(line, fwd_dns) set_domain_ipset(line, table.concat(sets, ",")) end) - log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)完成") + if code == 0 then + log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)完成") + else + log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)失败![" .. out .. "]") + GEO_SUCCESS = false + end end end end @@ -698,12 +714,17 @@ function add_rule(var) end if USE_GFW_LIST == "1" and CHN_LIST == "0" and USE_GEOVIEW == "1" and geosite_arg ~= "" then --仅GFW模式解析geosite - foreach_geosite(geosite_arg, function(line) + local code, out = foreach_geosite(geosite_arg, function(line) add_excluded_domain(line) set_domain_dns(line, fwd_dns) set_domain_ipset(line, table.concat(sets, ",")) end) - log(string.format(" - 解析分流规则(%s) Geosite 完成", s.remarks)) + if code == 0 then + log(string.format(" - 解析分流规则(%s) Geosite 完成", s.remarks)) + else + log(string.format(" - 解析分流规则(%s) Geosite 失败![" .. out .. "]", s.remarks)) + GEO_SUCCESS = false + end end log(string.format(" - Sing-Box/Xray分流规则(%s):%s", s.remarks, fwd_dns or "默认")) @@ -755,7 +776,8 @@ function add_rule(var) server_out:close() ipset_out:close() end - + + if not GEO_SUCCESS then new_text = "" end local f_out = io.open(CACHE_TEXT_FILE, "a") f_out:write(new_text) f_out:close() diff --git a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua index afe272614..00b4d938a 100644 --- a/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua +++ b/luci-app-passwall/root/usr/share/passwall/helper_smartdns_add.lua @@ -99,15 +99,13 @@ end local function get_geosite(list_arg, out_path) local geosite_path = api.uci_get_c("@global_rules[0]", "v2ray_location_asset") or "/usr/share/v2ray/" geosite_path = geosite_path:match("^(.*)/") .. "/geosite.dat" - if not is_file_nonzero(geosite_path) then return 1 end + if not is_file_nonzero(geosite_path) then return 1, "File geosite.dat not found" end + if not list_arg or list_arg == "" then return 1, "Site list cannot be empty" end + if not out_path or out_path == "" then return 1, "Output path cannot be empty" end local bin = api.finded_com("geoview") - if bin and list_arg and out_path then - local cmd = string.format("%q -type geosite -append=true -input %q -list %q -output %q -lowmem=true", - bin, geosite_path, list_arg, out_path) - sys.call(cmd) - return 0 - end - return 1 + local cmd = string.format("%q -type geosite -append=true -input %q -list %q -output %q -lowmem=true", + bin, geosite_path, list_arg, out_path) + return api.exec_call(cmd) end sys.call("mkdir -p %s" % FLAG_PATH) @@ -285,6 +283,9 @@ end --屏蔽列表 local file_block_host = CACHE_RULES_PATH .. "/block_host" +if not fs.access(file_block_host .. "_ok") then + api.remove(file_block_host) +end if USE_BLOCK_LIST == "1" and not fs.access(file_block_host) then local block_domain, lookup_block_domain = {}, {} local geosite_arg = "" @@ -310,13 +311,19 @@ if USE_BLOCK_LIST == "1" and not fs.access(file_block_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_block_host) == 0 then + local code, out = get_geosite(geosite_arg, file_block_host) + if code == 0 then log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)完成") else - log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)失败!") + log(" - 解析[屏蔽列表] Geosite 到屏蔽域名表(blocklist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_block_host) then + sys.call("touch " .. file_block_host .. "_ok") + end end if USE_BLOCK_LIST == "1" and is_file_nonzero(file_block_host) then local domain_set_name = "psw-block" @@ -375,6 +382,9 @@ end --直连(白名单)列表 local file_direct_host = CACHE_RULES_PATH .. "/direct_host" +if not fs.access(file_direct_host .. "_ok") then + api.remove(file_direct_host) +end if USE_DIRECT_LIST == "1" and not fs.access(file_direct_host) then local direct_domain, lookup_direct_domain = {}, {} local geosite_arg = "" @@ -400,13 +410,19 @@ if USE_DIRECT_LIST == "1" and not fs.access(file_direct_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_direct_host) == 0 then + local code, out = get_geosite(geosite_arg, file_direct_host) + if code == 0 then log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)完成") else - log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)失败!") + log(" - 解析[直连列表] Geosite 到域名白名单(whitelist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_direct_host) then + sys.call("touch " .. file_direct_host .. "_ok") + end end if USE_DIRECT_LIST == "1" and is_file_nonzero(file_direct_host) then local domain_set_name = "psw-directlist" @@ -427,6 +443,9 @@ end --代理(黑名单)列表 local file_proxy_host = CACHE_RULES_PATH .. "/proxy_host" +if not fs.access(file_proxy_host .. "_ok") then + api.remove(file_proxy_host) +end if USE_PROXY_LIST == "1" and not fs.access(file_proxy_host) then local proxy_domain, lookup_proxy_domain = {}, {} local geosite_arg = "" @@ -452,13 +471,19 @@ if USE_PROXY_LIST == "1" and not fs.access(file_proxy_host) then end f_out:close() end + local success = true if USE_GEOVIEW == "1" and geosite_arg ~= "" then - if get_geosite(geosite_arg, file_proxy_host) == 0 then + local code, out = get_geosite(geosite_arg, file_proxy_host) + if code == 0 then log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)完成") else - log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)失败!") + log(" - 解析[代理列表] Geosite 到代理域名表(blacklist)失败![" .. out .. "]") + success = false end end + if success and fs.access(file_proxy_host) then + sys.call("touch " .. file_proxy_host .. "_ok") + end end if USE_PROXY_LIST == "1" and is_file_nonzero(file_proxy_host) then local domain_set_name = "psw-proxylist" @@ -647,20 +672,22 @@ if IS_SHUNT_NODE and not only_global then end if not USE_CACHE and USE_GEOVIEW == "1" then - local return_direct, return_proxy, return_black - if geosite_direct_arg ~= "" then - return_direct = get_geosite(geosite_direct_arg, shunt_direct_host) + local ok = true + local function resolve(arg, dest) + if arg == "" then return end + local code, out = get_geosite(arg, dest) + if code ~= 0 then + ok = false + log(" - 解析[分流节点] Geosite 失败![" .. out .. "]") + end end - if geosite_proxy_arg ~= "" then - return_proxy = get_geosite(geosite_proxy_arg, shunt_proxy_host) - end - if geosite_black_arg ~= "" then - return_black = get_geosite(geosite_black_arg, shunt_black_host) - end - if return_direct == 0 and return_proxy == 0 and return_black == 0 then + resolve(geosite_direct_arg, shunt_direct_host) + resolve(geosite_proxy_arg, shunt_proxy_host) + resolve(geosite_black_arg, shunt_black_host) + if ok then log(" - 解析[分流节点] Geosite 完成") else - log(" - 解析[分流节点] Geosite 失败!") + api.remove(MD5_FILE) end end diff --git a/luci-app-passwall/root/usr/share/passwall/iptables.sh b/luci-app-passwall/root/usr/share/passwall/iptables.sh index cb341c323..aa6330037 100755 --- a/luci-app-passwall/root/usr/share/passwall/iptables.sh +++ b/luci-app-passwall/root/usr/share/passwall/iptables.sh @@ -40,7 +40,7 @@ ip6t_m="$ip6t -t mangle -w" [ -z "$ip6t" ] || [ -z "$(lsmod | grep 'ip6table_nat')" ] && ip6t_n="eval #$ip6t_n" [ -z "$ip6t" ] || [ -z "$(lsmod | grep 'ip6table_mangle')" ] && ip6t_m="eval #$ip6t_m" FWI=$(uci -q get firewall.passwall.path 2>/dev/null) -FAKE_IP="198.18.0.0/15" +FAKE_IP="198.18.0.0/16" FAKE_IP_6="2001:2::/48" USE_GEOVIEW=0 diff --git a/luci-app-passwall/root/usr/share/passwall/nftables.sh b/luci-app-passwall/root/usr/share/passwall/nftables.sh index b62d7a9e9..5ef636e3a 100755 --- a/luci-app-passwall/root/usr/share/passwall/nftables.sh +++ b/luci-app-passwall/root/usr/share/passwall/nftables.sh @@ -46,7 +46,7 @@ NFTSET_SHUNT6_STATIC="${NFTSET_SHUNT6}_static" FWMARK="0x50535731" FWI=$(uci -q get firewall.passwall.path 2>/dev/null) -FAKE_IP="198.18.0.0/15" +FAKE_IP="198.18.0.0/16" FAKE_IP_6="2001:2::/48" USE_GEOVIEW=0 @@ -1637,7 +1637,3 @@ start) ;; *) ;; esac - -reload_service() { - restart -} diff --git a/luci-app-passwall2/Makefile b/luci-app-passwall2/Makefile index fe18202fa..e5296059b 100644 --- a/luci-app-passwall2/Makefile +++ b/luci-app-passwall2/Makefile @@ -7,7 +7,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-passwall2 PKG_VERSION:=26.10.1 -PKG_RELEASE:=134 +PKG_RELEASE:=135 PKG_PO_VERSION:=$(PKG_VERSION) PKG_CONFIG_DEPENDS:= \ diff --git a/luci-app-passwall2/luasrc/passwall2/api.lua b/luci-app-passwall2/luasrc/passwall2/api.lua index b67daed9c..7d8d4484c 100644 --- a/luci-app-passwall2/luasrc/passwall2/api.lua +++ b/luci-app-passwall2/luasrc/passwall2/api.lua @@ -215,7 +215,7 @@ end function exec_call(cmd) math.randomseed(os.time()) local tag = "\x01__RC__" .. tostring(math.random(100000, 999999)) .. "\x01" - local f = io.popen('(' .. cmd .. '); printf "\\n' .. tag .. '%d" "$?"') + local f = io.popen('(' .. cmd .. ') 2>&1; printf "\\n' .. tag .. '%d" "$?"') local out = f:read("*a") or "" f:close() local rc = out:match(tag .. "(%d+)%s*$") diff --git a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua index f47369dcf..69fbe6b68 100644 --- a/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua +++ b/luci-app-passwall2/luasrc/passwall2/util_sing-box.lua @@ -55,10 +55,9 @@ function geo_convert_srs(var) if not fs.access(output_srs_file) and bin then local cmd = string.format("%q -type %q -action convert -input %q -list %q -output %q -lowmem=true", bin, prefix, geo_path, rule_name, output_srs_file) - sys.call(cmd) - local status = fs.access(output_srs_file) and "success." or "failed!" - if status == "failed!" then - api.log(0, string.format(" - %s:%s convert to srs %s", prefix, rule_name, status)) + local code, out = api.exec_call(cmd) + if code ~= 0 or not fs.access(output_srs_file) then + api.log(0, string.format(" - %s:%s convert to srs %s [%s]", prefix, rule_name, "failed!", out)) end end end diff --git a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh index c9684d7a2..1a243b9bb 100755 --- a/luci-app-passwall2/root/usr/share/passwall2/nftables.sh +++ b/luci-app-passwall2/root/usr/share/passwall2/nftables.sh @@ -1025,7 +1025,3 @@ start) ;; *) ;; esac - -reload_service() { - restart -} diff --git a/luci-app-pcimodem/root/etc/init.d/pcimodem b/luci-app-pcimodem/root/etc/init.d/pcimodem index 807b90028..f60124f11 100755 --- a/luci-app-pcimodem/root/etc/init.d/pcimodem +++ b/luci-app-pcimodem/root/etc/init.d/pcimodem @@ -73,7 +73,3 @@ stop_service() } - -reload_service() { - restart -} diff --git a/luci-app-smartsafehub/CHANGELOG.md b/luci-app-smartsafehub/CHANGELOG.md index 96da2207f..211ab5b9b 100644 --- a/luci-app-smartsafehub/CHANGELOG.md +++ b/luci-app-smartsafehub/CHANGELOG.md @@ -1,5 +1,55 @@ # 변경 기록 +## [0.2.27-r1] - 2026-10-03 + +### 개선 + +- 일부 UI를 개선하여 더 명확하게 정보를 표현하도록 하였습니다. +- 첫 설치 시 브라우저의 시간대를 기본 시간대로 사용할 수 있도록 개선하였습니다. + +## [0.2.26-r4] - 2026-10-01 + +### 개선 + +- SafeShield의 보호 데이터 영역을 내부 용어 중심의 `Tier`, `Version`, `Rules`, `Unique domains` 목록 대신 사용자가 바로 이해할 수 있는 보호 상태 중심 화면으로 변경했습니다. +- 현재 적용된 보호 도메인 수를 가장 눈에 띄게 표시하고, `light` 같은 내부 tier 값은 `기본 보호`처럼 사용자 친화적인 보호 수준으로 표현합니다. +- 보호 데이터 버전에 포함된 UTC 시각을 사용자 브라우저의 로컬 시간으로 변환해 마지막 업데이트 시각으로 표시합니다. +- 원본 데이터 버전과 적용 규칙 수는 `세부 정보`에 남겨 문제 해결이 필요할 때만 확인할 수 있도록 정리했습니다. +- SafeShield 설정 설명에서도 `아티팩트` 같은 내부 용어 대신 `보호 데이터`를 사용하도록 문구를 정리했습니다. + +### 테스트 + +- 보호 데이터 카드가 보호 도메인, 보호 수준, 마지막 업데이트, 상태 안내와 접힌 세부 정보를 제공하고 기존 영어 내부 필드를 기본 화면에 직접 노출하지 않는지 UI 계약 테스트를 추가했습니다. +- 패키지 revision과 로그인/프론트엔드 asset version이 `0.2.26-r4`로 일치하는지 기존 패키지 계약 테스트로 함께 검증합니다. + +## [0.2.26-r3] - 2026-10-01 + +### 개선 + +- 원격 상태 보고에서 어떤 정보가 서버로 전송되고 어떤 정보가 전송되지 않는지 더 쉽게 구분할 수 있도록 개인정보 보호 안내를 개선했습니다. +- 전송되는 기기 상태와 진단 정보는 항목별로 나누고, 호스트명·WAN IP·Wi-Fi 정보·DNS 요청 내용·시스템 로그 원문처럼 전송하지 않는 정보는 별도의 보호 영역으로 강조했습니다. +- 라이트 모드와 다크 모드에서 개인정보 안내 카드의 배경, 테두리와 텍스트 대비가 자연스럽게 유지되도록 기존 테마 색상 체계를 사용했습니다. + +### 테스트 + +- 원격 상태 보고 화면에 개인정보 보호 설명과 전송/비전송 정보 분류가 유지되는지 UI 계약 테스트를 보강했습니다. +- DNS 요청 내용과 시스템 로그 원문이 서버에 전송되지 않는다는 안내가 계속 표시되는지 Health 계약 테스트를 추가했습니다. + +## [0.2.26-r2] - 2026-09-30 + +### 추가 + +- 새로 설치한 SmartSafeHub가 처음 접속한 브라우저의 시간대를 확인해 공유기 시간대를 자동으로 설정하도록 추가했습니다. + +### 개선 + +- 공유기 hostname은 항상 `SmartRouter` 기본 이름을 사용하도록 초기 설정 동작을 정리했습니다. +- 이미 시간대를 설정한 기존 장치와 기존 OpenWrt 설정은 자동 시간대 설정 대상에서 제외해 사용자 설정을 그대로 유지합니다. + +### 테스트 + +- 신규 설치의 1회 시간대 자동 설정, 기존 장치 시간대 보존, 지원하지 않는 브라우저 시간대 처리와 `SmartRouter` hostname 강제 적용을 검증하는 회귀 테스트를 보강했습니다. + ## [0.2.26-r1] - 2026-09-30 ### 수정 diff --git a/luci-app-smartsafehub/Makefile b/luci-app-smartsafehub/Makefile index aef494a84..b9223107f 100644 --- a/luci-app-smartsafehub/Makefile +++ b/luci-app-smartsafehub/Makefile @@ -6,8 +6,8 @@ include $(TOPDIR)/rules.mk PKG_NAME:=luci-app-smartsafehub -PKG_VERSION:=0.2.26 -PKG_RELEASE:=6 +PKG_VERSION:=0.2.27 +PKG_RELEASE:=7 PKG_MAINTAINER:=Beomjun Kang PKG_LICENSE:=GPL-3.0-or-later diff --git a/luci-app-smartsafehub/frontend/package-lock.json b/luci-app-smartsafehub/frontend/package-lock.json index beb0ca6e6..52baf8a5c 100644 --- a/luci-app-smartsafehub/frontend/package-lock.json +++ b/luci-app-smartsafehub/frontend/package-lock.json @@ -1,12 +1,12 @@ { "name": "luci-app-smartsafehub-frontend", - "version": "0.2.26", + "version": "0.2.27", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "luci-app-smartsafehub-frontend", - "version": "0.2.26", + "version": "0.2.27", "dependencies": { "chart.js": "4.5.1", "preact": "10.29.8" diff --git a/luci-app-smartsafehub/frontend/package.json b/luci-app-smartsafehub/frontend/package.json index 582f83fca..0f66741bd 100644 --- a/luci-app-smartsafehub/frontend/package.json +++ b/luci-app-smartsafehub/frontend/package.json @@ -1,7 +1,7 @@ { "name": "luci-app-smartsafehub-frontend", "private": true, - "version": "0.2.26", + "version": "0.2.27", "type": "module", "engines": { "node": ">=24.0" diff --git a/luci-app-smartsafehub/frontend/src/api/smartsafehub.ts b/luci-app-smartsafehub/frontend/src/api/smartsafehub.ts index f2730c0c2..4ede1b88c 100644 --- a/luci-app-smartsafehub/frontend/src/api/smartsafehub.ts +++ b/luci-app-smartsafehub/frontend/src/api/smartsafehub.ts @@ -23,6 +23,7 @@ import type { SystemRebootResult, SystemTimeSettings, SystemTimeSyncResult, + SystemTimezoneInitializationResult, } from '../types/system'; import type { SoftwareUpdateAccepted, @@ -180,6 +181,12 @@ export function fetchSystemTimeSettings(): Promise { return callApi(API_OBJECT, 'system_time_settings'); } +export function initializeSystemTimezone( + zonename: string, +): Promise { + return callApi(API_OBJECT, 'system_timezone_initialize', { zonename }); +} + export function updateSystemTimezone( zonename: string, ): Promise { diff --git a/luci-app-smartsafehub/frontend/src/app/App.tsx b/luci-app-smartsafehub/frontend/src/app/App.tsx index 8a90fcd61..73cc85f30 100644 --- a/luci-app-smartsafehub/frontend/src/app/App.tsx +++ b/luci-app-smartsafehub/frontend/src/app/App.tsx @@ -1,4 +1,7 @@ import type { ComponentChildren } from 'preact'; +import { useEffect } from 'preact/hooks'; + +import { initializeSystemTimezone } from '../api/smartsafehub'; import { AppShell } from '../components/AppShell'; import { useActivityHistory } from '../hooks/useActivityHistory'; @@ -31,6 +34,7 @@ import { SafeShieldRulesPage } from '../pages/SafeShieldRulesPage'; import { SettingsPage } from '../pages/SettingsPage'; import { UpdatePage } from '../pages/UpdatePage'; import { WifiPage } from '../pages/WifiPage'; +import { browserTimezone } from '../utils/timezone'; interface AppProps { onAdministratorPasswordChanged: () => void; @@ -58,6 +62,26 @@ export function App({ onAdministratorPasswordChanged }: AppProps) { const health = useHealth(route === 'home' || route === 'settings'); const scheduledReboot = useScheduledRebootSettings(route === 'settings'); const systemTime = useSystemTimeSettings(route === 'settings'); + + useEffect(() => { + const detectedTimezone = browserTimezone(); + if (!detectedTimezone) { + return; + } + + void initializeSystemTimezone(detectedTimezone) + .then((result) => { + if (result.applied && route === 'settings') { + void systemTime.refresh(); + } + }) + .catch(() => { + // Automatic initialization is best-effort. Manual timezone controls in + // Settings remain available when browser detection or RPC application + // cannot complete. + }); + }, []); + const safeshieldActions = useSafeShieldActions( safeshield.refresh, safeshieldStatistics.refresh, diff --git a/luci-app-smartsafehub/frontend/src/login/LoginApp.tsx b/luci-app-smartsafehub/frontend/src/login/LoginApp.tsx index 6924dda02..5159a61fc 100644 --- a/luci-app-smartsafehub/frontend/src/login/LoginApp.tsx +++ b/luci-app-smartsafehub/frontend/src/login/LoginApp.tsx @@ -185,13 +185,12 @@ export function LoginApp({

SmartSafeHub