diff --git a/conf/generate_password_hash.py b/conf/generate_password_hash.py index 6d45018..4778e8c 100644 --- a/conf/generate_password_hash.py +++ b/conf/generate_password_hash.py @@ -1,6 +1,7 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- # Permet de générer le hash pour le password +#Plus utilisé depuis la MAJ 0.92~ynh3 avec LDAP import sys path=sys.argv[2] sys.path.append(path) diff --git a/hooks/post_user_create b/hooks/post_user_create new file mode 100644 index 0000000..472d734 --- /dev/null +++ b/hooks/post_user_create @@ -0,0 +1,52 @@ +#!/bin/bash +# Source YunoHost helpers +source /usr/share/yunohost/helpers +#reste à insérer la gestion des répertoires + +app=calibreweb +username=$1 +mail=$2 +pass_clear=$3 +final_path=$(ynh_app_setting_get $app final_path) + +get_db() { + # $1 = nom de la table + # cette ligne de malade : + # 1/ Recupere le schém de la table user + # 2/ En extrait les noms de champs (en prenant le premier mot après la tabulation) + # 3/ en supprime les clé UNIQUE, PRIMARY et CHECK dont on ne veut pas + # 4/ remplace la liste avec retour à la ligne par une liste séparé par des virgules + # 5/ Enlève la dernière virgule + sqlite3 ./app.db ".schema $1" | awk '/\t/ {print $1}' | grep -v -e "UNIQUE" -e "PRIMARY" -e "CHECK" -e "FOREIGN" | awk '{printf "%s, ", $0}' | head -c -2 +} + +###################################### +#1 get admin user and id from database +###################################### +#we take the admin user as we're sure there is at least this one + +admin=$(ynh_app_setting_get $app admin) +echo "admin : $admin" +admin_id=$(sqlite3 $final_path/app.db "SELECT id FROM user WHERE nickname='$admin'") + +###################################### +#get user table structure +###################################### +table_schema=$(get_db "user") + +###################################### +#Build new entry for user +###################################### +insert_user=$table_schema +insert_user="${insert_user/id/null}" #so that a new entry is created +insert_user="${insert_user/nickname/\'$username\'}" +insert_user="${insert_user/role/0}" #standard role +pass_hash=$(python /etc/yunohost/apps/$app/conf/generate_password_hash.py "$pass_clear" $final_path/vendor) +insert_user="${insert_user/password/\$pass_hash}" #we get the same pass even if it's not use with LDAP, ones never knows... +insert_user="${insert_user/email/\'$mail\'}" + +####################################### +# Insert New entry in database +####################################### + +sqlite3 $final_path/app.db "INSERT INTO user ($table_schema) SELECT $insert_user FROM user WHERE ID = $admin_id;" diff --git a/hooks/post_user_delete b/hooks/post_user_delete new file mode 100644 index 0000000..94218da --- /dev/null +++ b/hooks/post_user_delete @@ -0,0 +1,37 @@ +#!/bin/bash +# Source YunoHost helpers +source /usr/share/yunohost/helpers + +app=calibreweb +username=$1 +final_path=$(ynh_app_setting_get $app final_path) +del_tables_user="book_read_link remote_auth_token downloads shelf bookmark" +del_tables_shelf="book_shelf_link" + +del_id() { + #$1=table + #$2=id_type + #$3=id + + sqlite3 $final_path/app.db "DELETE FROM $1 WHERE $2='$3'" +} + + +user_id=$(sqlite3 $final_path/app.db "SELECT id from user WHERE nickname='$username'") +shelf_id=$(sqlite3 $final_path/app.db "SELECT id from shelf WHERE user_id='$user_id'") + + +#Delete all entry with dependencies for user +for i in $del_tables_shelf +do + echo "$i" + del_id "$i" "shelf" $shelf_id +done +for i in $del_tables_user +do + echo "$i" + del_id "$i" "user_id" $user_id +done + +#delete user +del_id "user" "id" $user_id \ No newline at end of file diff --git a/manifest.json b/manifest.json index 3389eab..5fcfa42 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Calibre-web for Yunohost", "fr": "Calibre-web pour Yunohost" }, - "version": "0.91~ynh2", + "version": "0.92~ynh3", "url": "https://github.com/janeczku/calibre-web", "license": "free", "maintainer": { @@ -14,7 +14,7 @@ "email": "misterl56@hotmail.com" }, "requirements": { - "yunohost": ">= 2.7.14" + "yunohost": ">= 3.0.0" }, "multi_instance": true, "services": [ @@ -61,18 +61,18 @@ }, { "name": "language", - "optional": true, + "optional": true, "ask": { "en": "Select a default language (you may change it later in the app)", "fr": "Choisissez une langue par défaut (vous pourrez la changer ultérieurement dans l'application)" }, - "choices": [ "fr", "en", "es", "de"], + "choices": [ "fr", "en", "es", "de"], "default": "fr" }, { "name": "upload", - "type":"boolean", - "optional": true, + "type":"boolean", + "optional": true, "ask": { "en": "Do you want to allow uploading of books (you may change it later in the app)?", "fr": "Voulez vous autoriser l'upload de livres (vous pourrez le changer ultérieurement dans l'application)?" @@ -81,22 +81,13 @@ }, { "name": "public_library", - "type":"boolean", - "optional": true, + "type":"boolean", + "optional": true, "ask": { "en": "Do you want to allow access to the library to all Yunohost users?", "fr": "Voulez vous autoriser l'accès à la bibliothèque à tous les utilisateurs Yunohost?" }, "default": false - }, - { - "name": "password", - "type": "password", - "ask": { - "en": "Set the administrator password", - "fr": "Définissez le mot de passe administrateur" - }, - "example": "Averystrongpassword" } ] } diff --git a/scripts/install b/scripts/install index a2e1473..07699af 100755 --- a/scripts/install +++ b/scripts/install @@ -25,9 +25,6 @@ path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN is_public=$YNH_APP_ARG_IS_PUBLIC language=$YNH_APP_ARG_LANGUAGE -ynh_print_OFF -pass=$YNH_APP_ARG_PASSWORD -ynh_print_ON app=$YNH_APP_INSTANCE_NAME upload=$6 public_library=$7 @@ -161,7 +158,7 @@ chown -R $app:$app /var/log/$app ynh_print_info "Setting up database and settings" #we need to start and stop the service so that initial app.db file is created and that we can set default data ynh_systemd_action -l "INFO in server: Starting Gevent server" -#systemctl start $app + #sleep required on low spec like raspberryPi sleep 2s ynh_systemd_action -a stop @@ -175,11 +172,11 @@ conf="\"UPDATE user SET $(. <(echo -E echo $(<../conf/init_calibre_db_user))) WH eval sqlite3 $final_path/app.db "$conf" #mise à jour du mot de passe (je ne sais pas pourquoi, je n'arrive pas à l'intégrer dans le fichier de conf, pb de " et ') -ynh_print_OFF +#ynh_print_OFF #had to set it on two lines or package_linter cries like a baby... -pass=$(python ../conf/generate_password_hash.py "$pass" $final_path/vendor) -sqlite3 $final_path/app.db "UPDATE user SET password='$pass' WHERE ID=1" -ynh_print_ON +#pass=$(python ../conf/generate_password_hash.py "$pass" $final_path/vendor) +#sqlite3 $final_path/app.db "UPDATE user SET password='$pass' WHERE ID=1" +#ynh_print_ON #================================================= # SECURE FILES AND DIRECTORIES