1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/teampass_ynh.git synced 2024-09-03 20:26:37 +02:00
teampass_ynh/scripts/install
Maniack Crudelis a11a88dfbf 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
2017-08-05 23:16:02 +02:00

198 lines
8 KiB
Bash

#!/bin/bash
#=================================================
# GENERIC STARTING
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
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.
# Pas de nettoyage supplémentaire nécessaire ici...
echo ""
}
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
path_url=$YNH_APP_ARG_PATH
password_admin=$YNH_APP_ARG_PASSWORD
app=$YNH_APP_INSTANCE_NAME
#=================================================
# CHECK IF THE APP CAN BE INSTALLED WITH THIS ARGS
#=================================================
path_url=$(ynh_normalize_url_path $path_url) # Vérifie et corrige la syntaxe du path.
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é.
#=================================================
# STORE SETTINGS FROM MANIFEST
#=================================================
ynh_app_setting_set $app domain $domain
ynh_app_setting_set $app path $path_url
#=================================================
# 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
#=================================================
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
# Delete the install directory.
# SECURE_REMOVE '$final_path/install'
#=================================================
# NGINX CONFIGURATION
#=================================================
ynh_add_nginx_config
#=================================================
# CREATE DEDICATED USER
#=================================================
ynh_system_user_create $app # Créer un utilisateur système dédié à l'app
#=================================================
# 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
sudo cp ../conf/mdphash.php $final_path
# Remplacement des variables dans le fichier sql
if [ $(echo $LANG | cut -c1-2) == "fr" ]
then
langue=french
folders=partagés # Le dossier partagé est actuellement désactivé par défaut. Encore un bug...
roles=utilisateurs
else
langue=english
folders=shared
roles=users
fi
sed -i "s@__FINALPATH__@$final_path@g" ../conf/populate.sql
sed -i "s@__DOMAIN__@$domain@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@__ROLES__@$roles@g" ../conf/populate.sql
sed -i "s@__VERSION__@$(sed -n 3p $final_path/changelog.md)@g" ../conf/populate.sql
sed -i "s@__TIMEZONE__@$(cat /etc/timezone)@g" ../conf/populate.sql
sed -i "s@__BCRYPT_MDP__@$(php ../conf/mdphash.php $password_admin)@g" ../conf/populate.sql
sed -i "s@__LANG__@$langue@g" ../conf/populate.sql
# Enregistre les infos dans la config YunoHost
ynh_app_setting_set $app langue $langue
# Import du fichier 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
sed -i "s@__DBUSER__@$db_name@g" ../conf/settings.php
sed -i "s@__DBPWD__@$db_pwd@g" ../conf/settings.php
sed -i "s@__FINALPATH__@$final_path@g" ../conf/settings.php
path_sk_file=/etc/teampass/
sudo mkdir $path_sk_file
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')
sed -i "s@__SALTKEY__@$saltkey@g" ../conf/sk.php
#=================================================
# COPY THE FILES
#=================================================
sudo cp ../conf/sk.php $path_sk_file/sk.php
sudo chown -R root:$app $path_sk_file
sudo chmod 750 $path_sk_file
sudo cp ../conf/settings.php $final_path/includes/config/settings.php
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
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_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
teampass_users=$(ldapsearch -h localhost -b ou=users,dc=yunohost,dc=org -x objectClass=mailAccount uid | grep uid: | sed 's/uid: //' | xargs)
id=1
for teampassuser in $teampass_users
do
real_password=$(ynh_string_random) # Génère un mot de passe aléatoire
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)
# Creation de l'utilisateur
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
id_user=$(mysql -u $db_name -p$db_pwd $db_name -se "SELECT id from teampass_users where login='$teampassuser';")
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++))
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
#=================================================
# Les fichiers appartiennent à root
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
#=================================================
# RELOAD NGINX
#=================================================
sudo systemctl reload nginx