2017-07-12 12:48:38 +02:00
|
|
|
|
2016-03-28 22:14:19 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# =============================================================================
|
|
|
|
# COMMON VARIABLES
|
|
|
|
# =============================================================================
|
2017-06-18 17:09:53 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# Package dependencies
|
|
|
|
pkg_dependencies="php5-cli php5-common php5-intl php5-json php5-mcrypt php-pear php-auth-sasl php-mail-mime php-patchwork-utf8 php-net-smtp php-net-socket php-crypt-gpg php-net-ldap2 php-net-ldap3"
|
2016-03-28 22:14:19 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# Plugins version
|
|
|
|
contextmenu_version=2.3
|
|
|
|
automatic_addressbook_version=v0.4.3
|
|
|
|
carddav_version=2.0.4
|
2016-03-28 22:14:19 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# =============================================================================
|
|
|
|
# COMMON ROUNDCUBE FUNCTIONS
|
|
|
|
# =============================================================================
|
2016-03-28 22:14:19 +02:00
|
|
|
|
|
|
|
# Execute a composer command from a given directory
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage: composer_exec workdir COMMAND [ARG ...]
|
2016-03-28 22:14:19 +02:00
|
|
|
exec_composer() {
|
2017-08-26 03:24:41 +02:00
|
|
|
local workdir=$1
|
|
|
|
shift 1
|
2016-03-28 22:14:19 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
COMPOSER_HOME="${workdir}/.composer" \
|
|
|
|
php "${workdir}/composer.phar" $@ \
|
|
|
|
-d "${workdir}" --quiet --no-interaction
|
2016-03-28 22:14:19 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
# Install and initialize Composer in the given directory
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage: init_composer destdir
|
2016-03-28 22:14:19 +02:00
|
|
|
init_composer() {
|
2017-08-26 03:24:41 +02:00
|
|
|
local destdir=$1
|
2016-03-28 22:14:19 +02:00
|
|
|
|
|
|
|
# install composer
|
2017-06-17 18:11:38 +02:00
|
|
|
curl -sS https://getcomposer.org/installer \
|
2017-08-26 03:24:41 +02:00
|
|
|
| COMPOSER_HOME="${destdir}/.composer" \
|
|
|
|
php -- --quiet --install-dir="$destdir" \
|
2016-05-15 17:26:39 +02:00
|
|
|
|| ynh_die "Unable to install Composer"
|
2016-03-28 22:14:19 +02:00
|
|
|
|
|
|
|
# install composer.json
|
2017-08-26 03:24:41 +02:00
|
|
|
cp "${destdir}/composer.json-dist" "${destdir}/composer.json"
|
2016-03-28 22:14:19 +02:00
|
|
|
|
|
|
|
# update dependencies to create composer.lock
|
2017-08-26 03:24:41 +02:00
|
|
|
exec_composer "$destdir" install --no-dev \
|
2016-05-15 17:26:39 +02:00
|
|
|
|| ynh_die "Unable to update Roundcube core dependencies"
|
2016-03-28 22:14:19 +02:00
|
|
|
}
|
2016-05-15 23:51:33 +02:00
|
|
|
|
|
|
|
# Install and configure CardDAV plugin for Roundcube
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage: install_carddav destdir
|
|
|
|
# https://plugins.roundcube.net/packages/roundcube/carddav
|
2016-05-15 23:51:33 +02:00
|
|
|
install_carddav() {
|
2017-08-26 03:24:41 +02:00
|
|
|
local destdir=$1
|
2016-05-15 23:51:33 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
local carddav_config="${destdir}/plugins/carddav/config.inc.php"
|
|
|
|
local carddav_tmp_config="../conf/carddav.config.inc.php"
|
2016-05-15 23:51:33 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
exec_composer "$destdir" require \
|
|
|
|
"roundcube/carddav $carddav_version"
|
2016-05-15 23:51:33 +02:00
|
|
|
|
|
|
|
# Look for installed and supported CardDAV servers
|
|
|
|
for carddav_app in "owncloud" "baikal"; do
|
2017-08-26 03:24:41 +02:00
|
|
|
local app_id=$(yunohost app list --installed -f "$carddav_app" \
|
2016-05-24 22:20:37 +02:00
|
|
|
--output-as json | grep -Po '"id":[ ]?"\K.*?(?=")' | head -1)
|
2016-05-17 13:43:22 +02:00
|
|
|
[[ -z "$app_id" ]] || {
|
|
|
|
# Retrieve app settings and enable relevant preset
|
|
|
|
carddav_domain=$(ynh_app_setting_get "$app_id" domain)
|
|
|
|
carddav_path=$(ynh_app_setting_get "$app_id" path)
|
|
|
|
carddav_url="https://${carddav_domain}${carddav_path%/}"
|
|
|
|
sed -i "s#{${carddav_app}_url}#${carddav_url}#g" "$carddav_tmp_config"
|
|
|
|
sed -i \
|
2016-05-15 23:51:33 +02:00
|
|
|
"/\/\/\/\/ PRESET FOR: ${carddav_app}/\
|
|
|
|
,/\/\/\/\/ END: ${carddav_app}/s/^\/\///" "$carddav_tmp_config"
|
2016-05-17 13:43:22 +02:00
|
|
|
}
|
2016-05-15 23:51:33 +02:00
|
|
|
done
|
|
|
|
|
|
|
|
# Copy plugin the configuration file
|
2017-08-26 03:24:41 +02:00
|
|
|
cp "$carddav_tmp_config" "$carddav_config"
|
2016-05-15 23:51:33 +02:00
|
|
|
}
|
2017-06-02 17:15:57 +02:00
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# =============================================================================
|
|
|
|
# YUNOHOST 2.7 FORTHCOMING HELPERS
|
|
|
|
# =============================================================================
|
|
|
|
|
|
|
|
# Create a dedicated nginx config
|
2017-06-02 17:15:57 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
# This will use a template in ../conf/nginx.conf
|
|
|
|
# __PATH__ by $path_url
|
|
|
|
# __DOMAIN__ by $domain
|
|
|
|
# __PORT__ by $port
|
|
|
|
# __NAME__ by $app
|
|
|
|
# __FINALPATH__ by $final_path
|
2017-06-02 17:15:57 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage: ynh_add_nginx_config
|
|
|
|
ynh_add_nginx_config () {
|
|
|
|
finalnginxconf="/etc/nginx/conf.d/$domain.d/$app.conf"
|
|
|
|
ynh_backup_if_checksum_is_different "$finalnginxconf"
|
|
|
|
sudo cp ../conf/nginx.conf "$finalnginxconf"
|
|
|
|
|
|
|
|
# To avoid a break by set -u, use a void substitution ${var:-}. If the variable is not set, it's simply set with an empty variable.
|
|
|
|
# Substitute in a nginx config file only if the variable is not empty
|
|
|
|
if test -n "${path_url:-}"; then
|
|
|
|
ynh_replace_string "__PATH__" "$path_url" "$finalnginxconf"
|
|
|
|
fi
|
|
|
|
if test -n "${domain:-}"; then
|
|
|
|
ynh_replace_string "__DOMAIN__" "$domain" "$finalnginxconf"
|
|
|
|
fi
|
|
|
|
if test -n "${port:-}"; then
|
|
|
|
ynh_replace_string "__PORT__" "$port" "$finalnginxconf"
|
|
|
|
fi
|
|
|
|
if test -n "${app:-}"; then
|
|
|
|
ynh_replace_string "__NAME__" "$app" "$finalnginxconf"
|
|
|
|
fi
|
|
|
|
if test -n "${final_path:-}"; then
|
|
|
|
ynh_replace_string "__FINALPATH__" "$final_path" "$finalnginxconf"
|
|
|
|
fi
|
|
|
|
ynh_store_file_checksum "$finalnginxconf"
|
|
|
|
|
|
|
|
sudo systemctl reload nginx
|
|
|
|
}
|
|
|
|
|
|
|
|
# Remove the dedicated nginx config
|
|
|
|
#
|
|
|
|
# usage: ynh_remove_nginx_config
|
2017-06-02 17:15:57 +02:00
|
|
|
ynh_remove_nginx_config () {
|
2017-08-26 03:24:41 +02:00
|
|
|
ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf"
|
|
|
|
sudo systemctl reload nginx
|
2017-06-02 17:15:57 +02:00
|
|
|
}
|
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# Create a dedicated php-fpm config
|
|
|
|
#
|
|
|
|
# usage: ynh_add_fpm_config
|
|
|
|
ynh_add_fpm_config () {
|
|
|
|
finalphpconf="/etc/php5/fpm/pool.d/$app.conf"
|
|
|
|
ynh_backup_if_checksum_is_different "$finalphpconf"
|
|
|
|
sudo cp ../conf/php-fpm.conf "$finalphpconf"
|
|
|
|
ynh_replace_string "__NAMETOCHANGE__" "$app" "$finalphpconf"
|
|
|
|
ynh_replace_string "__FINALPATH__" "$final_path" "$finalphpconf"
|
|
|
|
ynh_replace_string "__USER__" "$app" "$finalphpconf"
|
|
|
|
sudo chown root: "$finalphpconf"
|
|
|
|
ynh_store_file_checksum "$finalphpconf"
|
|
|
|
|
|
|
|
if [ -e "../conf/php-fpm.ini" ]
|
|
|
|
then
|
|
|
|
finalphpini="/etc/php5/fpm/conf.d/20-$app.ini"
|
|
|
|
ynh_backup_if_checksum_is_different "$finalphpini"
|
|
|
|
sudo cp ../conf/php-fpm.ini "$finalphpini"
|
|
|
|
sudo chown root: "$finalphpini"
|
|
|
|
ynh_store_file_checksum "$finalphpini"
|
|
|
|
fi
|
|
|
|
|
|
|
|
sudo systemctl reload php5-fpm
|
|
|
|
}
|
|
|
|
|
|
|
|
# Remove the dedicated php-fpm config
|
|
|
|
#
|
|
|
|
# usage: ynh_remove_fpm_config
|
2017-06-02 17:15:57 +02:00
|
|
|
ynh_remove_fpm_config () {
|
2017-08-26 03:24:41 +02:00
|
|
|
ynh_secure_remove "/etc/php5/fpm/pool.d/$app.conf"
|
|
|
|
ynh_secure_remove "/etc/php5/fpm/conf.d/20-$app.ini" 2>&1
|
|
|
|
sudo systemctl reload php5-fpm
|
2017-06-02 17:15:57 +02:00
|
|
|
}
|
|
|
|
|
2017-08-26 03:24:41 +02:00
|
|
|
# Restore a previous backup if the upgrade process failed
|
2017-06-02 17:15:57 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage:
|
|
|
|
# ynh_backup_before_upgrade
|
|
|
|
# ynh_clean_setup () {
|
|
|
|
# ynh_restore_upgradebackup
|
|
|
|
# }
|
|
|
|
# ynh_abort_if_errors
|
2017-06-18 01:53:14 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
ynh_restore_upgradebackup () {
|
|
|
|
echo "Upgrade failed." >&2
|
|
|
|
app_bck=${app//_/-} # Replace all '_' by '-'
|
|
|
|
|
|
|
|
# Check if an existing backup can be found before removing and restoring the application.
|
|
|
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$backup_number
|
|
|
|
then
|
|
|
|
# Remove the application then restore it
|
|
|
|
sudo yunohost app remove $app
|
|
|
|
# Restore the backup
|
|
|
|
sudo yunohost backup restore --ignore-system $app_bck-pre-upgrade$backup_number --apps $app --force
|
|
|
|
ynh_die "The app was restored to the way it was before the failed upgrade."
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
# Make a backup in case of failed upgrade
|
2017-06-18 01:53:14 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
# usage:
|
|
|
|
# ynh_backup_before_upgrade
|
2017-06-18 01:53:14 +02:00
|
|
|
# ynh_clean_setup () {
|
2017-08-26 03:24:41 +02:00
|
|
|
# ynh_restore_upgradebackup
|
2017-06-18 01:53:14 +02:00
|
|
|
# }
|
2017-08-26 03:24:41 +02:00
|
|
|
# ynh_abort_if_errors
|
2017-06-18 01:53:14 +02:00
|
|
|
#
|
2017-08-26 03:24:41 +02:00
|
|
|
ynh_backup_before_upgrade () {
|
|
|
|
backup_number=1
|
|
|
|
old_backup_number=2
|
|
|
|
app_bck=${app//_/-} # Replace all '_' by '-'
|
|
|
|
|
|
|
|
# Check if a backup already exists with the prefix 1
|
|
|
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade1
|
|
|
|
then
|
|
|
|
# Prefix becomes 2 to preserve the previous backup
|
|
|
|
backup_number=2
|
|
|
|
old_backup_number=1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Create backup
|
|
|
|
sudo yunohost backup create --ignore-system --apps $app --name $app_bck-pre-upgrade$backup_number
|
|
|
|
if [ "$?" -eq 0 ]
|
|
|
|
then
|
|
|
|
# If the backup succeeded, remove the previous backup
|
|
|
|
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$old_backup_number
|
|
|
|
then
|
|
|
|
# Remove the previous backup only if it exists
|
|
|
|
sudo yunohost backup delete $app_bck-pre-upgrade$old_backup_number > /dev/null
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
ynh_die "Backup failed, the upgrade process was aborted."
|
|
|
|
fi
|
2017-06-18 01:53:14 +02:00
|
|
|
}
|