mirror of
https://github.com/YunoHost-Apps/teampass_ynh.git
synced 2024-09-03 20:26:37 +02:00
142 lines
6.3 KiB
Bash
142 lines
6.3 KiB
Bash
#!/bin/bash
|
|
|
|
source .fonctions # Charge les fonctions génériques habituellement utilisées dans le script
|
|
|
|
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 ""
|
|
}
|
|
TRAP_ON # Active trap pour arrêter le script si une erreur est détectée.
|
|
|
|
domain=$YNH_APP_ARG_DOMAIN
|
|
path=$YNH_APP_ARG_PATH
|
|
password_admin=$YNH_APP_ARG_PASSWORD
|
|
|
|
app=$YNH_APP_INSTANCE_NAME
|
|
|
|
# Source app helpers
|
|
source /usr/share/yunohost/helpers
|
|
|
|
# Vérifie que les variables ne sont pas vides.
|
|
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_FINALPATH # Vérifie que le dossier de destination n'est pas déjà utilisé.
|
|
|
|
|
|
# Enregistre les infos dans la config YunoHost
|
|
ynh_app_setting_set $app domain $domain
|
|
ynh_app_setting_set $app path $path
|
|
|
|
GENERATE_DB $app # Créer une base de données et un utilisateur dédié au nom de l'app.
|
|
|
|
|
|
# Créer le repertoire de destination et stocke son emplacement.
|
|
sudo mkdir "$final_path"
|
|
ynh_app_setting_set $app final_path $final_path
|
|
|
|
SETUP_SOURCE "teampass.tar.gz" # Télécharge la source, décompresse et copie dans $final_path
|
|
|
|
# Delete the install directory.
|
|
# 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
|
|
|
|
|
|
# Modifie les variables dans le fichier de configuration nginx
|
|
sudo sed -i "s@__PATH__@$path@g" /etc/nginx/conf.d/$domain.d/$app.conf
|
|
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
|
|
POOL_FPM # Créer le fichier de configuration du pool php-fpm et le configure.
|
|
|
|
# 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
|
|
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@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_user -p$db_pwd $db_user < ../conf/populate.sql
|
|
|
|
# Remplacement des variables dans les fichier settings.php et sk.php
|
|
sed -i "s@__DBUSER__@$db_user@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
|
|
|
|
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
|
|
|
|
# Et copie des fichiers à leurs emplacements.
|
|
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
|
|
STORE_MD5_CONFIG "settings.php" "$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/includes/libraries/csrfp/js/csrfprotector.js@g" $final_path/includes/libraries/csrfp/libs/csrfp.config.php # Renseigne l'adresse de csrfprotector.js
|
|
|
|
# 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_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');"
|
|
# Creation du repertoire personnel
|
|
id_user=$(mysql -u $db_user -p$db_pwd $db_user -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);"
|
|
|
|
((id++))
|
|
done
|
|
|
|
|
|
# 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
|
|
sudo chown -R root:$app $final_path
|
|
|
|
# Recharge la configuration Nginx
|
|
sudo service nginx reload
|
|
# Régénère la configuration de SSOwat
|
|
sudo yunohost app ssowatconf
|