#!/bin/sh /etc/rc.common
# Copyright (C) 2021 ImmortalWrt

START=99
STOP=10
USE_PROCD=1

PROG="/usr/bin/gowebdav"

init_conf() {
	config_load "gowebdav"
	config_get "enable" "config" "enable" "0"
	config_get "listen_port" "config" "listen_port" "6086"
	config_get "username" "config" "username"
	config_get "password" "config" "password"
	config_get "root_dir" "config" "root_dir" "/mnt"
	config_get "read_only" "config" "read_only" "0"
	config_get "allow_wan" "config" "allow_wan" "0"
	config_get "use_https" "config" "use_https" "0"
	config_get "cert_cer" "config" "cert_cer"
	config_get "cert_key" "config" "cert_key"

	config_load "network"
	config_get "lan_addr" "lan" "ipaddr" "192.168.1.1"
}

set_firewall() {
	if [ "${set_type}" = "start" ]; then
		mkdir -p "/var/etc/"
		iptables -I INPUT -p tcp --dport "${listen_port}" -j ACCEPT
		echo "iptables -I INPUT -p tcp --dport "${listen_port}" -j ACCEPT" > "/var/etc/gowebdav.include"
	elif [ "${set_type}" = "stop" ]; then
		iptables -D INPUT -p tcp --dport "${listen_port}" -j ACCEPT
		echo "" > "/var/etc/gowebdav.include"
	fi
}

start_service() {
	local auth_arg readonly_arg https_arg

	init_conf

	set_type="stop"
	[ "${enable}" -ne "1" ] && { set_firewall 2>/dev/null ; return 1; }

	mkdir -p "${root_dir}"

	if [ "${allow_wan}" = "1" ]; then
		set_type="start"
	fi
	set_firewall 2>/dev/null
	[ -n "${username}" ] && [ -n "${password}" ] && auth_arg="-user ${username} -password ${password}"
	[ "${read_only}" -eq "1" ] && readonly_arg="-read-only"
	[ "${use_https}" -eq "1" ] && [ -e "${cert_cer}" ] && [ -e "${cert_key}" ] && https_arg="-https-mode -https-cert-file ${cert_cer} -https-key-file ${cert_key}"
	procd_open_instance
	procd_set_param command "$PROG"
	procd_append_param command -dir "${root_dir}" -http ":${listen_port}" ${auth_arg} ${readonly_arg} ${https_arg}
	procd_set_param respawn
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_close_instance
}

service_triggers() {
	procd_add_reload_trigger "gowebdav"
}
