#!/bin/bash

# Import common cmd
source ./_common.sh

# Init script
init_script

# Retrieve settings
installed_version=$(ynh_app_setting_get $app installed_version)
architecture=$(ynh_app_setting_get $app architecture)
path=$(ynh_app_setting_get $app path)
root_pwd=$(sudo cat /etc/yunohost/mysql)

# Set configuration for user and final path
set_configuration

# Download new version from sources
get_source $architecture $seafile_version

# stop seafile server
sudo service seafile-server stop

# extract new version
test -e $final_path/seafile-server-$seafile_version && sudo rm -rf "$final_path/seafile-server-$seafile_version"
sudo mkdir -p $final_path/seafile-server-$seafile_version
sudo tar xzf '/tmp/seafile_src.tar.gz'
sudo mv seafile-server-$seafile_version/* $final_path/seafile-server-$seafile_version
sudo mv '/tmp/seafile_src.tar.gz' $final_path/installed/seafile-server_${seafile_version}.tar.gz

# permission to execute update script and expect helper
sudo chmod +x ../conf/upgrade_4.1.1.exp
sudo chmod +x ../conf/upgrade_4.2.1.exp
sudo chmod +x ../conf/upgrade_4.3.2.exp
sudo chmod +x ../conf/upgrade_4.4.3.exp
sudo chmod +x ../conf/upgrade_5.0.3.exp
sudo chmod +x ../conf/upgrade_5.1.exp
sudo chmod +x ../conf/upgrade_6.0.exp
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_4.0_4.1.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_4.1_4.2.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_4.2_4.3.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_4.3_4.4.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_4.4_5.0.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_5.0_5.1.sh
sudo chmod +x $final_path/seafile-server-$seafile_version/upgrade/upgrade_5.1_6.0.sh
# do the upgrade
case $installed_version in
"4.0."* )
	# Update seafile by script
	sudo ../conf/upgrade_4.1.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_4.2.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_4.3.2.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_4.4.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.0.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
"4.1."* )
	# Update seafile by script
	sudo ../conf/upgrade_4.2.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_4.3.2.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_4.4.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.0.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
"4.3."* )
	# Update seafile by script
	sudo ../conf/upgrade_4.4.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.0.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
"4.4."* )
	# Update seafile by script
	sudo ../conf/upgrade_5.0.3.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
"5.0."* )
	# Update seafile by script
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
"5.1."* )
	# Update seafile by script
	sudo ../conf/upgrade_5.1.exp $final_path/seafile-server-$seafile_version $root_pwd
	sudo ../conf/upgrade_6.0.exp $final_path/seafile-server-$seafile_version $root_pwd
;;
esac

## Install webdav and logrotate if not installed
if [[ $installed_version = "4.0."* ]] || [[ $installed_version = "4.1."* ]]
then
	# findPort
	findPort () {
	    port=$1

	    sudo yunohost app checkport $port
	    while [[ ! $? -eq 0 ]]
		do
		    port=$(($port + 1))
		    sudo yunohost app checkport $port
		done

	  return $port
	}
	
	findPort 8080
	webdav_port=$port
	ynh_app_setting_set seafile webdav_port $webdav_port
	
	# Disallow port that was used by old seafile client
	ccnet_port=$(ynh_app_setting_get $app ccnet_port)
	seafile_port=$(ynh_app_setting_get $app seafile_port)
	sudo yunohost firewall disallow Both $ccnet_port
	sudo yunohost firewall disallow Both $seafile_port
	
	# Add webdav to nginx config
	sed -i "s@WEBDAV_PORT@$webdav_port@g" ../conf/nginx_add_webdav
	domain=$(ynh_app_setting_get seafile domain)
	echo $(cat ../conf/nginx_add_webdav) | sudo tee -a /etc/nginx/conf.d/$domain.d/seafile.conf
	
	# Add webdav config
	sudo cp ../conf/seafdav.conf $final_path/conf/seafdav.conf
	sudo sed -i "s@WEBDAV_PORT@$webdav_port@g" $final_path/conf/seafdav.conf
	
	# Add sso config to unprotect domain.tld/seafdav in /etc/ssowat/conf.json.persistent
	sudo cp ../conf/add_sso_conf.py $final_path
	sudo cp ../conf/add_sso_conf_webdav.py $final_path
	sudo cp ../conf/remove_sso_conf.py $final_path
	sudo python $final_path/add_sso_conf_webdav.py
	
	# Update seafile config
	echo 'COMPRESS_URL = MEDIA_URL' | sudo tee -a $final_path/conf/seahub_settings.py
	echo "STATIC_URL = MEDIA_URL + 'assets/'" | sudo tee -a $final_path/conf/seahub_settings.py
	
	# Add logrotate
	sudo cp ../conf/logrotate /etc/logrotate.d/seafile
	sudo sed -i "s@SEAFILE_DIR@$final_path@g" /etc/logrotate.d/seafile
	sudo service rsyslog restart
fi

# Update seahub config for old version to version 5.0.4
if [[ $(sudo grep -c "LOGIN_URL" $final_path/conf/seahub_settings.py) == 0 ]]
then
        echo "LOGIN_URL = '"$path"/accounts/login/'" | sudo tee -a $final_path/conf/seahub_settings.py
fi

# restore correct permissions
sudo chown -R $seafile_user:$seafile_user $final_path

# delete seafile cache
sudo rm -rf /tmp/seahub_cache

# restart seafile server
sudo service seafile-server start

# remove old version files
sudo rm -f $final_path/installed/seafile-server_${installed_version}*.tar*
sudo rm -f $final_path/seafile-server_${installed_version}_$architecture

# store new installed version
ynh_app_setting_set $app installed_version $seafile_version

# Reload Nginx and regenerate SSOwat conf
sudo service nginx reload
sudo yunohost app ssowatconf