#! /bin/bash # Exit on command errors and treat unset variables as an error set -eu # Source YunoHost helpers source /usr/share/yunohost/helpers ynh_version=$(sudo yunohost -v | grep "moulinette:" | cut -d' ' -f2 | cut -d'.' -f1,2) # retrieve arguments if [ $ynh_version = "2.4" ]; then app=$YNH_APP_INSTANCE_NAME domain=$YNH_APP_ARG_DOMAIN path=$YNH_APP_ARG_PATH is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE filesize=$YNH_APP_ARG_FILESIZE admin=$YNH_APP_ARG_ADMIN password=$YNH_APP_ARG_PASSWORD else app=bozon domain=$1 path=$2 is_public=$3 language=$4 filesize=$5 admin=$6 password=$7 fi # Delete files and db if exit with an error EXIT_PROPERLY () { trap '' ERR echo -e "\e[91m \e[1m" # Shell in light red bold echo -e "!!\n $app install's script has encountered an error. Installation was cancelled.\n!!" if [ $ynh_version = "2.2" ]; then /bin/bash ./remove # Appel le script remove. En 2.2, ce comportement n'est pas automatique.s fi exit 1 } TRAP_ON () { # Activate signal capture trap EXIT_PROPERLY ERR # Capturing exit signals on error } TRAP_OFF () { # Ignoring signal capture until TRAP_ON # Pour une raison que j'ignore, la fonction TRAP_ON fonctionne très bien. # Mais pas la fonction TRAP_OFF... # Utiliser directement `trap '' ERR` dans le code pour l'utiliser, à la place de la fonction. trap '' ERR # Ignoring exit signals } TRAP_ON # definie useful vars parent_path=/var/www final_path=$parent_path/$app data_path=/home/yunohost.app/$app # remove trailing slash [ "$path" != "/" ] && path=${path%/} # check domain/path availability sudo yunohost app checkurl $domain$path -a $app if [[ ! $? -eq 0 ]]; then touch /force_stop fi # check that admin user is an existing account sudo yunohost user list --json | grep -q "\"username\": \"$admin\"" if [[ ! $? -eq 0 ]]; then echo "Error : the chosen admin user does not exist" touch /force_stop fi # add required packages ynh_package_install_from_equivs ../conf/${app}-deps.control || ynh_die "Unable to install dependencies" # retrieve upstream_version version of bozon upstream_version=$(cat ../conf/upstream_version) # save app settings sudo yunohost app setting $app admin_user -v "$admin" sudo yunohost app setting $app is_public -v "$is_public" sudo yunohost app setting $app domain -v "$domain" sudo yunohost app setting $app path -v "$path" sudo yunohost app setting $app version -v "$upstream_version" sudo yunohost app setting $app filesize -v "$filesize" # download upstream_version version of bozon wget -nc --quiet https://github.com/broncowdd/BoZoN/archive/$upstream_version.zip -P /tmp sudo unzip -oq /tmp/$upstream_version.zip -d /tmp sudo mv /tmp/$upstream_version $parent_path/$app # copy files to final folder and set permissions sudo find $final_path -type f -name ".htaccess" | xargs sudo rm sudo chown -R root: $final_path sudo find $final_path -type f | xargs sudo chmod 644 sudo find $final_path -type d | xargs sudo chmod 755 # configure config file sudo sed -i "s@languageuage='en';@languageuage='$language';@g" $final_path/config.php # create data folders sudo mkdir -p $final_path/private sudo mkdir -p $data_path/uploads sudo ln -s $data_path/uploads $final_path/uploads sudo mkdir -p $data_path/thumbs sudo ln -s $data_path/thumbs $final_path/thumbs sudo chown -R www-data: $final_path/private sudo chown -R www-data: $data_path/uploads sudo chown -R www-data: $data_path/thumbs # configure nginx settings ## path sudo sed -i "s@YNH_EXAMPLE_PATH@$path@g" ../conf/nginx.conf sudo sed -i "s@YNH_EXAMPLE_ALIAS@$final_path@g" ../conf/nginx.conf sudo sed -i "s@YNH_EXAMPLE_APP@${app}@g" ../conf/nginx.conf ## file upload size limit sudo sed -i "s@YNH_FILE_SIZE@${filesize}@g" ../conf/nginx.conf ## copy final sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf # copy and set php-fpm configuration ## path sed -i "s@YNH_EXAMPLE_APP@${app}@g" ../conf/php-fpm.conf sed -i "s@YNH_EXAMPLE_ALIAS@${final_path}@g" ../conf/php-fpm.conf ## file upload size limit sudo sed -i "s@YNH_FILE_SIZE@${filesize}@g" ../conf/php-fpm.conf postsize=${filesize%?}.1${filesize: -1} sudo sed -i "s@YNH_POST_SIZE@${postsize}@g" ../conf/php-fpm.conf ## copy final and set permissions phpfpm_conf="/etc/php5/fpm/pool.d/${app}.conf" sudo cp ../conf/php-fpm.conf "$phpfpm_conf" sudo chown root: $phpfpm_conf sudo chmod 644 $phpfpm_conf # create the superadmin ## set temporary public access sudo yunohost app setting $app unprotected_uris -v "/" ## start app sudo service nginx reload sudo yunohost app ssowatconf ## fill the superadmin creation form curl_path=$([ "$path" == "/" ] || echo $path) curl -k -X POST \ --data-urlencode creation="1" \ --data-urlencode login="$admin" \ --data-urlencode pass="$password" \ --data-urlencode confirm="$password" \ https://$domain$curl_path/index.php?p=admin > /dev/null 2>&1 # if app is private, remove url to SSOWat conf from skipped_uris if [ "$is_public" = "No" ]; then # escape magic chars in vars (lua magic chars are ().%+-*?[^$ according to https://www.lua.org/pil/20.2.html) domainluaregex=$(echo "$domain" | sed -e 's/[]().%+*?[^$[]/\%&/g' | sed -e 's/\-/\%&/g') pathluaregex=$(echo "$path" | sed -e 's/[]().%+*?[^$[]/\%&/g' | sed -e 's/\-/\%&/g') # redirect to SSOwat login in sudo yunohost app setting $app unprotected_uris -d sudo yunohost app setting $app unprotected_regex -v "$domainluaregex$pathluaregex/index.php%?f=.+$","$domainluaregex$pathluaregex/index.php%?zipfolder=.+$","$domainluaregex$pathluaregex/private/temp/.+%.zip$","$domainluaregex$pathluaregex/core/js/.*$","$domainluaregex$pathluaregex/templates/.*$" fi # restart services sudo service php5-fpm restart || true sudo service nginx restart || true sudo yunohost app ssowatconf