#!/bin/sh
# Copyright (c) 2000-2016 Synology Inc. All rights reserved.
PACKAGE_NAME="VPNPlusServer"
PKG_DIR="/var/packages/${PACKAGE_NAME}"
PKG_TARGET_DIR="${PKG_DIR}/target"
PKG_USERCONF_DIR="${PKG_DIR}/etc"
VPNPLUS_REPORT_DIR="${PKG_TARGET_DIR}/ui/report"
REPORT_TOOL="syno_traffic_report_tool"
SERVICETOOL="/usr/syno/bin/servicetool"
SQLITE3="/usr/syno/bin/sqlite3"
FW_CONF="VPNPlusServer.sc"
DB_NAME="synovpnplus.db"
UPDATER="${PKG_TARGET_DIR}/scripts/updater.sh"
OLD_VERSION_FILE=${PKG_USERCONF_DIR}"/old_version"
OLD_VERSION=`get_key_value "${OLD_VERSION_FILE}" "old_version"`
NEW_VERSION=${SYNOPKG_PKGVER}
UDC_PATH="/usr/syno/etc/user.data.conf"
VPNPLUS_UDC_CONF="${PKG_TARGET_DIR}/etc/worker/user.data.conf/collector.config"
VPNPLUS_TOOL="${PKG_TARGET_DIR}/tool/synovpnplustool"

need_init_object=0

is_db_existed()
{
	if [ -e "${PKG_USERCONF_DIR}/db/${DB_NAME}" ]; then
		return 0
	fi

	return 1
}

install_configs()
{
	mkdir -p ${PKG_USERCONF_DIR}/pptp
	mkdir -p ${PKG_USERCONF_DIR}/l2tp
	mkdir -p ${PKG_USERCONF_DIR}/openvpn
	mkdir -p ${PKG_USERCONF_DIR}/openvpn/keys
	mkdir -p ${PKG_USERCONF_DIR}/s2s
	mkdir -p ${PKG_USERCONF_DIR}/synorouterportal
	mkdir -p ${PKG_USERCONF_DIR}/synotc
	mkdir -p ${PKG_USERCONF_DIR}/db
	mkdir -p ${PKG_USERCONF_DIR}/sslvpn
	mkdir -p ${PKG_USERCONF_DIR}/certificate
	mkdir -p ${PKG_USERCONF_DIR}/certificate/sslvpn
	mkdir -p ${PKG_USERCONF_DIR}/remotedesktop
	mkdir -p ${PKG_USERCONF_DIR}/sites-enabled

	if [ ! -e "${PKG_USERCONF_DIR}/synovpnplus.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/synovpnplus.conf ${PKG_USERCONF_DIR}/synovpnplus.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/vpnplus_objects.conf" ]; then
		need_init_object=1
		cp ${PKG_TARGET_DIR}/etc/vpnplus_objects.conf ${PKG_USERCONF_DIR}/vpnplus_objects.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/vpnplus_lease.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/vpnplus_lease.conf ${PKG_USERCONF_DIR}/vpnplus_lease.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/ipsec.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/ipsec.conf ${PKG_USERCONF_DIR}/ipsec.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/ipsec.secrets" ]; then
		cp ${PKG_TARGET_DIR}/etc/ipsec.secrets ${PKG_USERCONF_DIR}/ipsec.secrets
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/pptp/accel-pppd.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/pptp/accel-pppd.conf ${PKG_USERCONF_DIR}/pptp/accel-pppd.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/l2tp/options.xl2tpd" ]; then
		cp ${PKG_TARGET_DIR}/etc/l2tp/options.xl2tpd ${PKG_USERCONF_DIR}/l2tp/options.xl2tpd
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/l2tp/xl2tpd.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/l2tp/xl2tpd.conf ${PKG_USERCONF_DIR}/l2tp/xl2tpd.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/l2tp/ipsec_l2tp.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/l2tp/ipsec_l2tp.conf ${PKG_USERCONF_DIR}/l2tp/ipsec_l2tp.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/l2tp/ipsec_l2tp.secrets.encrypt" ]; then
		cp ${PKG_TARGET_DIR}/etc/l2tp/ipsec_l2tp.secrets.encrypt ${PKG_USERCONF_DIR}/l2tp/ipsec_l2tp.secrets.encrypt
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/openvpn/openvpn.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/openvpn/openvpn.conf ${PKG_USERCONF_DIR}/openvpn/openvpn.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/s2s/sites.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/s2s/sites.conf ${PKG_USERCONF_DIR}/s2s/sites.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/s2s/ipsec_template.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/s2s/ipsec_template.conf ${PKG_USERCONF_DIR}/s2s/ipsec_template.conf
	fi
		if [ ! -e "${PKG_USERCONF_DIR}/synorouterportal/rules.json" ]; then
		cp ${PKG_TARGET_DIR}/synorouterportal/rules.json ${PKG_USERCONF_DIR}/synorouterportal/rules.json
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/sslvpn/vpnserver.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/sslvpn/vpnserver.conf ${PKG_USERCONF_DIR}/sslvpn/vpnserver.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/openvpn/keys/ta.key" ]; then
		/usr/sbin/openvpn --genkey --secret ${PKG_USERCONF_DIR}/openvpn/keys/ta.key
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/remotedesktop/guacd.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/remotedesktop/guacd.conf ${PKG_USERCONF_DIR}/remotedesktop/guacd.conf
	fi
	if [ ! -e "${PKG_USERCONF_DIR}/remotedesktop/synoremotedesktop.conf" ]; then
		cp ${PKG_TARGET_DIR}/etc/remotedesktop/synoremotedesktop.conf ${PKG_USERCONF_DIR}/remotedesktop/synoremotedesktop.conf
	fi

	# add port-forwarding config file
	if [ ! -e ${PKG_USERCONF_DIR}/${FW_CONF} ]; then
		cp ${PKG_TARGET_DIR}/etc/${FW_CONF} ${PKG_USERCONF_DIR}/${FW_CONF}
	fi
	${SERVICETOOL} --install-configure-file --package ${PKG_USERCONF_DIR}/${FW_CONF}
}

