mirror of
https://github.com/YunoHost-Apps/teampass_ynh.git
synced 2024-09-03 20:26:37 +02:00
L'upgrade depuis la précédente version a été testé, mais une sauvegarde préalable n'est pas inutile
198 lines
8 KiB
Bash
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
|