#!/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