# Fix bug produced by VPN Plus Server #949
if [ `${SQLITE3} /etc/synoappprivilege.db "PRAGMA journal_mode"` == "wal" ]; then
	${SQLITE3} /etc/synoappprivilege.db "PRAGMA journal_mode=delete"
fi

# First time installation
if [ "x$SYNOPKG_PKG_STATUS" != "xUPGRADE" ]; then

	# delete old_version file
	rm ${OLD_VERSION_FILE}

	# if can't get old or new version then remove everything
	if [ ! -z "${OLD_VERSION}" ] && [ ! -z "${NEW_VERSION}" ] && [ "${OLD_VERSION}" != "${NEW_VERSION}" ]; then
		/bin/sh ${UPDATER} ${OLD_VERSION} ${NEW_VERSION}
	else
		rm -rf ${PKG_USERCONF_DIR}/*
	fi

	if [ -e ${PKG_TARGET_DIR}/etc/openvpn/keys/openvpn.zip ]; then
		rm ${PKG_TARGET_DIR}/etc/openvpn/keys/openvpn.zip
	fi

	# Add user data collection
	ln -sf ${VPNPLUS_UDC_CONF} ${UDC_PATH}/vpnplus.config
fi

install_configs

if [ "x`${REPORT_TOOL} --is_registered --reporter_id VPNPlusServer`" == "x0" ]; then
	${REPORT_TOOL} --register --reporter_id ${PACKAGE_NAME} --meta_path ${VPNPLUS_REPORT_DIR}
fi

if [ "x${need_init_object}" == "x1" ]; then
	# check default object ip range is conflict with system or not
	${VPNPLUS_TOOL} -f -b
fi

exit 0
