From 7f2cb258d297127498f86892e0203d99a078a1b3 Mon Sep 17 00:00:00 2001 From: lmq8267 <119713693+lmq8267@users.noreply.github.com> Date: Thu, 18 Jan 2024 14:52:08 +0800 Subject: [PATCH] Create caddy --- luci-app-caddy/root/etc/init.d/caddy | 172 +++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 luci-app-caddy/root/etc/init.d/caddy diff --git a/luci-app-caddy/root/etc/init.d/caddy b/luci-app-caddy/root/etc/init.d/caddy new file mode 100644 index 0000000..a0c937f --- /dev/null +++ b/luci-app-caddy/root/etc/init.d/caddy @@ -0,0 +1,172 @@ +#!/bin/sh /etc/rc.common + +START=99 +USE_PROCD=1 +PROG="$(uci -q get caddy.@caddy[0].bin_dir)" + +get_config() { + config_get_bool enabled $1 enabled 0 + config_get cmd $1 cmd "默认" + config_get_bool webdav $1 webdav 0 + config_get port $1 port 12311 + config_get webdav_port $1 webdav_port 12322 + config_get log $1 log 1 + config_get data_dir $1 data_dir "/mnt" + config_get webdav_data_dir $1 webdav_data_dir "/mnt" + config_get log_dir $1 log_dir "/tmp/caddy/requests.log" + config_get caddy_file $1 caddy_file "/etc/caddy/Caddyfile" + config_get webdav_pass $1 webdav_pass 0 + config_get webdav_username $1 webdav_username "admin" + config_get webdav_password $1 webdav_password "123456" + config_get ssl $1 ssl 0 + config_get cgi $1 cgi 0 + config_get api $1 api 0 + config_get allow_wan $1 allow_wan 0 + + +} + +set_firewall() { + if [ "$external_access" = "allow" ]; then + uci -q delete firewall.caddy + uci set firewall.caddy=rule + uci set firewall.caddy.name="caddy" + uci set firewall.caddy.target="ACCEPT" + uci set firewall.caddy.src="wan" + uci set firewall.caddy.proto="tcp" + uci set firewall.caddy.dest_port="$port" + [ ! -z "$webdav_port" ] && uci set firewall.caddy.dest_port="$webdav_port" + uci set firewall.caddy.enabled="1" + uci commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 + elif [ "$external_access" = "deny" ]; then + uci -q delete firewall.caddy + uci commit firewall + /etc/init.d/firewall reload >/dev/null 2>&1 + fi +} + +start_service() { + config_load caddy + config_foreach get_config caddy + [ $enabled -ne 1 ] && return 1 + if [ ! -f "$PROG" ] ;then + uci -q set caddy.@caddy[0].enabled=0 + uci commit caddy + echo "$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X) : $PROG 未找到,无法启动!请确认已上传程序" >>$log_dir 2>&1 + exit 1 + else + chmod +x $PROG + if [ $(($($PROG -h | wc -l))) -lt 3 ] ;then + uci -q set caddy.@caddy[0].enabled=0 + uci commit caddy + echo "$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X) : $PROG 程序不完整或CPU架构不支持的程序,无法启动!" >>$log_dir 2>&1 + exit 1 + fi + fi + if [ "$cmd" = "默认" ] ;then + mkdir -p $data_dir + if [ "$log" -eq 1 ] ;then + log_path="$(dirname $log_dir)" + mkdir -p $log_path + logs="log { + output file $log_dir { + roll_size 1MiB + roll_local_time + roll_keep 5 + roll_keep_for 120h + } + }" + fi + if [ "$webdav" -eq 1 ] ;then + mkdir -p $webdav_data_dir + if [ "$webdav_pass" -eq 1 ] ;then + password="$($PROG hash-password --plaintext $webdav_password)" + basicauth="basicauth /dav/* { + $webdav_username $password + }" + fi + webdavs=":$webdav_port { + $basicauth + webdav * { + prefix /dav + root $webdav_data_dir + } + }" + reder_web="order webdav before file_server # 启动 webdav 模块 # 全局配置" + fi + if [ "$ssl" -eq 1 ] ;then + tsl="tls { + protocols tls1.1 tls1.2 tls1.3 + }" + fi + if [ "$cgi" -eq 1 ] ;then + cgis="order cgi before respond # 启动 cgi 模块 # 全局配置" + fi + if [ "$api" != "1" ] ;then + apis="admin off # 关闭 API 端口 # 全局配置" + fi + if [ "$allow_wan" -eq "1" ]; then + external_access="allow" + else + external_access="deny" + fi + if [ "$cgi" -eq 1 ] || [ "$webdav" -eq 1 ] || [ "$api" != "1" ] ;then + order="{ # 全局配置 + $cgis + $reder_web + $apis + } # 全局配置" + fi + set_firewall + + cat > $caddy_file < /tmp/caddy_time +} + +service_triggers() { + procd_add_reload_trigger "caddy" +} + +stop_service() { + external_access="deny" + set_firewall + rm -rf /tmp/caddy.tag /tmp/caddynew.tag + rm -rf $(uci -q get caddy.@caddy[0].log_dir) +} + +reload_service() { + stop + sleep 1 + start +}