mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-10-28 00:32:51 +08:00
146 lines
4.9 KiB
Bash
Executable File
146 lines
4.9 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
|
|
|
START=99
|
|
STOP=10
|
|
USE_PROCD=1
|
|
|
|
SHORTCUT_APPLIER=/usr/libexec/quickactions-netwizard/apply-shortcuts.sh
|
|
|
|
clean_shortcuts() {
|
|
local sec
|
|
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
|
|
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
|
|
}
|
|
|
|
process_shortcut() {
|
|
local shortcut to_url lanaddr cfg="$1"
|
|
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
|
|
[ -z "$shortcut" ] || [ -z "$to_url" ] && return 0
|
|
|
|
if [ -f /etc/nginx/uci.conf ]; then
|
|
SHORTCUTS_TOUCHED=1
|
|
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"
|
|
uci -q set dhcp._sc_$shortcut=domain
|
|
uci -q set dhcp._sc_$shortcut.name="$shortcut"
|
|
uci -q set dhcp._sc_$shortcut.ip="$lanaddr"
|
|
fi
|
|
}
|
|
|
|
sethttps() {
|
|
local cfg="${1:-default}" https
|
|
config_get https "$cfg" https 0
|
|
# Safety: only touch redirect_https if wizard.default.https is explicitly set
|
|
local explicit
|
|
explicit=$(uci -q get wizard.default.https)
|
|
if [ -z "$explicit" ]; then
|
|
return 0
|
|
fi
|
|
|
|
if [ -x /etc/init.d/nginx ] && [ -f /etc/nginx/uci.conf ]; then
|
|
if [ "x${https}" = "x1" ]; then
|
|
[ -z "$(uci -q get nginx._redirect2ssl)" ] && {
|
|
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;'
|
|
}
|
|
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() {
|
|
# Only commit if we actually wrote to dhcp/nginx (shortcuts changed)
|
|
if [ "$SHORTCUTS_TOUCHED" = "1" ]; then
|
|
uci -q commit dhcp
|
|
[ -x /etc/init.d/dnsmasq ] && /etc/init.d/dnsmasq reload >/dev/null 2>&1
|
|
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
|
|
fi
|
|
}
|
|
|
|
SHORTCUTS_TOUCHED=0
|
|
|
|
start_service() {
|
|
config_load wizard
|
|
|
|
# Cookie persist → luci.sgi (only if wizard.default.persistent_cookies is explicitly set)
|
|
local explicit_pc
|
|
explicit_pc=$(uci -q get wizard.default.persistent_cookies)
|
|
if [ -n "$explicit_pc" ]; then
|
|
[ -z "$(uci -q get luci.sgi)" ] && uci -q set luci.sgi=sgi
|
|
uci -q set luci.sgi.persistent_cookies="$explicit_pc"
|
|
uci -q commit luci
|
|
fi
|
|
|
|
# Shortcuts (nginx + dnsmasq)
|
|
clean_shortcuts
|
|
config_foreach process_shortcut shortcuts
|
|
|
|
# HTTPS redirect
|
|
sethttps default
|
|
|
|
reload_services
|
|
}
|
|
|
|
stop_service() {
|
|
clean_shortcuts
|
|
reload_services
|
|
}
|
|
|
|
service_triggers() {
|
|
procd_add_reload_trigger "wizard"
|
|
}
|
|
|
|
boot() {
|
|
start "$@"
|
|
# Background coremark if enabled and not yet run
|
|
local cm
|
|
cm=$(uci -q get wizard.@wizard[0].coremark)
|
|
[ "$cm" = "1" ] || cm=$(uci -q get wizard.default.coremark)
|
|
if [ "$cm" = "1" ] && [ ! -f /etc/bench.log ]; then
|
|
(sleep 5; /sbin/coremark >/dev/null 2>&1) &
|
|
fi
|
|
}
|