1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/agendav_ynh.git synced 2024-09-03 20:36:12 +02:00

Normalization from example_ynh

This commit is contained in:
Maniack Crudelis 2019-02-11 13:23:53 +01:00
parent fe3169cb5d
commit 34aaf77666
12 changed files with 257 additions and 255 deletions

View file

@ -1,18 +1,66 @@
AgenDAV for YunoHost # AgenDAV for YunoHost
--------------------
[![Integration level](https://dash.yunohost.org/integration/REPLACEBYYOURAPP.svg)](https://dash.yunohost.org/appci/app/agendav)
[![Install AgenDAV with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=agendav)
> *This package allow you to install AgenDAV quickly and simply on a YunoHost server.
If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.*
## Overview
[AgenDAV](http://agendav.org/) is a CalDAV web client which features an [AgenDAV](http://agendav.org/) is a CalDAV web client which features an
AJAX interface to allow users to manage their own calendars and shared ones. AJAX interface to allow users to manage their own calendars and shared ones.
**Shipped version:** 2.0.0 **Shipped version:** 2.0.0
## Screenshots
![](http://agendav.org/img/screenshots/2.0.0-beta1/001_month_view.png) ![](http://agendav.org/img/screenshots/2.0.0-beta1/001_month_view.png)
## TODO ## Demo
* [YunoHost demo](https://demo.yunohost.org/agendav/)
## Configuration
## Documentation
* Official documentation: http://docs.agendav.org/en/2.2.0/
* YunoHost documentation: If specific documentation is needed, feel free to contribute.
## YunoHost specific features
#### Supported architectures
* x86-64b - [![Build Status](https://ci-apps.yunohost.org/ci/logs/agendav%20%28Official%29.svg)](https://ci-apps.yunohost.org/ci/apps/agendav/)
* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/agendav%20%28Official%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/agendav/)
* Jessie x86-64b - [![Build Status](https://ci-stretch.nohost.me/ci/logs/agendav%20%28Official%29.svg)](https://ci-stretch.nohost.me/ci/apps/agendav/)
## Limitations
## Additional information
### TODO
* Submit HTTP auth patch for upstream integration * Submit HTTP auth patch for upstream integration
## Links ## Links
* Report a bug: https://github.com/YunoHost-Apps/agendav_ynh/issues
* AgenDAV website: http://agendav.org/ * AgenDAV website: http://agendav.org/
* YunoHost website: https://yunohost.org/ * YunoHost website: https://yunohost.org/
---
Developers info
----------------
**Only if you want to use a testing branch for coding, instead of merging directly into master.**
Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/agendav_ynh/tree/testing).
To try the testing branch, please proceed like that.
```
sudo yunohost app install https://github.com/YunoHost-Apps/agendav_ynh/tree/testing --debug
or
sudo yunohost app upgrade agendav -u https://github.com/YunoHost-Apps/agendav_ynh/tree/testing --debug
```

View file

@ -3,7 +3,7 @@
; Manifest ; Manifest
domain="domain.tld" (DOMAIN) domain="domain.tld" (DOMAIN)
path="/path" (PATH) path="/path" (PATH)
language="fr" language="en"
; pre-install ; pre-install
sudo yunohost app fetchlist sudo yunohost app fetchlist
sudo yunohost domain add baikaldomain.tld --admin-password $PASSWORD sudo yunohost domain add baikaldomain.tld --admin-password $PASSWORD
@ -16,6 +16,7 @@
setup_private=1 setup_private=1
setup_public=0 setup_public=0
upgrade=1 upgrade=1
upgrade=1 from_commit=1783f57896e46ed8b117f2748340c02d37b2a014
backup_restore=1 backup_restore=1
multi_instance=0 multi_instance=0
incorrect_path=1 incorrect_path=1
@ -32,3 +33,10 @@
Level 8=0 Level 8=0
Level 9=0 Level 9=0
Level 10=0 Level 10=0
;;; Options
Email=
Notification=none
;;; Upgrade options
; commit=1783f57896e46ed8b117f2748340c02d37b2a014
name= Fix installation on root - Sep 10, 2018
manifest_arg=domain=DOMAIN&path=PATH&language=en&

View file

@ -2,3 +2,5 @@ SOURCE_URL=https://github.com/adobo/agendav/releases/download/2.2.0/agendav-2.2.
SOURCE_SUM=0056154ae0a7aa3401f4f24c51f0f2de3d1e97eaa83e74a2129714b67013129f SOURCE_SUM=0056154ae0a7aa3401f4f24c51f0f2de3d1e97eaa83e74a2129714b67013129f
SOURCE_SUM_PRG=sha256sum SOURCE_SUM_PRG=sha256sum
SOURCE_FORMAT=tar.gz SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=

View file

@ -1,29 +1,24 @@
#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
location __PATH__/ { location __PATH__/ {
alias __FINALPATH__/web/public/;
index index.php;
# Path to source
alias __FINALPATH__/web/public/ ;
# Force usage of https
if ($scheme = http) { if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent; rewrite ^ https://$server_name$request_uri? permanent;
} }
index index.php;
# The seemingly weird syntax is due to a long-standing bug in nginx, # The seemingly weird syntax is due to a long-standing bug in nginx,
# see: https://trac.nginx.org/nginx/ticket/97 # see: https://trac.nginx.org/nginx/ticket/97
try_files $uri __PATH__/__PATH__/index.php$is_args$args; try_files $uri __PATH__/__PATH__/index.php$is_args$args;
# Another alternative to the weird try_files is to use a rewrite, like this :
#
# if (-f $request_filename) {
# break;
# }
# rewrite (.*) {LOCATION}/index.php$request_uri;
#
# But remember that if-is-evil :
# https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/#check-if-file-exists
location ~ ^__PATH__/index\.php(/|$) { location ~ ^__PATH__/index\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock;
fastcgi_index index.php; fastcgi_index index.php;
include fastcgi_params; include fastcgi_params;
fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_USER $remote_user;

View file

@ -20,21 +20,21 @@ $app['proxies'] = [];
// Database settings // Database settings
$app['db.options'] = [ $app['db.options'] = [
'dbname' => '{DBNAME}', 'dbname' => '__DBNAME__',
'user' => '{DBUSER}', 'user' => '__DBUSER__',
'password' => '{DBPASS}', 'password' => '__DBPASS__',
'host' => 'localhost', 'host' => 'localhost',
'driver' => 'pdo_mysql' 'driver' => 'pdo_mysql'
]; ];
// CSRF secret // CSRF secret
$app['csrf.secret'] = '{ENCRYPTKEY}'; $app['csrf.secret'] = '__ENCRYPTKEY__';
// Log path // Log path
$app['log.path'] = '{LOGDIR}/'; $app['log.path'] = '__LOGDIR__/';
// Base URL // Base URL
$app['caldav.baseurl'] = '{CALDAV_BASEURL}'; $app['caldav.baseurl'] = '__CALDAV_BASEURL__';
// Authentication method required by CalDAV server (basic or digest) // Authentication method required by CalDAV server (basic or digest)
$app['caldav.authmethod'] = 'basic'; $app['caldav.authmethod'] = 'basic';
@ -46,7 +46,7 @@ $app['caldav.certificate.verify'] = false;
$app['caldav.publicurls'] = true; $app['caldav.publicurls'] = true;
// Whether to show public CalDAV urls // Whether to show public CalDAV urls
$app['caldav.baseurl.public'] = 'https://{CALDAV_DOMAIN}'; $app['caldav.baseurl.public'] = 'https://__CALDAV_DOMAIN__';
// Email attribute name // Email attribute name
$app['principal.email.attribute'] = '{DAV:}email'; $app['principal.email.attribute'] = '{DAV:}email';
@ -64,10 +64,10 @@ $app['calendar.sharing.permissions'] = [
]; ];
// Default timezone // Default timezone
$app['defaults.timezone'] = '{TIMEZONE}'; $app['defaults.timezone'] = '__TIMEZONE__';
// Default languajge // Default language
$app['defaults.language'] = '{LANGUAGE}'; $app['defaults.language'] = '__LANGUAGE__';
// Default time format. Options: '12' / '24' // Default time format. Options: '12' / '24'
$app['defaults.time_format'] = '24'; $app['defaults.time_format'] = '24';

View file

@ -45,12 +45,13 @@
}, },
{ {
"name": "language", "name": "language",
"type": "string",
"ask": { "ask": {
"en": "Default language to be used in AgenDAV", "en": "Default language to be used in AgenDAV",
"fr": "Langue par défaut à utiliser dans AgenDAV" "fr": "Langue par défaut à utiliser dans AgenDAV"
}, },
"choices": [ "choices": [
"de", "en", "es", "fr", "it", "nl" "de_DE", "en", "es_ES", "fr_FR", "it_IT", "nl_NL"
], ],
"default": "en" "default": "en"
} }

View file

@ -1,22 +1 @@
#!/bin/bash #!/bin/bash
#
# Common variables
#
# Associative array of languages
declare -A LANGUAGES=(
[nl]=nl_NL
[en]=en
[fr]=fr_FR
[de]=de_DE
[it]=it_IT
[es]=es_ES
)
#
# Common helpers
#
agendav_app_check_installation() {
echo $(yunohost app list --installed -f "$1" | grep "id:")
}

View file

@ -7,12 +7,7 @@
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -26,13 +21,11 @@ ynh_abort_if_errors
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
# Set app specific variables
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
db_name=$app
# Retrieve app settings final_path=$(ynh_app_setting_get $app final_path)
domain=$(ynh_app_setting_get "$app" domain) domain=$(ynh_app_setting_get $app domain)
final_path=$(ynh_app_setting_get "$app" final_path) db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# STANDARD BACKUP STEPS # STANDARD BACKUP STEPS
@ -41,7 +34,7 @@ final_path=$(ynh_app_setting_get "$app" final_path)
#================================================= #=================================================
# Clean cache files before backup # Clean cache files before backup
ynh_secure_remove "${final_path}/web/var/cache/"{profiler,twig}/* ynh_secure_remove ${final_path}/web/var/cache/{profiler,twig}/*
ynh_backup "$final_path" ynh_backup "$final_path"
@ -49,7 +42,7 @@ ynh_backup "$final_path"
# BACKUP THE NGINX CONFIGURATION # BACKUP THE NGINX CONFIGURATION
#================================================= #=================================================
ynh_backup "/etc/nginx/conf.d/${domain}.d/${app}.conf" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# BACKUP THE PHP-FPM CONFIGURATION # BACKUP THE PHP-FPM CONFIGURATION
@ -61,5 +54,12 @@ ynh_backup "/etc/php5/fpm/pool.d/${app}.conf"
# BACKUP THE MYSQL DATABASE # BACKUP THE MYSQL DATABASE
#================================================= #=================================================
# Dump the database
ynh_mysql_dump_db "$db_name" > db.sql ynh_mysql_dump_db "$db_name" > db.sql
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP LOGROTATE
#=================================================
ynh_backup "/etc/logrotate.d/$app"

View file

@ -24,13 +24,7 @@ domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH path_url=$YNH_APP_ARG_PATH
language=$YNH_APP_ARG_LANGUAGE language=$YNH_APP_ARG_LANGUAGE
# Set and store language
language=${LANGUAGES[$language]}
# Set app specific variables
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
dbname=$app
dbuser=$app
#================================================= #=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
@ -39,46 +33,45 @@ dbuser=$app
final_path=/var/www/$app final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die "This path already contains a folder"
# Define LOGDIR (create it later when user is created)
LOGDIR=/var/log/$app
test ! -e "$LOGDIR" || ynh_die "This log path already contains a folder"
# Normalize the url path syntax # Normalize the url path syntax
path_url=$(ynh_normalize_url_path "$path_url") path_url=$(ynh_normalize_url_path $path_url)
# Check web path availability
ynh_webpath_available "$domain" "$path_url"
# Register (book) web path # Register (book) web path
ynh_webpath_register "$app" "$domain" "$path_url" ynh_webpath_register $app $domain $path_url
agendav_app_check_installation() {
echo $(yunohost app list --installed -f "$1" | grep "id:")
}
# Check whether Baïkal or Radicale is installed # Check whether Baïkal or Radicale is installed
baikal_install=$(agendav_app_check_installation "baikal") baikal_install=$(agendav_app_check_installation "baikal")
radicale_install=$(agendav_app_check_installation "radicale") radicale_install=$(agendav_app_check_installation "radicale")
if [[ -n "$baikal_install" ]] if [ -n "$baikal_install" ]
then then
caldav_app="baikal" caldav_app=baikal
caldav_baseurl="/cal.php/" caldav_baseurl="/cal.php/"
elif [[ -n "$radicale_install" ]] elif [ -n "$radicale_install" ]
then then
caldav_app="radicale" caldav_app=radicale
caldav_baseurl="/" caldav_baseurl=/
else else
ynh_die "Baikal or Radicale is mandatory" ynh_die "Please install Baikal or Radicale before AgenDAV."
fi fi
#================================================= #=================================================
# STORE SETTINGS FROM MANIFEST # STORE SETTINGS FROM MANIFEST
#================================================= #=================================================
ynh_app_setting_set "$app" language "$language" ynh_app_setting_set $app domain $domain
ynh_app_setting_set "$app" path "$path_url" ynh_app_setting_set $app path $path_url
ynh_app_setting_set "$app" domain "$domain" ynh_app_setting_set $app language $language
ynh_app_setting_set "$app" final_path "$final_path"
#================================================= #=================================================
# STANDARD MODIFICATIONS # STANDARD MODIFICATIONS
#================================================= #=================================================
# INSTALL DEPENDENCIES
#=================================================
# Install dependencies # Install dependencies
ynh_install_app_dependencies php5-cli ynh_install_app_dependencies php5-cli
@ -87,15 +80,15 @@ ynh_install_app_dependencies php5-cli
# CREATE A MYSQL DATABASE # CREATE A MYSQL DATABASE
#================================================= #=================================================
# Initialize database db_name=$(ynh_sanitize_dbid $app)
dbpass=$(ynh_string_random) ynh_app_setting_set $app db_name $db_name
ynh_mysql_setup_db $db_name $db_name
ynh_mysql_setup_db "$dbname" "$dbuser" "$dbpass"
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
ynh_app_setting_set $app final_path $final_path
ynh_setup_source "$final_path" ynh_setup_source "$final_path"
#================================================= #=================================================
@ -109,7 +102,7 @@ ynh_add_nginx_config
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create "$app" ynh_system_user_create $app
#================================================= #=================================================
# PHP-FPM CONFIGURATION # PHP-FPM CONFIGURATION
@ -121,33 +114,35 @@ ynh_add_fpm_config
#================================================= #=================================================
# SPECIFIC SETUP # SPECIFIC SETUP
#================================================= #=================================================
# Create settings.php # CREATE SETTINGS.PHP
#================================================= #=================================================
# Generate random encryption key # Generate random encryption key
encryptkey=$(ynh_string_random 24) encryptkey=$(ynh_string_random 24)
ynh_app_setting_set "$app" encryptkey "$encryptkey" ynh_app_setting_set $app encryptkey "$encryptkey"
# Copy and set AgenDAV configuration # Copy and set AgenDAV configuration
timezone=$(cat /etc/timezone) timezone=$(cat /etc/timezone)
caldav_domain=$(ynh_app_setting_get "$caldav_app" domain) caldav_domain=$(ynh_app_setting_get $caldav_app domain)
caldav_path=$(ynh_app_setting_get "$caldav_app" path) caldav_path=$(ynh_app_setting_get $caldav_app path)
caldav_url="https://${caldav_domain}${caldav_path%/}" caldav_url="https://${caldav_domain}${caldav_path%/}"
conf_path="${final_path}/web/config/settings.php" conf_path="${final_path}/web/config/settings.php"
cp ../conf/settings.php "$conf_path" cp ../conf/settings.php "$conf_path"
ynh_replace_string "{DBUSER}" "${dbuser}" "$conf_path" logdir=/var/log/$app
ynh_replace_string "{DBPASS}" "${dbpass}" "$conf_path"
ynh_replace_string "{DBNAME}" "${dbname}" "$conf_path" ynh_replace_string "__DBUSER__" "${db_name}" "$conf_path"
ynh_replace_string "{ENCRYPTKEY}" "${encryptkey}" "$conf_path" ynh_replace_string "__DBPASS__" "${db_pwd}" "$conf_path"
ynh_replace_string "{LOGDIR}" "${LOGDIR}" "$conf_path" ynh_replace_string "__DBNAME__" "${db_name}" "$conf_path"
ynh_replace_string "{TIMEZONE}" "$timezone" "$conf_path" ynh_replace_string "__ENCRYPTKEY__" "${encryptkey}" "$conf_path"
ynh_replace_string "{LANGUAGE}" "${language}" "$conf_path" ynh_replace_string "__LOGDIR__" "${logdir}" "$conf_path"
ynh_replace_string "{CALDAV_BASEURL}" "${caldav_url}${caldav_baseurl}" "$conf_path" ynh_replace_string "__TIMEZONE__" "$timezone" "$conf_path"
ynh_replace_string "{CALDAV_DOMAIN}" "${caldav_domain}" "$conf_path" ynh_replace_string "__LANGUAGE__" "${language}" "$conf_path"
ynh_replace_string "__CALDAV_BASEURL__" "${caldav_url}${caldav_baseurl}" "$conf_path"
ynh_replace_string "__CALDAV_DOMAIN__" "${caldav_domain}" "$conf_path"
#================================================= #=================================================
# STORE THE CHECKSUM OF THE CONFIG FILE # STORE THE CHECKSUM OF THE CONFIG FILE
@ -156,20 +151,23 @@ ynh_replace_string "{CALDAV_DOMAIN}" "${caldav_domain}" "$conf_pa
ynh_store_file_checksum "$conf_path" ynh_store_file_checksum "$conf_path"
#================================================= #=================================================
# Run database migrations (includes initialization) # RUN DATABASE MIGRATIONS (INCLUDES INITIALIZATION)
#================================================= #=================================================
( (
cd "$final_path" cd $final_path
php agendavcli migrations:migrate --no-interaction php agendavcli migrations:migrate --no-interaction
) )
#================================================= #=================================================
# SETUP LOG directory # SETUP LOGROTATE
#================================================= #=================================================
mkdir -p "$LOGDIR" mkdir -p $logdir
chown -R "$app": "$LOGDIR" chown -R $app: $logdir
# Use logrotate to manage application logfile(s)
ynh_use_logrotate
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -177,28 +175,20 @@ chown -R "$app": "$LOGDIR"
# SECURE FILES AND DIRECTORIES # SECURE FILES AND DIRECTORIES
#================================================= #=================================================
chown -R root: "$final_path" chown -R root: $final_path
# Only agendav user should write here # Only agendav user should write here
chown -R "$app" "${final_path}/web/var/cache/"{profiler,twig} chown -R $app ${final_path}/web/var/cache/{profiler,twig}
# The agendav user should read here, but does not need to write # The agendav user should read here, but does not need to write
chown -R root:"$app" "${final_path}/web/config/"
chmod -R g+rx "${final_path}/web/config/"
# Other users should not be able to read as it stores passwords. # Other users should not be able to read as it stores passwords.
chmod -R o-rwx "${final_path}/web/config/" chown -R root:$app ${final_path}/web/config/
chmod -R 750 ${final_path}/web/config/
#=================================================
# SETUP SSOWAT
#=================================================
# Nothing to do, this app is private
#================================================= #=================================================
# RELOAD NGINX and FPM # RELOAD NGINX and FPM
#================================================= #=================================================
# Reload services # Reload services
service php5-fpm reload systemctl reload php5-fpm
service nginx reload systemctl reload nginx

View file

@ -13,12 +13,11 @@ source /usr/share/yunohost/helpers
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
app="$YNH_APP_INSTANCE_NAME" app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get "$app" domain)
final_path=$(ynh_app_setting_get "$app" final_path)
db_name=$app domain=$(ynh_app_setting_get $app domain)
db_user=$app db_name=$(ynh_app_setting_get $app db_name)
final_path=$(ynh_app_setting_get $app final_path)
#================================================= #=================================================
# STANDARD REMOVE # STANDARD REMOVE
@ -34,7 +33,7 @@ ynh_remove_app_dependencies
#================================================= #=================================================
# Remove a database if it exists, along with the associated user # Remove a database if it exists, along with the associated user
ynh_mysql_remove_db "$db_user" "$db_name" ynh_mysql_remove_db $db_name $db_name
#================================================= #=================================================
# REMOVE APP MAIN DIR # REMOVE APP MAIN DIR
@ -63,6 +62,13 @@ ynh_remove_nginx_config
# Remove the dedicated php-fpm config # Remove the dedicated php-fpm config
ynh_remove_fpm_config ynh_remove_fpm_config
#=================================================
# REMOVE LOGROTATE CONFIGURATION
#=================================================
# Remove the app-specific logrotate config
ynh_remove_logrotate
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
#================================================= #=================================================
@ -70,4 +76,4 @@ ynh_remove_fpm_config
#================================================= #=================================================
# Remove the user account # Remove the user account
ynh_system_user_delete "$app" ynh_system_user_delete $app

View file

@ -7,13 +7,7 @@
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then source ../settings/scripts/_common.sh
# Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -27,27 +21,21 @@ ynh_abort_if_errors
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
# Set app specific variables app=$YNH_APP_INSTANCE_NAME
app="$YNH_APP_INSTANCE_NAME"
dbname=$app
dbuser=$app
# Retrieve old app settings domain=$(ynh_app_setting_get $app domain)
domain=$(ynh_app_setting_get "$app" domain) path_url=$(ynh_app_setting_get $app path)
path_url=$(ynh_app_setting_get "$app" path) final_path=$(ynh_app_setting_get $app final_path)
final_path=$(ynh_app_setting_get "$app" final_path) db_name=$(ynh_app_setting_get $app db_name)
dbpass=$(ynh_app_setting_get "$app" mysqlpwd)
LOGDIR=/var/log/$app
#================================================= #=================================================
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
ynh_webpath_available "$domain" "$path_url" \ ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}${path_url}" || ynh_die "Path not available: ${domain}${path_url}"
test ! -d "$final_path" \ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
@ -55,7 +43,6 @@ test ! -d "$final_path" \
# RESTORE THE NGINX CONFIGURATION # RESTORE THE NGINX CONFIGURATION
#================================================= #=================================================
# Restore configuration files
ynh_restore_file "/etc/nginx/conf.d/${domain}.d/${app}.conf" ynh_restore_file "/etc/nginx/conf.d/${domain}.d/${app}.conf"
#================================================= #=================================================
@ -64,35 +51,26 @@ ynh_restore_file "/etc/nginx/conf.d/${domain}.d/${app}.conf"
ynh_restore_file "$final_path" ynh_restore_file "$final_path"
#=================================================
# RESTORE THE MYSQL DATABASE
#=================================================
# Create and restore the database
ynh_mysql_create_db "$dbname" "$dbuser" "$dbpass"
ynh_mysql_connect_as "$dbuser" "$dbpass" "$dbname" < ./db.sql
#================================================= #=================================================
# RECREATE THE DEDICATED USER # RECREATE THE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create "$app" "$final_path" # Create the dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# RESTORE USER RIGHTS # RESTORE USER RIGHTS
#================================================= #=================================================
chown -R root: "$final_path" chown -R root: $final_path
# Only agendav user should write here # Only agendav user should write here
chown -R "$app" "${final_path}/web/var/cache/"{profiler,twig} chown -R $app ${final_path}/web/var/cache/{profiler,twig}
# The agendav user should read here, but does not need to write # The agendav user should read here, but does not need to write
chown -R root:"$app" "${final_path}/web/config/"
chmod -R g+rx "${final_path}/web/config/"
# Other users should not be able to read as it stores passwords. # Other users should not be able to read as it stores passwords.
chmod -R o-rwx "${final_path}/web/config/" chown -R root:$app ${final_path}/web/config/
chmod -R 750 ${final_path}/web/config/
#================================================= #=================================================
# RESTORE THE PHP-FPM CONFIGURATION # RESTORE THE PHP-FPM CONFIGURATION
@ -103,18 +81,22 @@ ynh_restore_file "/etc/php5/fpm/pool.d/${app}.conf"
#================================================= #=================================================
# SPECIFIC RESTORATION # SPECIFIC RESTORATION
#================================================= #=================================================
# REINSTALL DEPENDENCIES # RESTORE THE MYSQL DATABASE
#================================================= #=================================================
# Install dependencies db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_install_app_dependencies php5-cli ynh_mysql_setup_db $db_name $db_name $db_pwd
ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
#================================================= #=================================================
# SETUP LOG directory # RESTORE THE LOGROTATE CONFIGURATION
#================================================= #=================================================
mkdir -p "$LOGDIR" logdir=/var/log/$app
chown -R "$app": "$LOGDIR" mkdir -p $logdir
chown -R $app: $logdir
ynh_restore_file "/etc/logrotate.d/$app"
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -122,5 +104,5 @@ chown -R "$app": "$LOGDIR"
# RELOAD NGINX AND PHP-FPM # RELOAD NGINX AND PHP-FPM
#================================================= #=================================================
service php5-fpm reload systemctl reload php5-fpm
service nginx reload systemctl reload nginx

View file

@ -13,70 +13,60 @@ source /usr/share/yunohost/helpers
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
# Set app specific variables app=$YNH_APP_INSTANCE_NAME
app="$YNH_APP_INSTANCE_NAME"
dbname=$app
dbuser=$app
# Retrieve arguments domain=$(ynh_app_setting_get $app domain)
domain=$(ynh_app_setting_get "$app" domain) path_url=$(ynh_app_setting_get $app path)
path_url=$(ynh_app_setting_get "$app" path) final_path=$(ynh_app_setting_get $app final_path)
dbpass=$(ynh_app_setting_get "$app" mysqlpwd) language=$(ynh_app_setting_get $app language)
encryptkey=$(ynh_app_setting_get "$app" encryptkey) db_name=$(ynh_app_setting_get $app db_name)
language=$(ynh_app_setting_get "$app" language)
LOGDIR=/var/log/$app
#================================================= #=================================================
# ENSURE DOWNWARD COMPATIBILITY # ENSURE DOWNWARD COMPATIBILITY
#================================================= #=================================================
# Set and store language
if [[ -z "$language" ]]; then
# retrieve language the old way
lang=${LANG/.*/}
[[ ${LANGUAGES[$lang]+_} ]] || lang="en"
# retrieve and store the relevant language
language=${LANGUAGES[$lang]}
ynh_app_setting_set "$app" language "$language"
fi
# Fix is_public as a boolean value # Fix is_public as a boolean value
if [ "$is_public" = "Yes" ]; then if [ "$is_public" = "Yes" ]; then
ynh_app_setting_set "$app" is_public 1 ynh_app_setting_set $app is_public 1
is_public=1 is_public=1
elif [ "$is_public" = "No" ]; then elif [ "$is_public" = "No" ]; then
ynh_app_setting_set "$app" is_public 0 ynh_app_setting_set $app is_public 0
is_public=0 is_public=0
fi fi
# If db_name doesn't exist, create it # If db_name doesn't exist, create it
if [ -z "$db_name" ]; then if [ -z $db_name ]; then
db_name=$(ynh_sanitize_dbid "$app") db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set "$app" db_name "$db_name" ynh_app_setting_set $app db_name $db_name
fi fi
# If final_path doesn't exist, create it # If final_path doesn't exist, create it
if [ -z "$final_path" ]; then if [ -z $final_path ]; then
final_path=/var/www/$app final_path=/var/www/$app
ynh_app_setting_set "$app" final_path "$final_path" ynh_app_setting_set $app final_path $final_path
fi fi
#=================================================
# GET THE CALDAV APP
#=================================================
agendav_app_check_installation() {
echo $(yunohost app list --installed -f "$1" | grep "id:")
}
# Check whether Baïkal or Radicale is installed # Check whether Baïkal or Radicale is installed
baikal_install=$(agendav_app_check_installation "baikal") baikal_install=$(agendav_app_check_installation "baikal")
radicale_install=$(agendav_app_check_installation "radicale") radicale_install=$(agendav_app_check_installation "radicale")
if [[ -n "$baikal_install" ]] if [ -n "$baikal_install" ]
then then
caldav_app="baikal" caldav_app=baikal
caldav_baseurl="/cal.php/" caldav_baseurl="/cal.php/"
elif [[ -n "$radicale_install" ]] elif [ -n "$radicale_install" ]
then then
caldav_app="radicale" caldav_app=radicale
caldav_baseurl="/" caldav_baseurl=/
else else
ynh_die "Baikal or Radicale is mandatory" ynh_die "Please install Baikal or Radicale before AgenDAV."
fi fi
#================================================= #=================================================
@ -97,15 +87,10 @@ ynh_abort_if_errors
#================================================= #=================================================
# Normalize the URL path syntax # Normalize the URL path syntax
path_url=$(ynh_normalize_url_path "$path_url") path_url=$(ynh_normalize_url_path $path_url)
#================================================= #=================================================
# STANDARD MODIFICATIONS # STANDARD UPGRADE STEPS
#=================================================
# Install dependencies
ynh_install_app_dependencies php5-cli
#================================================= #=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE # DOWNLOAD, CHECK AND UNPACK SOURCE
#================================================= #=================================================
@ -119,49 +104,61 @@ ynh_setup_source "$final_path"
# Copy and set nginx configuration # Copy and set nginx configuration
ynh_add_nginx_config ynh_add_nginx_config
#=================================================
# UPGRADE DEPENDENCIES
#=================================================
# Install dependencies
ynh_install_app_dependencies php5-cli
#================================================= #=================================================
# CREATE DEDICATED USER # CREATE DEDICATED USER
#================================================= #=================================================
ynh_system_user_create "$app" # Create a dedicated user (if not existing)
ynh_system_user_create $app
#================================================= #=================================================
# PHP-FPM CONFIGURATION # PHP-FPM CONFIGURATION
#================================================ #================================================
# Copy and set php-fpm configuration # Create a dedicated php-fpm config
ynh_add_fpm_config ynh_add_fpm_config
#================================================= #=================================================
# SPECIFIC SETUP # SPECIFIC SETUP
#================================================= #=================================================
# Create settings.php # CREATE SETTINGS.PHP
#================================================= #=================================================
# Generate random encryption key # Generate random encryption key
encryptkey=$(ynh_app_setting_get "$app" encryptkey) encryptkey=$(ynh_app_setting_get $app encryptkey)
# Copy and set AgenDAV configuration # Copy and set AgenDAV configuration
timezone=$(cat /etc/timezone) timezone=$(cat /etc/timezone)
caldav_domain=$(ynh_app_setting_get "$caldav_app" domain) caldav_domain=$(ynh_app_setting_get $caldav_app domain)
caldav_path=$(ynh_app_setting_get "$caldav_app" path) caldav_path=$(ynh_app_setting_get $caldav_app path)
caldav_url="https://${caldav_domain}${caldav_path%/}" caldav_url="https://${caldav_domain}${caldav_path%/}"
conf_path="${final_path}/web/config/settings.php" conf_path="${final_path}/web/config/settings.php"
ynh_backup_if_checksum_is_different "$conf_path" ynh_backup_if_checksum_is_different "$conf_path"
cp ../conf/settings.php "$conf_path" cp ../conf/settings.php "$conf_path"
ynh_replace_string "{DBUSER}" "${dbuser}" "$conf_path" logdir=/var/log/$app
ynh_replace_string "{DBPASS}" "${dbpass}" "$conf_path"
ynh_replace_string "{DBNAME}" "${dbname}" "$conf_path" ynh_replace_string "__DBUSER__" "${db_name}" "$conf_path"
ynh_replace_string "{ENCRYPTKEY}" "${encryptkey}" "$conf_path" db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_replace_string "{LOGDIR}" "${LOGDIR}" "$conf_path" ynh_replace_string "__DBPASS__" "${db_pwd}" "$conf_path"
ynh_replace_string "{TIMEZONE}" "$timezone" "$conf_path" ynh_replace_string "__DBNAME__" "${db_name}" "$conf_path"
ynh_replace_string "{LANGUAGE}" "${language}" "$conf_path" ynh_replace_string "__ENCRYPTKEY__" "${encryptkey}" "$conf_path"
ynh_replace_string "{CALDAV_BASEURL}" "${caldav_url}${caldav_baseurl}" "$conf_path" ynh_replace_string "__LOGDIR__" "${logdir}" "$conf_path"
ynh_replace_string "{CALDAV_DOMAIN}" "${caldav_domain}" "$conf_path" ynh_replace_string "__TIMEZONE__" "$timezone" "$conf_path"
ynh_replace_string "__LANGUAGE__" "${language}" "$conf_path"
ynh_replace_string "__CALDAV_BASEURL__" "${caldav_url}${caldav_baseurl}" "$conf_path"
ynh_replace_string "__CALDAV_DOMAIN__" "${caldav_domain}" "$conf_path"
#================================================= #=================================================
# STORE THE CHECKSUM OF THE CONFIG FILE # STORE THE CHECKSUM OF THE CONFIG FILE
@ -170,20 +167,23 @@ ynh_replace_string "{CALDAV_DOMAIN}" "${caldav_domain}" "$conf_pa
ynh_store_file_checksum "$conf_path" ynh_store_file_checksum "$conf_path"
#================================================= #=================================================
# Run database migrations (includes initialization) # RUN DATABASE MIGRATIONS (INCLUDES INITIALIZATION)
#================================================= #=================================================
( (
cd "$final_path" cd $final_path
php agendavcli migrations:migrate --no-interaction php agendavcli migrations:migrate --no-interaction
) )
#================================================= #=================================================
# SETUP LOG directory # SETUP LOGROTATE
#================================================= #=================================================
mkdir -p "$LOGDIR" mkdir -p $logdir
chown -R "$app": "$LOGDIR" chown -R $app: $logdir
# Use logrotate to manage application logfile(s)
ynh_use_logrotate --non-append
#================================================= #=================================================
# GENERIC FINALIZATION # GENERIC FINALIZATION
@ -191,28 +191,19 @@ chown -R "$app": "$LOGDIR"
# SECURE FILES AND DIRECTORIES # SECURE FILES AND DIRECTORIES
#================================================= #=================================================
chown -R root: "$final_path" chown -R root: $final_path
# Only agendav user should write here # Only agendav user should write here
chown -R "$app" "${final_path}/web/var/cache/"{profiler,twig} chown -R $app ${final_path}/web/var/cache/{profiler,twig}
# The agendav user should read here, but does not need to write # The agendav user should read here, but does not need to write
chown -R root:"$app" "${final_path}/web/config/"
chmod -R g+rx "${final_path}/web/config/"
# Other users should not be able to read as it stores passwords. # Other users should not be able to read as it stores passwords.
chmod -R o-rwx "${final_path}/web/config/" chown -R root:$app ${final_path}/web/config/
chmod -R 750 ${final_path}/web/config/
#================================================= #=================================================
# SETUP SSOWAT # RELOAD NGINX
#=================================================
# Nothing to do, this app is private
#=================================================
# RELOAD NGINX and FPM
#================================================= #=================================================
# Reload services # Reload services
service php5-fpm reload systemctl reload nginx
service nginx reload