1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/teampass_ynh.git synced 2024-09-03 20:26:37 +02:00

Refactoring et upgrade 2.1.26-final

L'upgrade depuis la précédente version a été testé, mais une sauvegarde préalable n'est pas inutile
This commit is contained in:
Maniack Crudelis 2017-08-05 23:16:02 +02:00
parent cb831fd50d
commit a11a88dfbf
14 changed files with 802 additions and 402 deletions

View file

@ -9,9 +9,7 @@ Gestionnaire de mot de passe collaboratif.
http://www.teampass.net http://www.teampass.net
Le script installe le paquet *php5-cli*. Teampass peut être configuré uniquement via le compte administrateur. Pour cela il faut s'identifier avec admin et le mot de passe choisi à l'installation.
Teampass peut-être configuré uniquement via le compte administrateur. Pour cela il faut s'identifier avec admin et le mot de passe choisi à l'installation.
Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettre en place un cron contenant ceci dans /etc/cron.d/teampass: Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettre en place un cron contenant ceci dans /etc/cron.d/teampass:
```0 0 * * * www-data cd /var/www/teampass/backups && php script.backup.php``` ```0 0 * * * www-data cd /var/www/teampass/backups && php script.backup.php```
@ -20,9 +18,16 @@ Pour utiliser la fonction de sauvegarde automatique, il est nécessaire de mettr
sudo yunohost app upgrade teampass -u https://github.com/YunoHost-Apps/teampass_ynh sudo yunohost app upgrade teampass -u https://github.com/YunoHost-Apps/teampass_ynh
**Multi-utilisateur:** Oui, avec support ldap. **Multi-utilisateur:** Oui, avec support ldap.
> *Depuis la dernière mise à jour, 2.1.26-3, le support ldap est cassé. Mais des corrections de bug justifient un changement de version.*
**Voir l'état du package:**
~*[Dernier rapport hebdomadaire](https://forum.yunohost.org/t/rapport-hebdomadaire-dintegration-continue/2297)*~
~*[Dernier test d'intégration continue](https://ci-apps.yunohost.org/jenkins/job/teampass%20%28Community%29/lastBuild/consoleFull)*~
---
> *Depuis la mise à jour 2.1.26-3, le support ldap est cassé. Mais des corrections de bug justifient un changement de version.*
*Les utilisateurs sont dans la base de données de teampass, mais le mot est généré aléatoirement et devra être réinitialisé pour chaque utilisateur souhaitant utiliser l'application* *Les utilisateurs sont dans la base de données de teampass, mais le mot est généré aléatoirement et devra être réinitialisé pour chaque utilisateur souhaitant utiliser l'application*
*Pour la première connexion, utiliser l'accès admin, avec le login 'admin' et le mot de passe renseigné à l'installation.* *Pour la première connexion, utiliser l'accès admin, avec le login 'admin' et le mot de passe renseigné à l'installation.*
*Bon les mails ne fonctionne pas non plus, donc impossible d'utiliser la fonction 'Mot de passe oublié'.* > *les mails ne fonctionne pas non plus, donc impossible d'utiliser la fonction 'Mot de passe oublié'.*
*Je pense que Teampass n'est toujours pas prêt... Le sera-t-il un jour?* *Je pense que Teampass n'est toujours pas prêt... Le sera-t-il un jour ...?*

View file

@ -1,9 +1,8 @@
;; Test complet ;; Test complet
auto_remove=1
; Manifest ; Manifest
domain="domain.tld" (DOMAIN) domain="domain.tld" (DOMAIN)
path="/path" (PATH) path="/path" (PATH)
password="pass" (PASSWORD) password="pass"
; Checks ; Checks
pkg_linter=1 pkg_linter=1
setup_sub_dir=1 setup_sub_dir=1
@ -14,10 +13,22 @@
upgrade=1 upgrade=1
backup_restore=1 backup_restore=1
multi_instance=0 multi_instance=0
wrong_user=0
wrong_path=1
incorrect_path=1 incorrect_path=1
corrupt_source=0
fail_download_source=0
port_already_use=0 port_already_use=0
final_path_already_use=0 change_url=0
;;; Levels
Level 1=auto
Level 2=auto
Level 3=auto
# Level 4:
Level 4=0
# Level 5:
Level 5=auto
Level 6=auto
Level 7=auto
Level 8=0
Level 9=0
Level 10=0
;;; Options
Email=maniackc_dev@crudelis.fr
Notification=down

6
conf/app.src Normal file
View file

@ -0,0 +1,6 @@
SOURCE_URL=https://github.com/nilsteampassnet/TeamPass/archive/2.1.26-final-3.tar.gz
SOURCE_SUM=ab57589c20e86c4e684b96241c6e73f4
SOURCE_SUM_PRG=md5sum
SOURCE_FORMAT=tar.gz
SOURCE_IN_SUBDIR=true
SOURCE_FILENAME=

View file

@ -8,7 +8,7 @@ location __PATH__ {
try_files $uri $uri/ index.php; try_files $uri $uri/ index.php;
location ~ [^/]\.php(/|$) { location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm-__NAMETOCHANGE__.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

@ -101,7 +101,7 @@ pm.max_children = 10
; The number of child processes created on startup. ; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic' ; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2 ; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 1 pm.start_servers = 2
; The desired minimum number of idle server processes. ; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic' ; Note: Used only when pm is set to 'dynamic'

View file

@ -72,7 +72,8 @@ INSERT INTO `teampass_misc` (`type`, `intitule`, `valeur`) VALUES
('admin','enable_sts','0'), ('admin','enable_sts','0'),
('admin','encryptClientServer','1'), ('admin','encryptClientServer','1'),
('admin','cpassman_version','__VERSION__'), ('admin','cpassman_version','__VERSION__'),
-- ('admin','ldap_mode','1'), -- ldap est cassé sur la version 2.1.26-3 -- ('admin','ldap_mode','1'),
-- ldap ne fonctionne plus sur cette version de teampass...
('admin','ldap_mode','0'), ('admin','ldap_mode','0'),
('admin','ldap_type','posix-search'), ('admin','ldap_type','posix-search'),
('admin','ldap_suffix','0'), ('admin','ldap_suffix','0'),
@ -141,18 +142,11 @@ INSERT INTO `teampass_misc` (`type`, `intitule`, `valeur`) VALUES
('admin','show_only_accessible_folders','1'), ('admin','show_only_accessible_folders','1'),
('admin','enable_suggestion','0'), ('admin','enable_suggestion','0'),
('admin','otv_expiration_period','7'), ('admin','otv_expiration_period','7'),
-- ('admin', 'timezone', '__TIMEZONE__'),
-- ('admin', 'can_create_root_folder', '1'),
-- ('admin', 'settings_offline_mode', '1'),
-- ('admin', 'offline_key_level', '50'),
('admin','default_session_expiration_time','60'), ('admin','default_session_expiration_time','60'),
('admin','bck_script_path','__FINALPATH__/backups/'),
-- ('complex','1','0'),
-- ('admin', 'menu_type', 'context'),
('admin', 'duo', '0'), ('admin', 'duo', '0'),
-- ('update', 'encrypt_pw_in_log_items', '1');
('admin','enable_server_password_change','0'), ('admin','enable_server_password_change','0'),
('admin','ldap_object_class','0'), ('admin','ldap_object_class','0'),
('admin','bck_script_path','__FINALPATH__/backups/'),
('admin','bck_script_filename', 'bck_cpassman'), ('admin','bck_script_filename', 'bck_cpassman'),
('admin','syslog_enable','0'), ('admin','syslog_enable','0'),
('admin','syslog_host','localhost'), ('admin','syslog_host','localhost'),
@ -178,7 +172,7 @@ CREATE TABLE IF NOT EXISTS `teampass_nested_tree` (
KEY `personal_folder_idx` (`personal_folder`) KEY `personal_folder_idx` (`personal_folder`)
) CHARSET=utf8; ) CHARSET=utf8;
INSERT INTO teampass_nested_tree VALUES("1","0","__FOLDERS__","1","2","1","0","0","0","0"); -- INSERT INTO teampass_nested_tree VALUES("1","0","__FOLDERS__","1","2","1","0","0","0","0");
CREATE TABLE IF NOT EXISTS `teampass_rights` ( CREATE TABLE IF NOT EXISTS `teampass_rights` (
`id` int(12) NOT null AUTO_INCREMENT, `id` int(12) NOT null AUTO_INCREMENT,

View file

@ -3,15 +3,15 @@
"id": "teampass", "id": "teampass",
"packaging_format": 1, "packaging_format": 1,
"requirements": { "requirements": {
"yunohost": ">= 2.4" "yunohost": ">= 2.6.4"
}, },
"description": { "description": {
"en": "Passwords Manager", "en": "Passwords Manager",
"fr": "Gestionnaire de mots de passes." "fr": "Gestionnaire de mots de passes."
}, },
"version": "2.1.26-3", "version": "2.1.26-final-3",
"url": "http://www.teampass.net", "url": "http://www.teampass.net",
"license": "free", "license": "AGPL-3.0",
"maintainer": { "maintainer": {
"name": "Ackak, Maniack Crudelis et matlink", "name": "Ackak, Maniack Crudelis et matlink",
"email": "ackak_ynh@ackak.net maniackc_dev@crudelis.fr matlink@matlink.fr" "email": "ackak_ynh@ackak.net maniackc_dev@crudelis.fr matlink@matlink.fr"

View file

@ -1,213 +0,0 @@
#!/bin/bash
CHECK_VAR () { # Vérifie que la variable n'est pas vide.
# $1 = Variable à vérifier
# $2 = Texte à afficher en cas d'erreur
test -n "$1" || (echo "$2" >&2 && false)
}
EXIT_PROPERLY () { # Provoque l'arrêt du script en cas d'erreur. Et nettoye les résidus.
exit_code=$?
if [ "$exit_code" -eq 0 ]; then
exit 0 # Quitte sans erreur si le script se termine correctement.
fi
trap '' EXIT
set +eu
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!!" >&2
if type -t CLEAN_SETUP > /dev/null; then # Vérifie l'existance de la fonction avant de l'exécuter.
CLEAN_SETUP # Appel la fonction de nettoyage spécifique du script install.
fi
# Compense le bug de ssowat qui ne supprime pas l'entrée de l'app en cas d'erreur d'installation.
sudo sed -i "\@\"$domain$path/\":@d" /etc/ssowat/conf.json
ynh_die
}
TRAP_ON () { # Activate signal capture
set -eu # Exit if a command fail, and if a variable is used unset.
trap EXIT_PROPERLY EXIT # Capturing exit signals on shell script
}
CHECK_USER () { # Vérifie la validité de l'user admin
# $1 = Variable de l'user admin.
ynh_user_exists "$1" || (echo "Wrong admin" >&2 && false)
}
CHECK_PATH () { # Vérifie la présence du / en début de path. Et son absence à la fin.
if [ "${path:0:1}" != "/" ]; then # Si le premier caractère n'est pas un /
path="/$path" # Ajoute un / en début de path
fi
if [ "${path:${#path}-1}" == "/" ] && [ ${#path} -gt 1 ]; then # Si le dernier caractère est un / et que ce n'est pas le seul caractère.
path="${path:0:${#path}-1}" # Supprime le dernier caractère
fi
}
CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine.
sudo yunohost app checkurl $domain$path -a $app
}
CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé.
final_path=/var/www/$app
if [ -e "$final_path" ]
then
echo "This path already contains a folder" >&2
false
fi
}
GENERATE_DB () { # Créer une base de données et un utilisateur dédié au nom de l'app.
# $1 = Nom de la base de donnée
db_user=$1
db_user=${db_user//-/_} # mariadb ne supporte pas les - dans les noms de base de données. Ils sont donc remplacé par des _
# Génère un mot de passe aléatoire.
# db_pwd=$(head -n20 /dev/urandom | tr -c -d 'A-Za-z0-9' | head -c20)
db_pwd=$(ynh_string_random)
CHECK_VAR "$db_pwd" "db_pwd empty"
# Utilise '$app' comme nom d'utilisateur et de base de donnée
# Initialise la base de donnée et stocke le mot de passe mysql.
ynh_mysql_create_db "$db_user" "$db_user" $db_pwd
ynh_app_setting_set $app mysqlpwd $db_pwd
}
SETUP_SOURCE () { # Télécharge la source, décompresse et copie dans $final_path
# $1 = Nom de l'archive téléchargée.
wget -nv -i ../sources/source_url -O $1
# Vérifie la somme de contrôle de la source téléchargée.
md5sum -c ../sources/source_md5 --status || (echo "Corrupt source" >&2 && false)
# Décompresse la source
if [ "$(echo ${1##*.})" == "gz" ]; then
tar -x -f $1
elif [ "$(echo ${1##*.})" == "zip" ]; then
unzip -q $1
else
false # Format d'archive non pris en charge.
fi
# Copie les fichiers sources
sudo cp -a $(cat ../sources/source_dir)/. "$final_path"
# Copie les fichiers additionnels ou modifiés.
if test -e "../sources/ajouts"; then
sudo cp -a ../sources/ajouts/. "$final_path"
fi
}
ADD_SYS_USER () { # Créer un utilisateur système dédié à l'app
if ! ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
then
sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false)
fi
}
POOL_FPM () { # Créer le fichier de configuration du pool php-fpm et le configure.
sed -i "s@__NAMETOCHANGE__@$app@g" ../conf/php-fpm.conf
sed -i "s@__FINALPATH__@$final_path@g" ../conf/php-fpm.conf
sed -i "s@__USER__@$app@g" ../conf/php-fpm.conf
finalphpconf=/etc/php5/fpm/pool.d/$app.conf
sudo cp ../conf/php-fpm.conf $finalphpconf
sudo chown root: $finalphpconf
finalphpini=/etc/php5/fpm/conf.d/20-$app.ini
sudo cp ../conf/php-fpm.ini $finalphpini
sudo chown root: $finalphpini
sudo service php5-fpm reload
}
STORE_MD5_CONFIG () { # Enregistre la somme de contrôle du fichier de config
# $1 = Nom du fichier de conf pour le stockage dans settings.yml
# $2 = Nom complet et chemin du fichier de conf.
ynh_app_setting_set $app $1_file_md5 $(sudo md5sum "$2" | cut -d' ' -f1)
}
CHECK_MD5_CONFIG () { # Créé un backup du fichier de config si il a été modifié.
# $1 = Nom du fichier de conf pour le stockage dans settings.yml
# $2 = Nom complet et chemin du fichier de conf.
if [ "$(ynh_app_setting_get $app $1_file_md5)" != $(sudo md5sum "$2" | cut -d' ' -f1) ]; then
sudo cp -a "$2" "$2.backup.$(date '+%d.%m.%y_%Hh%M,%Ss')" # Si le fichier de config a été modifié, créer un backup.
fi
}
FIND_PORT () { # Cherche un port libre.
# $1 = Numéro de port pour débuter la recherche.
port=$1
while ! sudo yunohost app checkport $port ; do
port=$((port+1))
done
CHECK_VAR "$port" "port empty"
}
### REMOVE SCRIPT
REMOVE_NGINX_CONF () { # Suppression de la configuration nginx
if [ -e "/etc/nginx/conf.d/$domain.d/$app.conf" ]; then # Delete nginx config
echo "Delete nginx config"
sudo rm "/etc/nginx/conf.d/$domain.d/$app.conf"
sudo service nginx reload
fi
}
REMOVE_FPM_CONF () { # Suppression de la configuration du pool php-fpm
if [ -e "/etc/php5/fpm/pool.d/$app.conf" ]; then # Delete fpm config
echo "Delete fpm config"
sudo rm "/etc/php5/fpm/pool.d/$app.conf"
fi
if [ -e "/etc/php5/fpm/conf.d/20-$app.ini" ]; then # Delete php config
echo "Delete php config"
sudo rm "/etc/php5/fpm/conf.d/20-$app.ini"
fi
sudo service php5-fpm reload
}
REMOVE_LOGROTATE_CONF () { # Suppression de la configuration de logrotate
if [ -e "/etc/logrotate.d/$app" ]; then
echo "Delete logrotate config"
sudo rm "/etc/logrotate.d/$app"
fi
}
SECURE_REMOVE () { # Suppression de dossier avec vérification des variables
chaine="$1" # L'argument doit être donné entre quotes simple '', pour éviter d'interpréter les variables.
no_var=0
while (echo "$chaine" | grep -q '\$') # Boucle tant qu'il y a des $ dans la chaine
do
no_var=1
global_var=$(echo "$chaine" | cut -d '$' -f 2) # Isole la première variable trouvée.
only_var=\$$(expr "$global_var" : '\([A-Za-z0-9_]*\)') # Isole complètement la variable en ajoutant le $ au début et en gardant uniquement le nom de la variable. Se débarrasse surtout du / et d'un éventuel chemin derrière.
real_var=$(eval "echo ${only_var}") # `eval "echo ${var}` permet d'interpréter une variable contenue dans une variable.
if test -z "$real_var" || [ "$real_var" = "/" ]; then
echo "Variable $only_var is empty, suppression of $chaine cancelled." >&2
return 1
fi
chaine=$(echo "$chaine" | sed "s@$only_var@$real_var@") # remplace la variable par sa valeur dans la chaine.
done
if [ "$no_var" -eq 1 ]
then
if [ -e "$chaine" ]; then
echo "Delete directory $chaine"
sudo rm -r "$chaine"
fi
return 0
else
echo "No detected variable." >&2
return 1
fi
}
REMOVE_BDD () { # Suppression de la base de donnée et de l'utilisateur associé.
# $1 = Nom de la base de donnée
# Utilise '$app' comme nom d'utilisateur et de base de donnée
db_user=$1
if mysqlshow -u root -p$(sudo cat $MYSQL_ROOT_PWD_FILE) | grep -q "^| $db_user"; then
echo "Delete db"
ynh_mysql_drop_db $db_user
ynh_mysql_drop_user $db_user
fi
}
REMOVE_SYS_USER () { # Supprime l'utilisateur système dédié à l'app
if ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
then
sudo userdel $app
fi
}

379
scripts/_common.sh Executable file
View file

@ -0,0 +1,379 @@
#!/bin/bash
# =============================================================================
# YUNOHOST 2.7 FORTHCOMING HELPERS
# =============================================================================
# Create a dedicated nginx config
#
# 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
ynh_remove_nginx_config () {
ynh_secure_remove "/etc/nginx/conf.d/$domain.d/$app.conf"
sudo systemctl reload nginx
}
# 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
ynh_remove_fpm_config () {
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
}
# Create a dedicated systemd config
#
# usage: ynh_add_systemd_config
ynh_add_systemd_config () {
finalsystemdconf="/etc/systemd/system/$app.service"
ynh_backup_if_checksum_is_different "$finalsystemdconf"
sudo cp ../conf/systemd.service "$finalsystemdconf"
# 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 "${final_path:-}"; then
ynh_replace_string "__FINALPATH__" "$final_path" "$finalsystemdconf"
fi
if test -n "${app:-}"; then
ynh_replace_string "__APP__" "$app" "$finalsystemdconf"
fi
ynh_store_file_checksum "$finalsystemdconf"
sudo chown root: "$finalsystemdconf"
sudo systemctl enable $app
sudo systemctl daemon-reload
}
# Remove the dedicated systemd config
#
# usage: ynh_remove_systemd_config
ynh_remove_systemd_config () {
finalsystemdconf="/etc/systemd/system/$app.service"
if [ -e "$finalsystemdconf" ]; then
sudo systemctl stop $app
sudo systemctl disable $app
ynh_secure_remove "$finalsystemdconf"
fi
}
#=================================================
#=================================================
#=================================================
# CHECKING
#=================================================
CHECK_DOMAINPATH () { # Vérifie la disponibilité du path et du domaine.
# Check availability of a web path
ynh_webpath_available $domain $path_url
# Register/book a web path for an app
ynh_webpath_register $app $domain $path_url
}
CHECK_FINALPATH () { # Vérifie que le dossier de destination n'est pas déjà utilisé.
final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder"
}
#=================================================
# DISPLAYING
#=================================================
NO_PRINT () { # Supprime l'affichage dans stdout pour la commande en argument.
set +x
$@
set -x
}
WARNING () { # Écrit sur le canal d'erreur pour passer en warning.
$@ >&2
}
SUPPRESS_WARNING () { # Force l'écriture sur la sortie standard
$@ 2>&1
}
QUIET () { # Redirige la sortie standard dans /dev/null
$@ > /dev/null
}
ALL_QUIET () { # Redirige la sortie standard et d'erreur dans /dev/null
$@ > /dev/null 2>&1
}
#=================================================
# BACKUP
#=================================================
BACKUP_FAIL_UPGRADE () {
WARNING echo "Upgrade failed."
app_bck=${app//_/-} # Replace all '_' by '-'
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$backup_number; then # Vérifie l'existence de l'archive avant de supprimer l'application et de restaurer
sudo yunohost app remove $app # Supprime l'application avant de la restaurer.
sudo yunohost backup restore --ignore-system $app_bck-pre-upgrade$backup_number --apps $app --force # Restore the backup if upgrade failed
ynh_die "The app was restored to the way it was before the failed upgrade."
fi
}
BACKUP_BEFORE_UPGRADE () { # Backup the current version of the app, restore it if the upgrade fails
backup_number=1
old_backup_number=2
app_bck=${app//_/-} # Replace all '_' by '-'
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade1; then # Vérifie l'existence d'une archive déjà numéroté à 1.
backup_number=2 # Et passe le numéro de l'archive à 2
old_backup_number=1
fi
sudo yunohost backup create --ignore-system --apps $app --name $app_bck-pre-upgrade$backup_number # Créer un backup différent de celui existant.
if [ "$?" -eq 0 ]; then # Si le backup est un succès, supprime l'archive précédente.
if sudo yunohost backup list | grep -q $app_bck-pre-upgrade$old_backup_number; then # Vérifie l'existence de l'ancienne archive avant de la supprimer, pour éviter une erreur.
QUIET sudo yunohost backup delete $app_bck-pre-upgrade$old_backup_number
fi
else # Si le backup a échoué
ynh_die "Backup failed, the upgrade process was aborted."
fi
}
HUMAN_SIZE () { # Transforme une taille en Ko en une taille lisible pour un humain
human=$(numfmt --to=iec --from-unit=1K $1)
echo $human
}
CHECK_SIZE () { # Vérifie avant chaque backup que l'espace est suffisant
file_to_analyse=$1
backup_size=$(sudo du --summarize "$file_to_analyse" | cut -f1)
free_space=$(sudo df --output=avail "/home/yunohost.backup" | sed 1d)
if [ $free_space -le $backup_size ]
then
WARNING echo "Espace insuffisant pour sauvegarder $file_to_analyse."
WARNING echo "Espace disponible: $(HUMAN_SIZE $free_space)"
ynh_die "Espace nécessaire: $(HUMAN_SIZE $backup_size)"
fi
}
# Ce helper est temporaire et sert de remplacement à la véritable fonction ynh_restore_file. Le temps qu'elle arrive...
ynh_restore_file () {
if [ -f "$1" ]; then
ynh_die "There is already a file at this path: $1"
fi
sudo cp -a "${YNH_APP_BACKUP_DIR}$1" "$1"
}
#=================================================
# PACKAGE CHECK BYPASSING...
#=================================================
IS_PACKAGE_CHECK () { # Détermine une exécution en conteneur (Non testé)
return $(uname -n | grep -c 'pchecker_lxc')
}
#=================================================
# NODEJS
#=================================================
# INFOS
# n (Node version management) utilise la variable PATH pour stocker le path de la version de node à utiliser.
# C'est ainsi qu'il change de version
# ynh_install_nodejs installe la version de nodejs demandée en argument, avec n
# ynh_use_nodejs active une version de nodejs dans le script courant
# 3 variables sont mises à disposition, et 2 sont stockées dans la config de l'app
# - nodejs_path: Le chemin absolu de cette version de node
# Utilisé pour des appels directs à node.
# - nodejs_version: Simplement le numéro de version de nodejs pour cette application
# - nodejs_use_version: Un alias pour charger une version de node dans le shell courant.
# Utilisé pour démarrer un service ou un script qui utilise node ou npm
# Dans ce cas, c'est $PATH qui contient le chemin de la version de node. Il doit être propagé sur les autres shell si nécessaire.
n_install_dir="/opt/node_n"
node_version_path="/usr/local/n/versions/node"
ynh_use_nodejs () {
nodejs_version=$(ynh_app_setting_get $app nodejs_version)
load_n_path="[[ :$PATH: == *\":$n_install_dir/bin:\"* ]] || PATH=\"$n_install_dir/bin:$PATH\""
nodejs_use_version="$n_install_dir/bin/n -q $nodejs_version"
# "Load" a version of node
eval $load_n_path; $nodejs_use_version
# Get the absolute path of this version of node
nodejs_path="$(n bin $nodejs_version)"
# Make an alias for node use
ynh_node_exec="eval $load_n_path; n use $nodejs_version"
}
ynh_install_nodejs () {
# Use n, https://github.com/tj/n to manage the nodejs versions
nodejs_version="$1"
local n_install_script="https://git.io/n-install"
# Create $n_install_dir
mkdir -p "$n_install_dir"
# Load n path in PATH
CLEAR_PATH="$n_install_dir/bin:$PATH"
# Remove /usr/local/bin in PATH in case of node has already setup.
PATH=$(echo $CLEAR_PATH | sed 's@/usr/local/bin:@@')
# Move an existing node binary, to avoid to block n.
test -x /usr/bin/node && mv /usr/bin/node /usr/bin/node_n
test -x /usr/bin/npm && mv /usr/bin/npm /usr/bin/npm_n
# If n is not previously setup, install it
n --version > /dev/null 2>&1 || \
( echo "Installation of N - Node.js version management" >&2; \
curl -sL $n_install_script | N_PREFIX="$n_install_dir" bash -s -- -y - )
# Restore /usr/local/bin in PATH
PATH=$CLEAR_PATH
# And replace the old node binary.
test -x /usr/bin/node_n && mv /usr/bin/node_n /usr/bin/node
test -x /usr/bin/npm_n && mv /usr/bin/npm_n /usr/bin/npm
# Install the requested version of nodejs
n $nodejs_version
# Find the last "real" version for this major version of node.
real_nodejs_version=$(find $node_version_path/$nodejs_version* -maxdepth 0 | sort --version-sort | tail --lines=1)
real_nodejs_version=$(basename $real_nodejs_version)
# Create a symbolic link for this major version
ln --symbolic --force --no-target-directory $node_version_path/$real_nodejs_version $node_version_path/$nodejs_version
# Store the ID of this app and the version of node requested for it
echo "$YNH_APP_ID:$nodejs_version" | tee --append "$n_install_dir/ynh_app_version"
# Store nodejs_version into the config of this app
ynh_app_setting_set $app nodejs_version $nodejs_version
# Build the update script and set the cronjob
ynh_cron_upgrade_node
ynh_use_nodejs
}
ynh_remove_nodejs () {
ynh_use_nodejs
# Remove the line for this app
sed --in-place "/$YNH_APP_ID:$nodejs_version/d" "$n_install_dir/ynh_app_version"
# If none another app uses this version of nodejs, remove it.
if ! grep --quiet "$nodejs_version" "$n_install_dir/ynh_app_version"
then
n rm $nodejs_version
fi
# If none another app uses n, remove n
if [ ! -s "$n_install_dir/ynh_app_version" ]
then
ynh_secure_remove "$n_install_dir"
ynh_secure_remove "/usr/local/n"
sed --in-place "/N_PREFIX/d" /root/.bashrc
fi
}
ynh_cron_upgrade_node () {
# Build the update script
cat > "$n_install_dir/node_update.sh" << EOF
#!/bin/bash
version_path="$node_version_path"
n_install_dir="$n_install_dir"
# Log the date
date
# List all real installed version of node
all_real_version="\$(find \$version_path/* -maxdepth 0 -type d | sed "s@\$version_path/@@g")"
# Keep only the major version number of each line
all_real_version=\$(echo "\$all_real_version" | sed 's/\..*\$//')
# Remove double entries
all_real_version=\$(echo "\$all_real_version" | sort --unique)
# Read each major version
while read version
do
echo "Update of the version \$version"
sudo \$n_install_dir/bin/n \$version
# Find the last "real" version for this major version of node.
real_nodejs_version=\$(find \$version_path/\$version* -maxdepth 0 | sort --version-sort | tail --lines=1)
real_nodejs_version=\$(basename \$real_nodejs_version)
# Update the symbolic link for this version
sudo ln --symbolic --force --no-target-directory \$version_path/\$real_nodejs_version \$version_path/\$version
done <<< "\$(echo "\$all_real_version")"
EOF
chmod +x "$n_install_dir/node_update.sh"
# Build the cronjob
cat > "/etc/cron.daily/node_update" << EOF
#!/bin/bash
$n_install_dir/node_update.sh >> $n_install_dir/node_update.log
EOF
chmod +x "/etc/cron.daily/node_update"
}

View file

@ -1,33 +1,75 @@
#!/bin/bash #!/bin/bash
# Récupère les infos de l'application. #=================================================
# GENERIC STARTING
#=================================================
# MANAGE FAILURE OF THE SCRIPT
#=================================================
# Exit on command errors and treat unset variables as an error
set -eu
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
if [ ! -e _common.sh ]; then
# Rapatrie le fichier de fonctions si il n'est pas dans le dossier courant
sudo cp ../settings/scripts/_common.sh ./_common.sh
sudo chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
# Source app helpers
source /usr/share/yunohost/helpers
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
db_name=$(ynh_app_setting_get $app db_name)
#=================================================
# STANDARD BACKUP STEPS
#=================================================
# BACKUP OF THE MAIN DIR OF THE APP
#=================================================
# The parameter $1 is the backup directory location CHECK_SIZE "$final_path"
# which will be compressed afterward ynh_backup "$final_path" "${YNH_APP_BACKUP_DIR}$final_path"
backup_dir=$1/apps/$app
sudo mkdir -p "$backup_dir"
# Backup sources & data #=================================================
sudo cp -a $final_path/. $backup_dir/sources # BACKUP OF THE NGINX CONFIGURATION
#=================================================
# Copy Nginx and YunoHost parameters to make the script "standalone" ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" "${YNH_APP_BACKUP_DIR}/etc/nginx/conf.d/$domain.d/$app.conf"
sudo cp -a /etc/yunohost/apps/$app/. $backup_dir/yunohost
sudo cp -a /etc/nginx/conf.d/$domain.d/$app.conf $backup_dir/nginx.conf
# Copy dedicated php-fpm process to backup folder #=================================================
sudo cp -a /etc/php5/fpm/pool.d/$app.conf $backup_dir/php-fpm.conf # BACKUP OF THE PHP-FPM CONFIGURATION
sudo cp -a /etc/php5/fpm/conf.d/20-$app.ini $backup_dir/php-fpm.ini #=================================================
# Backup db ynh_backup "/etc/php5/fpm/pool.d/$app.conf" "${YNH_APP_BACKUP_DIR}/etc/php5/fpm/pool.d/$app.conf"
root_pwd=$(sudo cat /etc/yunohost/mysql) ynh_backup "/etc/php5/fpm/conf.d/20-$app.ini" "${YNH_APP_BACKUP_DIR}/etc/php5/fpm/conf.d/20-$app.ini"
sudo mysqldump -u root -p$root_pwd --no-create-db $app --result-file="$backup_dir/db.sql"
# Copie du fichier sk.php #=================================================
sudo cp -a /etc/teampass/sk.php $backup_dir/sk.php # BACKUP OF THE SQL BDD
#=================================================
ynh_mysql_dump_db "$db_name" > db.sql
CHECK_SIZE "db.sql"
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP SK.PHP
#=================================================
ynh_backup "/etc/teampass/sk.php" "${YNH_APP_BACKUP_DIR}/etc/teampass/sk.php"
#=================================================
# BACKUP CRON FILE
#=================================================
ynh_backup "/etc/cron.d/teampass" "${YNH_APP_BACKUP_DIR}/etc/cron.d/teampass"

View file

@ -1,59 +1,93 @@
#!/bin/bash #!/bin/bash
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script #=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
CLEAN_SETUP () { source _common.sh
source /usr/share/yunohost/helpers
#=================================================
# MANAGE FAILURE OF THE SCRIPT
#=================================================
ynh_clean_setup () {
# Nettoyage des résidus d'installation non pris en charge par le script remove. # Nettoyage des résidus d'installation non pris en charge par le script remove.
# Pas de nettoyage supplémentaire nécessaire ici... # Pas de nettoyage supplémentaire nécessaire ici...
echo "" echo ""
} }
TRAP_ON # Active trap pour arrêter le script si une erreur est détectée. ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée.
#=================================================
# RETRIEVE ARGUMENTS FROM THE MANIFEST
#=================================================
domain=$YNH_APP_ARG_DOMAIN domain=$YNH_APP_ARG_DOMAIN
path=$YNH_APP_ARG_PATH path_url=$YNH_APP_ARG_PATH
password_admin=$YNH_APP_ARG_PASSWORD password_admin=$YNH_APP_ARG_PASSWORD
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
# Source app helpers #=================================================
source /usr/share/yunohost/helpers # CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS
#=================================================
# Vérifie que les variables ne sont pas vides. path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du path.
CHECK_VAR "$app" "app name not set"
CHECK_PATH # Vérifie et corrige la syntaxe du path.
CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine. CHECK_DOMAINPATH # Vérifie la disponibilité du path et du domaine.
CHECK_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé. CHECK_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé.
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
# Enregistre les infos dans la config YunoHost
ynh_app_setting_set $app domain $domain ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path ynh_app_setting_set $app path $path_url
GENERATE_DB $app # Créer une base de données et un utilisateur dédié au nom de l'app. #=================================================
# STANDARD MODIFICATIONS
#=================================================
# CREATE A SQL BDD
#=================================================
db_name=$(ynh_sanitize_dbid $app)
ynh_app_setting_set $app db_name $db_name
ynh_mysql_setup_db $db_name $db_name
#=================================================
# DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
# Créer le repertoire de destination et stocke son emplacement.
sudo mkdir "$final_path"
ynh_app_setting_set $app final_path $final_path ynh_app_setting_set $app final_path $final_path
ynh_setup_source "$final_path" # Télécharge la source, décompresse et copie dans $final_path
SETUP_SOURCE "teampass.tar.gz" # Télécharge la source, décompresse et copie dans $final_path
# Delete the install directory. # Delete the install directory.
# SECURE_REMOVE '$final_path/install' # SECURE_REMOVE '$final_path/install'
# Et copie le fichier de config nginx #=================================================
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf # NGINX CONFIGURATION
#=================================================
ynh_add_nginx_config
# Modifie les variables dans le fichier de configuration nginx #=================================================
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf # CREATE DEDICATED USER
sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf #=================================================
sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf
ADD_SYS_USER # Créer un user système dédié pour l'application ynh_system_user_create $app # Créer un utilisateur système dédié à l'app
POOL_FPM # Créer le fichier de configuration du pool php-fpm et le configure.
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
ynh_add_fpm_config # Créer le fichier de configuration du pool php-fpm et le configure.
#=================================================
# SPECIFIC SETUP
#=================================================
# FILL THE DATABASE
#=================================================
# Copie du script contenant la fonction bCrypt # Copie du script contenant la fonction bCrypt
sudo cp ../conf/mdphash.php $final_path sudo cp ../conf/mdphash.php $final_path
@ -62,7 +96,7 @@ sudo cp ../conf/mdphash.php $final_path
if [ $(echo $LANG | cut -c1-2) == "fr" ] if [ $(echo $LANG | cut -c1-2) == "fr" ]
then then
langue=french langue=french
folders=partagés folders=partagés # Le dossier partagé est actuellement désactivé par défaut. Encore un bug...
roles=utilisateurs roles=utilisateurs
else else
langue=english langue=english
@ -71,7 +105,7 @@ else
fi fi
sed -i "s@__FINALPATH__@$final_path@g" ../conf/populate.sql sed -i "s@__FINALPATH__@$final_path@g" ../conf/populate.sql
sed -i "s@__DOMAIN__@$domain@g" ../conf/populate.sql sed -i "s@__DOMAIN__@$domain@g" ../conf/populate.sql
sed -i "s@__PATH__@$path@g" ../conf/populate.sql sed -i "s@__PATH__@$path_url@g" ../conf/populate.sql
sed -i "s@__FOLDERS__@$folders@g" ../conf/populate.sql sed -i "s@__FOLDERS__@$folders@g" ../conf/populate.sql
sed -i "s@__ROLES__@$roles@g" ../conf/populate.sql sed -i "s@__ROLES__@$roles@g" ../conf/populate.sql
sed -i "s@__VERSION__@$(sed -n 3p $final_path/changelog.md)@g" ../conf/populate.sql sed -i "s@__VERSION__@$(sed -n 3p $final_path/changelog.md)@g" ../conf/populate.sql
@ -83,28 +117,43 @@ sed -i "s@__LANG__@$langue@g" ../conf/populate.sql
ynh_app_setting_set $app langue $langue ynh_app_setting_set $app langue $langue
# Import du fichier SQL # Import du fichier SQL
mysql -u $db_user -p$db_pwd $db_user < ../conf/populate.sql mysql -u $db_name -p$db_pwd $db_name < ../conf/populate.sql
#=================================================
# CONFIGURE TEAMPASS
#=================================================
# Remplacement des variables dans les fichier settings.php et sk.php # Remplacement des variables dans les fichier settings.php et sk.php
sed -i "s@__DBUSER__@$db_user@g" ../conf/settings.php sed -i "s@__DBUSER__@$db_name@g" ../conf/settings.php
sed -i "s@__DBPWD__@$db_pwd@g" ../conf/settings.php sed -i "s@__DBPWD__@$db_pwd@g" ../conf/settings.php
sed -i "s@__FINALPATH__@$final_path@g" ../conf/settings.php sed -i "s@__FINALPATH__@$final_path@g" ../conf/settings.php
path_sk_file=/etc/teampass/ path_sk_file=/etc/teampass/
sudo mkdir $path_sk_file sudo mkdir $path_sk_file
sed -i "s@__SKPATH__@$path_sk_file@g" ../conf/settings.php sed -i "s@__SKPATH__@$path_sk_file@g" ../conf/settings.php
#=================================================
# CREATE A SALTKEY
#=================================================
saltkey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{32\}\).*/\1/p') saltkey=$(dd if=/dev/urandom bs=1 count=200 2> /dev/null | tr -c -d '[A-Za-z0-9]' | sed -n 's/\(.\{32\}\).*/\1/p')
sed -i "s@__SALTKEY__@$saltkey@g" ../conf/sk.php sed -i "s@__SALTKEY__@$saltkey@g" ../conf/sk.php
# Et copie des fichiers à leurs emplacements. #=================================================
# COPY THE FILES
#=================================================
sudo cp ../conf/sk.php $path_sk_file/sk.php sudo cp ../conf/sk.php $path_sk_file/sk.php
sudo chown -R root:$app $path_sk_file sudo chown -R root:$app $path_sk_file
sudo chmod 750 $path_sk_file sudo chmod 750 $path_sk_file
sudo cp ../conf/settings.php $final_path/includes/config/settings.php sudo cp ../conf/settings.php $final_path/includes/config/settings.php
STORE_MD5_CONFIG "settings.php" "$final_path/includes/config/settings.php" # Enregistre la somme de contrôle du fichier de config ynh_store_file_checksum "$final_path/includes/config/settings.php" # Enregistre la somme de contrôle du fichier de config
sudo cp $final_path/includes/libraries/csrfp/libs/csrfp.config.sample.php $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Créer le fichier de config de csrfp sudo cp $final_path/includes/libraries/csrfp/libs/csrfp.config.sample.php $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Créer le fichier de config de csrfp
sed -i "s@CSRFP_TOKEN\" => \"@&$(head -n40 /dev/urandom | tr -c -d 'a-f0-9' | head -c50)@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne un token, valide en hexadécimal sed -i "s@CSRFP_TOKEN\" => \"@&$(head -n40 /dev/urandom | tr -c -d 'a-f0-9' | head -c50)@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne un token, valide en hexadécimal
sed -i "s@jsUrl\" => \"@&$domain$path/includes/libraries/csrfp/js/csrfprotector.js@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne l'adresse de csrfprotector.js sed -i "s@jsUrl\" => \"@&$domain$path_url/includes/libraries/csrfp/js/csrfprotector.js@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne l'adresse de csrfprotector.js
#=================================================
# CREATE THE USERS
#=================================================
# Ajout des utilisateurs actuels dans la base yunohost # Ajout des utilisateurs actuels dans la base yunohost
teampass_users=$(ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x objectClass=mailAccount uid | grep uid: | sed 's/uid: //' | xargs) teampass_users=$(ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x objectClass=mailAccount uid | grep uid: | sed 's/uid: //' | xargs)
@ -115,28 +164,35 @@ do
password=$(php ../conf/mdphash.php $real_password) password=$(php ../conf/mdphash.php $real_password)
mail=$(sudo ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x uid=$teampassuser mail | grep mail: | sed 's/mail: //' | head -n1) mail=$(sudo ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x uid=$teampassuser mail | grep mail: | sed 's/mail: //' | head -n1)
# Creation de l'utilisateur # Creation de l'utilisateur
mysql -u $db_user -p$db_pwd $db_user -e "INSERT INTO teampass_users (id, login, pw, groupes_visibles, derniers, key_tempo, last_pw_change, last_pw, admin, fonction_id, groupes_interdits, last_connexion, gestionnaire, email, favourites, latest_items, personal_folder, can_create_root_folder) VALUES (NULL, '$teampassuser', '$password', '1', '', '', '', '', '0', '1', '', '', '0', '$mail', '', '', '1', '1');" mysql -u $db_name -p$db_pwd $db_name -e "INSERT INTO teampass_users (id, login, pw, groupes_visibles, derniers, key_tempo, last_pw_change, last_pw, admin, fonction_id, groupes_interdits, last_connexion, gestionnaire, email, favourites, latest_items, personal_folder, can_create_root_folder) VALUES (NULL, '$teampassuser', '$password', '1', '', '', '', '', '0', '1', '', '', '0', '$mail', '', '', '1', '1');"
# Creation du repertoire personnel # Creation du repertoire personnel
id_user=$(mysql -u $db_user -p$db_pwd $db_user -se "SELECT id from teampass_users where login='$teampassuser';") id_user=$(mysql -u $db_name -p$db_pwd $db_name -se "SELECT id from teampass_users where login='$teampassuser';")
mysql -u $db_user -p$db_pwd $db_user -e "INSERT INTO teampass_nested_tree (id, parent_id, title, nleft, nright, nlevel, bloquer_creation, bloquer_modification, personal_folder, renewal_period) VALUES (NULL, 0, '$id_user', 0, 0, 1, 0, 0, 1, 0);" mysql -u $db_name -p$db_pwd $db_name -e "INSERT INTO teampass_nested_tree (id, parent_id, title, nleft, nright, nlevel, bloquer_creation, bloquer_modification, personal_folder, renewal_period) VALUES (NULL, 0, '$id_user', 0, 0, 1, 0, 0, 1, 0);"
((id++)) ((id++))
done done
#=================================================
# CREATE A CRON FILE FOR AUTOMATIC BACKUP
#=================================================
echo "0 0 * * 0 $app cd $final_path/backups && php script.backup.php" > /etc/cron.d/teampass
#=================================================
# GENERIC FINALISATION
#=================================================
# SECURING FILES AND DIRECTORIES
#=================================================
# Configure les droits d'accès au fichiers
# -rw-r--r-- sur les fichiers
sudo find $final_path -type f -print0 | xargs -0 sudo chmod 644
# drwxr-xr-x sur les dossiers
sudo find $final_path -type d -print0 | xargs -0 sudo chmod 755
# Les dossiers files et upload ont besoin d'un droit d'écriture.
sudo chmod 774 -R $final_path/files $final_path/upload
# Le script de conversion csv xml doit être exécutable, au moins par root.
sudo chmod 744 $final_path/CsvToXml_For_Teampass.sh
# Les fichiers appartiennent à root # Les fichiers appartiennent à root
sudo chown -R root:$app $final_path sudo chown -R root: $final_path
# Sauf les dossiers files et upload
sudo chown -R $app: $final_path/files $final_path/upload
# Restreint l'accès au dossier de backup
sudo chmod 750 $final_path/backups
# Recharge la configuration Nginx #=================================================
sudo service nginx reload # RELOAD NGINX
# Régénère la configuration de SSOwat #=================================================
sudo yunohost app ssowatconf
sudo systemctl reload nginx

View file

@ -1,34 +1,61 @@
#!/bin/bash #!/bin/bash
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script #=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
# Récupère les infos de l'application. source _common.sh
app=$YNH_APP_INSTANCE_NAME
# Source app helpers
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
db_name=$(ynh_app_setting_get $app db_name)
REMOVE_BDD $app # Suppression de la base de donnée et de l'utilisateur associé. #=================================================
# STANDARD REMOVE
#=================================================
# REMOVE THE SQL BDD
#=================================================
SECURE_REMOVE '/var/www/$app' # Suppression du dossier de l'application ynh_mysql_remove_db $db_name $db_name # Suppression de la base de donnée et de l'utilisateur associé.
# Remove the sk.php #=================================================
if [ -e "/etc/teampass/" ]; then # REMOVE THE MAIN DIR OF THE APP
echo "Delete sk.php" #=================================================
sudo rm -r "/etc/teampass/"
fi
REMOVE_NGINX_CONF # Suppression de la configuration nginx ynh_secure_remove "/var/www/$app" # Suppression du dossier de l'application
SECURE_REMOVE '/var/log/$app/' # Suppression des log #=================================================
# REMOVE THE NGINX CONFIGURATION
#=================================================
REMOVE_FPM_CONF # Suppression de la configuration du pool php-fpm ynh_remove_nginx_config # Suppression de la configuration nginx
REMOVE_SYS_USER # Supprime l'user système dédié pour l'application #=================================================
# REMOVE THE PHP-FPM CONFIGURATION
#=================================================
# Régénère la configuration de SSOwat ynh_remove_fpm_config # Suppression de la configuration du pool php-fpm
sudo yunohost app ssowatconf
echo -e "\e[0m" # Restore normal color #=================================================
# SPECIFIC REMOVE
#=================================================
# REMOVE THE SK.PHP FILE
#=================================================
ynh_secure_remove "/etc/teampass"
#=================================================
# GENERIC FINALISATION
#=================================================
# REMOVE DEDICATED USER
#=================================================
ynh_system_user_delete $app

View file

@ -1,57 +1,110 @@
#!/bin/bash #!/bin/bash
# Récupère les infos de l'application. #=================================================
app=$YNH_APP_INSTANCE_NAME # GENERIC STARTING
#=================================================
# MANAGE FAILURE OF THE SCRIPT
#=================================================
# Source app helpers # Exit on command errors and treat unset variables as an error
set -eu
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
if [ ! -e _common.sh ]; then
# Rapatrie le fichier de fonctions si il n'est pas dans le dossier courant
sudo cp ../settings/scripts/_common.sh ./_common.sh
sudo chmod a+rx _common.sh
fi
source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
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)
# The parameter $1 is the uncompressed restore directory location #=================================================
backup_dir=$1/apps/$app # CHECK IF THE APP CAN BE RESTORED
#=================================================
# Restore Nginx sudo yunohost app checkurl "${domain}${path_url}" -a "$app" \
conf=/etc/nginx/conf.d/$domain.d/$app.conf || ynh_die "Path not available: ${domain}${path_url}"
if [ -f $conf ]; then test ! -d $final_path \
echo "There is already a nginx conf file at this path: $conf " >&2 || ynh_die "There is already a directory: $final_path "
ynh_die
fi
sudo cp -a $backup_dir/nginx.conf $conf
# Restore YunoHost parameters #=================================================
sudo cp -a $backup_dir/yunohost/. /etc/yunohost/apps/$app # STANDARD RESTORE STEPS
#=================================================
# RESTORE OF THE NGINX CONFIGURATION
#=================================================
# Restore sources & data ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
sudo cp -a "$backup_dir/sources/." $final_path
#=================================================
# RESTORE OF THE MAIN DIR OF THE APP
#=================================================
ynh_restore_file "$final_path"
#=================================================
# RESTORE OF THE SQL BDD
#=================================================
# Créer la base de donnée et la restaure
db_pwd=$(ynh_app_setting_get $app mysqlpwd) db_pwd=$(ynh_app_setting_get $app mysqlpwd)
db_user=$app ynh_mysql_setup_db $db_name $db_name $db_pwd
ynh_mysql_create_db $db_user $db_user $db_pwd ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
mysql --debug-check -u $db_user -p$db_pwd $db_user < ${backup_dir}/db.sql
# Copy dedicated php-fpm process from backup folder to the right location #=================================================
sudo cp -a $backup_dir/php-fpm.conf /etc/php5/fpm/pool.d/$app.conf # RECREATE OF THE DEDICATED USER
sudo cp -a $backup_dir/php-fpm.ini /etc/php5/fpm/conf.d/20-$app.ini #=================================================
# ADD_SYS_USER # Créer un user système dédié pour l'application ynh_system_user_create $app # Recreate the dedicated user, if not exist
if ! ynh_system_user_exists "$app" # Test l'existence de l'utilisateur
then
sudo useradd -d /var/www/$app --system --user-group $app --shell /usr/sbin/nologin || (echo "Unable to create $app system account" >&2 && false)
fi
# Copie du fichier sk.php #=================================================
sudo mkdir /etc/teampass # RESTORE USER RIGHTS
sudo cp -a $backup_dir/sk.php /etc/teampass/sk.php #=================================================
sudo chown -R root:$app /etc/teampass/sk.php
# Les fichiers appartiennent à root # Les fichiers appartiennent à root
sudo chown -R root:$app $final_path sudo chown -R root: $final_path
# Sauf les dossiers files et upload
sudo chown -R $app: $final_path/files $final_path/upload
# And Reload service #=================================================
sudo service php5-fpm reload # RESTORE OF THE PHP-FPM CONFIGURATION
#=================================================
# Reload webserver ynh_restore_file "/etc/php5/fpm/pool.d/$app.conf"
sudo service nginx reload ynh_restore_file "/etc/php5/fpm/conf.d/20-$app.ini"
#=================================================
# SPECIFIC RESTORE
#=================================================
# RESTORE THE SK.PHP FILE
#=================================================
ynh_restore_file "/etc/teampass/sk.php"
sudo chown -R root:$app "/etc/teampass/sk.php"
#=================================================
# RESTORE CRON FILE
#=================================================
ynh_restore_file "/etc/cron.d/teampass"
#=================================================
# GENERIC FINALISATION
#=================================================
# RELOAD NGINX AND PHP-FPM
#=================================================
sudo systemctl reload php5-fpm
sudo systemctl reload nginx

View file

@ -1,53 +1,93 @@
#!/bin/bash #!/bin/bash
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script #=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
# Récupère les infos de l'application. source _common.sh
app=$YNH_APP_INSTANCE_NAME
# Source app helpers
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
path=$(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)
CHECK_PATH # Vérifie et corrige la syntaxe du path. #=================================================
# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP
#=================================================
SETUP_SOURCE "teampass.tar.gz" # Télécharge la source, décompresse et copie dans $final_path BACKUP_BEFORE_UPGRADE # Backup the current version of the app
ynh_clean_setup () {
BACKUP_FAIL_UPGRADE # restore it if the upgrade fails
}
ynh_abort_if_errors # Active trap pour arrêter le script si une erreur est détectée.
# Delete the install directory. #=================================================
SECURE_REMOVE '$final_path/install' # CHECK THE PATH
#=================================================
# Et copie le fichier de config nginx path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du path.
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
# Modifie les variables dans le fichier de configuration nginx #=================================================
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf # STANDARD UPGRADE STEPS
sudo sed -i "s@__FINALPATH__@$final_path@g" /etc/nginx/conf.d/$domain.d/$app.conf #=================================================
sudo sed -i "s@__NAMETOCHANGE__@$app@g" /etc/nginx/conf.d/$domain.d/$app.conf # DOWNLOAD, CHECK AND UNPACK SOURCE
#=================================================
ADD_SYS_USER # Créer un user système dédié pour l'application ynh_setup_source "$final_path" # Télécharge la source, décompresse et copie dans $final_path
POOL_FPM # Créer le fichier de configuration du pool php-fpm et le configure.
# sudo chown www-data: -R $final_path #=================================================
# sudo chmod 770 -R $final_path # NGINX CONFIGURATION
# sudo find $final_path -type f -print0 | xargs -0 sudo chmod 740 # Applique les permissions sur les fichiers seulement (rwxr-----) #=================================================
# sudo chmod 770 -R $final_path/files $final_path/upload
# sudo chmod a+x $final_path/CsvToXml_For_Teampass.sh ynh_add_nginx_config
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_system_user_create $app # Create the dedicated user, if not exist
#=================================================
# PHP-FPM CONFIGURATION
#=================================================
ynh_add_fpm_config # Créer le fichier de configuration du pool php-fpm et le configure.
#=================================================
# SPECIFIC UPGRADE
#=================================================
# ...
#=================================================
#=================================================
# CREATE A CRON FILE FOR AUTOMATIC BACKUP
#=================================================
echo "0 0 * * 0 $app cd $final_path/backups && php script.backup.php" > /etc/cron.d/teampass
#=================================================
# GENERIC FINALISATION
#=================================================
# SECURING FILES AND DIRECTORIES
#=================================================
# -rw-r--r-- sur les fichiers
sudo find $final_path -type f -print0 | xargs -0 sudo chmod 644
# drwxr-xr-x sur les dossiers
sudo find $final_path -type d -print0 | xargs -0 sudo chmod 755
# Les dossiers files et upload ont besoin d'un droit d'écriture.
sudo chmod 774 -R $final_path/files $final_path/upload
# Le script de conversion csv xml doit être exécutable, au moins par root.
sudo chmod 744 $final_path/CsvToXml_For_Teampass.sh
# Les fichiers appartiennent à root # Les fichiers appartiennent à root
sudo chown -R root: $final_path sudo chown -R root: $final_path
# Sauf les dossiers files et upload
sudo chown -R $app: $final_path/files $final_path/upload
# Restreint l'accès au dossier de backup
sudo chmod 750 $final_path/backups
# Recharge la configuration Nginx #=================================================
sudo service nginx reload # RELOAD NGINX
# Régénère la configuration de SSOwat #=================================================
sudo yunohost app ssowatconf
sudo systemctl reload nginx