mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-26 22:22:52 +08:00
151 lines
4.7 KiB
Bash
Executable File
151 lines
4.7 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
USE_PROCD=1
|
|
|
|
# 清理历史已生成的快捷方式(防止改名或删除后遗留失效条目)
|
|
clean_shortcuts() {
|
|
local sec
|
|
# 清理 nginx 中由 wizard 生成的 _sc_* server 节
|
|
for sec in $(uci -q show nginx 2>/dev/null | sed -n 's/^nginx\.\(_sc_[^=.]*\)=server$/\1/p'); do
|
|
uci -q delete nginx."$sec"
|
|
done
|
|
|
|
# 清理 dhcp (dnsmasq) 中由 wizard 生成的 _sc_* domain 节
|
|
for sec in $(uci -q show dhcp 2>/dev/null | sed -n 's/^dhcp\.\(_sc_[^=.]*\)=domain$/\1/p'); do
|
|
uci -q delete dhcp."$sec"
|
|
done
|
|
}
|
|
|
|
# 处理单条 shortcut 节
|
|
process_shortcut() {
|
|
local shortcut to_url comments lanaddr
|
|
local cfg="$1"
|
|
|
|
# 获取当前 LAN 口 IP,支持 DSA 列表与 CIDR 掩码剔除
|
|
lanaddr="$(uci -q get network.lan.ipaddr | tr ' ' '\n' | head -n1)"
|
|
lanaddr="${lanaddr%%/*}"
|
|
[ -z "$lanaddr" ] && lanaddr="10.0.0.1"
|
|
|
|
config_get shortcut "$cfg" shortcut
|
|
config_get to_url "$cfg" to_url
|
|
config_get comments "$cfg" comments
|
|
|
|
# 校验必要参数
|
|
if [ -z "$shortcut" ] || [ -z "$to_url" ]; then
|
|
return 0
|
|
fi
|
|
|
|
# 1. 配置 Nginx 302 重定向 (仅在存在 /etc/nginx/uci.conf 时配置,仅监听80,禁止未配证书监听443)
|
|
if [ -f /etc/nginx/uci.conf ]; then
|
|
uci -q set nginx._sc_$shortcut=server
|
|
uci -q set nginx._sc_$shortcut.server_name="$shortcut"
|
|
uci -q add_list nginx._sc_$shortcut.listen="80"
|
|
uci -q set nginx._sc_$shortcut.return="302 $to_url"
|
|
|
|
# 2. 配置 Dnsmasq (DHCP) 本地域名劫持
|
|
uci -q set dhcp._sc_$shortcut=domain
|
|
uci -q set dhcp._sc_$shortcut.name="$shortcut"
|
|
uci -q set dhcp._sc_$shortcut.ip="$lanaddr"
|
|
[ -n "$comments" ] && uci -q set dhcp._sc_$shortcut.comments="$comments"
|
|
fi
|
|
}
|
|
|
|
# 配置 HTTPS 访问重定向 (适配 Nginx / Lighttpd / uHTTPd)
|
|
sethttps() {
|
|
local cfg="${1:-default}"
|
|
local https
|
|
config_get https "$cfg" https 0
|
|
|
|
if [ -x /etc/init.d/nginx ] && [ -f /etc/nginx/uci.conf ]; then
|
|
if [ "x${https}" = "x1" ]; then
|
|
if [ -z "$(uci -q get nginx._redirect2ssl)" ]; then
|
|
uci -q set nginx._redirect2ssl=server
|
|
uci -q set nginx._redirect2ssl.server_name='_redirect2ssl'
|
|
uci -q set nginx._redirect2ssl.return='302 https://$host$request_uri'
|
|
uci -q set nginx._redirect2ssl.access_log='off; # logd openwrt'
|
|
fi
|
|
uci -q del nginx.default_server.listen
|
|
uci -q add_list nginx.default_server.listen='80'
|
|
uci -q add_list nginx.default_server.listen='[::]:80'
|
|
uci -q del nginx._redirect2ssl.listen
|
|
uci -q add_list nginx._redirect2ssl.listen='80 default_server'
|
|
uci -q add_list nginx._redirect2ssl.listen='[::]:80 default_server'
|
|
else
|
|
uci -q delete nginx._redirect2ssl
|
|
uci -q del nginx.default_server.listen
|
|
uci -q add_list nginx.default_server.listen='80 default_server'
|
|
uci -q add_list nginx.default_server.listen='[::]:80 default_server'
|
|
fi
|
|
uci -q commit nginx
|
|
/etc/init.d/nginx reload >/dev/null 2>&1
|
|
elif [ -x /etc/init.d/lighttpd ] && [ -f /etc/lighttpd/conf.d/82-https.conf ]; then
|
|
if [ "x${https}" = "x1" ]; then
|
|
sed -i "s/^[ \t]*#*[ \t]*url\.redirect[ \t]*=.*/\turl.redirect =/" /etc/lighttpd/conf.d/82-https.conf 2>/dev/null
|
|
else
|
|
sed -i "s/^[ \t]*url\.redirect[ \t]*=.*/\t# url.redirect =/" /etc/lighttpd/conf.d/82-https.conf 2>/dev/null
|
|
fi
|
|
/etc/init.d/lighttpd reload >/dev/null 2>&1
|
|
elif [ -x /etc/init.d/uhttpd ]; then
|
|
if [ "x${https}" = "x1" ]; then
|
|
uci -q set uhttpd.main.redirect_https='1'
|
|
else
|
|
uci -q set uhttpd.main.redirect_https='0'
|
|
fi
|
|
uci -q commit uhttpd
|
|
/etc/init.d/uhttpd reload >/dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
# 提交配置并平滑重载底层服务
|
|
reload_services() {
|
|
uci -q commit dhcp
|
|
if [ -x /etc/init.d/dnsmasq ]; then
|
|
/etc/init.d/dnsmasq reload >/dev/null 2>&1
|
|
fi
|
|
|
|
if [ -f /etc/nginx/uci.conf ] && [ -x /etc/init.d/nginx ]; then
|
|
uci -q commit nginx
|
|
/etc/init.d/nginx reload >/dev/null 2>&1
|
|
fi
|
|
}
|
|
|
|
start_service() {
|
|
config_load wizard
|
|
|
|
# 1. 开机 CoreMark 跑分处理 (后台异步执行,杜绝阻塞系统启动与前端保存卡死)
|
|
local coremark
|
|
config_get coremark default coremark 0
|
|
if [ "$coremark" = "1" ] && [ -x /bin/coremark ] && && [ -x /sbin/coremark ][ ! -f /etc/bench.log ] && [ ! -f /var/lock/opkg.lock ]; then
|
|
(sleep 5;/sbin/coremark >/dev/null 2>&1) &
|
|
fi
|
|
|
|
# 2. 持久 Cookie 会话配置同步到 LuCI 底层系统
|
|
local cookie_p
|
|
config_get cookie_p default persistent_cookies 1
|
|
if [ -n "$cookie_p" ]; then
|
|
[ -z "$(uci -q get luci.sgi)" ] && uci -q set luci.sgi=sgi
|
|
uci -q set luci.sgi.persistent_cookies="$cookie_p"
|
|
uci -q commit luci
|
|
fi
|
|
|
|
# 3. 清理并重新配置所有 Shortcuts
|
|
clean_shortcuts
|
|
config_foreach process_shortcut shortcuts
|
|
|
|
# 4. 设置 HTTPS 重定向
|
|
sethttps default
|
|
|
|
# 5. 提交并重载生效服务
|
|
reload_services
|
|
}
|
|
|
|
stop_service() {
|
|
clean_shortcuts
|
|
reload_services
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "wizard"
|
|
}
|