From 61378665fee1577f826a2609f6e27fed75835999 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 18 Dec 2018 21:29:30 +0100 Subject: [PATCH 01/45] README update --- README.md | 44 +++++++++++++++++--------------------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 85ea94c..2367ae9 100644 --- a/README.md +++ b/README.md @@ -12,30 +12,20 @@ Of course, once uninstalled, everything get back to normal. TODO : ------ -[X] move to 2.0 - -[ ] check nginx conf - -[X] insert clean index.php - -[ ] insert cron in conf - -[ ] insert symlink for langages in /lang - -[X] check dependency for lang - -[X] remove php-geoip - -[ ] remove new locale on remove - -[X] Why the flag don't show?? - -[X] Implement Admin panel - -[X] Add backup restore script - -[ ] check checksum on download - -[ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) - -[ ] cron job to remove redirections (0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) conflict with SSOWAT + non-public app +- [X] move to 2.0 +- [ ] check nginx conf +- [X] insert clean index.php +- [ ] insert cron in conf +- [ ] insert symlink for langages in /lang +- [X] check dependency for lang +- [X] remove php-geoip +- [ ] remove new locale on remove +- [X] Why the flags don't show?? +- [X] Implement Admin panel +- [X] Add backup restore script +- [ ] check checksum on download +- [ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) +- [ ] cron job to remove redirections (0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) conflict with SSOWAT + non-public app +- [ ] package_check integration +- [ ] Multiinstance +- [ ] LDAP From b8ec4d75958be0935e31d3eef547669fe8cd9e6d Mon Sep 17 00:00:00 2001 From: Krakinou Date: Fri, 21 Dec 2018 19:58:23 +0100 Subject: [PATCH 02/45] Update with check_process & package_linter --- .project | 11 +++++++++++ check_process | 38 ++++++++++++++++++++++++++++++++++++++ scripts/upgrade | 40 ++++++++++++++++++++++++++++++++++++++-- 3 files changed, 87 insertions(+), 2 deletions(-) create mode 100644 .project create mode 100644 check_process diff --git a/.project b/.project new file mode 100644 index 0000000..24d3b92 --- /dev/null +++ b/.project @@ -0,0 +1,11 @@ + + + poubelle_ynh + + + + + + + + diff --git a/check_process b/check_process new file mode 100644 index 0000000..fd21e38 --- /dev/null +++ b/check_process @@ -0,0 +1,38 @@ +;; Complete Test +# Comment ignored + ; Manifest + domain="domain.tld" (DOMAIN) + path="/poubelle" (PATH) + admin="john" (USER) + is_public=0 (PUBLIC|public=1|private=0) + password="password" + ; Checks + pkg_linter=1 + setup_sub_dir=1 + setup_root=1 + setup_private=1 + setup_public=1 + upgrade=1 + backup_restore=1 + multi_instance=0 + incorrect_path=1 + port_already_use=0 (XXXX) + change_url=0 +;;; Levels + Level 1=auto + Level 2=auto + Level 3=auto + Level 4=0 + Level 5=auto + Level 6=auto + Level 7=auto + Level 8=0 + Level 9=0 + Level 10=0 +;;; Options +Email= +Notification=none +;;; Upgrade options +# ; commit=65c382d138596fcb32b4c97c39398815a1dcd4e8 + name=Name of this previous version + manifest_arg=domain=DOMAIN&path=PATH&admin=USER&password=pass&is_public=0& \ No newline at end of file diff --git a/scripts/upgrade b/scripts/upgrade index 65cd665..5c7e84e 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -7,19 +7,46 @@ #================================================= source _common.sh source /usr/share/yunohost/helpers + + #================================================= # LOAD SETTINGS #================================================= app=$YNH_APP_INSTANCE_NAME - domain=$(ynh_app_setting_get $app domain) path_url=$(ynh_app_setting_get $app path) admin=$(ynh_app_setting_get $app admin) final_path=$(ynh_app_setting_get $app final_path) db_name=$(ynh_app_setting_get $app db_name) + +#================================================= +# BACKUP BEFORE UPGRADE THEN ACTIVE TRAP +#================================================= + +# Backup the current version of the app +ynh_backup_before_upgrade +ynh_clean_setup () { + # restore it if the upgrade fails + ynh_restore_upgradebackup +} +# Exit if an error occurs during the execution of the script +ynh_abort_if_errors + + +#================================================= +# CHECK THE PATH +#================================================= + +# Normalize the URL path syntax +path_url=$(ynh_normalize_url_path $path_url) + + +#================================================= #check for matlink's version +#================================================= + cat /etc/yunohost/apps/$app/status.json | grep "matlink" if [[ $?==0 ]]; then #add missing info in settings @@ -61,6 +88,11 @@ if [[ $?==0 ]]; then fi + +#================================================= +# NGINX CONFIGURATION +#================================================= + #change nginx.conf as per https://forum.yunohost.org/t/need-help-on-nginx-conf-cannot-access-resources/6342 ynh_replace_string "alias $finalpath/www/ ;" "alias $finalpath/ ;" /etc/yunohost/$domain.d/$app.conf ynh_replace_string "index index.php;" "index www/ndex.php;" /etc/yunohost/$domain.d/$app.conf @@ -68,6 +100,8 @@ ynh_replace_string "index index.php;" "index www/ndex.php;" /etc/yunohost/$domai #correct template name in index.php ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php + + #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement db_pass=$(ynh_app_setting_get $app mysqlpwd) if [ -z $db_pass]; then @@ -106,7 +140,9 @@ chown -R www-data:www-data $final_path #sudo echo "$cronline" | sudo tee -a /etc/cron.d/emailpoubelle #sudo chmod 644 /etc/cron.d/emailpoubelle -# Restart services +#================================================= +# RELOAD SERVICES +#================================================= systemctl restart php7.0-fpm systemctl reload nginx systemctl reload postfix From 5749ece16ef9040487d575666acb7eb6d681145b Mon Sep 17 00:00:00 2001 From: Krakinou Date: Fri, 21 Dec 2018 20:11:59 +0100 Subject: [PATCH 03/45] correct check_process --- check_process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_process b/check_process index fd21e38..e0d2ab2 100644 --- a/check_process +++ b/check_process @@ -4,7 +4,7 @@ domain="domain.tld" (DOMAIN) path="/poubelle" (PATH) admin="john" (USER) - is_public=0 (PUBLIC|public=1|private=0) + is_public=1 (PUBLIC|public=1|private=0) password="password" ; Checks pkg_linter=1 From dedfae73e8f171a754caeac777cb23b1cc073769 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:10:34 +0100 Subject: [PATCH 04/45] Postfix & sources Use clean postfix regen #6 Use ynh_setup_source --- README.md | 1 + conf/app.src | 3 + manifest.json | 12 +- scripts/backup | 1 - scripts/install | 25 +- scripts/remove | 6 +- scripts/restore | 5 +- scripts/upgrade | 75 ++- .../hooks/conf_regen/98-postfix_emailpoubelle | 42 ++ src/.gitignore | 9 - src/CHANGELOG.md | 66 --- src/README.md | 44 -- src/bin/migrate-0.3-1.0.php | 80 --- src/conf-dist.php | 98 ---- src/emailPoubelle.php | 373 ------------- src/emailPoubelleAdmin.php | 174 ------- src/lang/fr/LC_MESSAGES/messages.mo | Bin 8200 -> 0 bytes src/lang/fr/LC_MESSAGES/messages.po | 369 ------------- src/lang/fr/LC_MESSAGES/messages_old.po | 312 ----------- src/lang/it/LC_MESSAGES/messages.mo | Bin 8051 -> 0 bytes src/lang/it/LC_MESSAGES/messages.po | 399 -------------- src/lang/messages.pot | 383 -------------- src/lang/note.txt | 11 - src/lib/blk.png | Bin 944 -> 0 bytes src/lib/drapaux.gif | Bin 35432 -> 0 bytes src/lib/en.png | Bin 1078 -> 0 bytes src/lib/ep_function.php | 492 ------------------ src/lib/ep_header.php | 67 --- src/lib/fr.png | Bin 914 -> 0 bytes src/lib/it.png | Bin 901 -> 0 bytes src/lib/status0.png | Bin 360 -> 0 bytes src/lib/status3.png | Bin 358 -> 0 bytes src/lib/status5.png | Bin 355 -> 0 bytes src/lib/sup.png | Bin 311 -> 0 bytes src/var/aliasdeny.txt | 22 - src/var/blacklist.txt | 7 - src/www/admin.php | 197 ------- src/www/index.php | 36 -- src/www/template-exemple/ai1.png | Bin 116 -> 0 bytes src/www/template-exemple/ai2.png | Bin 116 -> 0 bytes src/www/template-exemple/ai3.png | Bin 196 -> 0 bytes src/www/template-exemple/ai4.png | Bin 195 -> 0 bytes src/www/template-exemple/ai5.png | Bin 183 -> 0 bytes src/www/template-exemple/ai6.png | Bin 136 -> 0 bytes src/www/template-exemple/ai7.png | Bin 137 -> 0 bytes src/www/template-exemple/ai8.png | Bin 137 -> 0 bytes src/www/template-exemple/hd.jpg | Bin 68543 -> 0 bytes src/www/template-exemple/html5-ie.js | 10 - src/www/template-exemple/image-1.png | Bin 270 -> 0 bytes src/www/template-exemple/img1.png | Bin 8337 -> 0 bytes src/www/template-exemple/img2.png | Bin 7656 -> 0 bytes src/www/template-exemple/img3.png | Bin 8434 -> 0 bytes src/www/template-exemple/img4.png | Bin 5672 -> 0 bytes src/www/template-exemple/img5.png | Bin 7064 -> 0 bytes src/www/template-exemple/img6.png | Bin 8533 -> 0 bytes src/www/template-exemple/jabz-logo.png | Bin 1139 -> 0 bytes src/www/template-exemple/jonas-jacek.png | Bin 1694 -> 0 bytes src/www/template-exemple/readme.txt | 34 -- src/www/template-exemple/style.css | 442 ---------------- 59 files changed, 108 insertions(+), 3687 deletions(-) create mode 100644 conf/app.src create mode 100644 sources/hooks/conf_regen/98-postfix_emailpoubelle delete mode 100644 src/.gitignore delete mode 100644 src/CHANGELOG.md delete mode 100644 src/README.md delete mode 100644 src/bin/migrate-0.3-1.0.php delete mode 100644 src/conf-dist.php delete mode 100644 src/emailPoubelle.php delete mode 100644 src/emailPoubelleAdmin.php delete mode 100644 src/lang/fr/LC_MESSAGES/messages.mo delete mode 100644 src/lang/fr/LC_MESSAGES/messages.po delete mode 100644 src/lang/fr/LC_MESSAGES/messages_old.po delete mode 100644 src/lang/it/LC_MESSAGES/messages.mo delete mode 100644 src/lang/it/LC_MESSAGES/messages.po delete mode 100644 src/lang/messages.pot delete mode 100644 src/lang/note.txt delete mode 100644 src/lib/blk.png delete mode 100644 src/lib/drapaux.gif delete mode 100644 src/lib/en.png delete mode 100644 src/lib/ep_function.php delete mode 100644 src/lib/ep_header.php delete mode 100644 src/lib/fr.png delete mode 100644 src/lib/it.png delete mode 100644 src/lib/status0.png delete mode 100644 src/lib/status3.png delete mode 100644 src/lib/status5.png delete mode 100644 src/lib/sup.png delete mode 100644 src/var/aliasdeny.txt delete mode 100644 src/var/blacklist.txt delete mode 100644 src/www/admin.php delete mode 100644 src/www/index.php delete mode 100644 src/www/template-exemple/ai1.png delete mode 100644 src/www/template-exemple/ai2.png delete mode 100644 src/www/template-exemple/ai3.png delete mode 100644 src/www/template-exemple/ai4.png delete mode 100644 src/www/template-exemple/ai5.png delete mode 100644 src/www/template-exemple/ai6.png delete mode 100644 src/www/template-exemple/ai7.png delete mode 100644 src/www/template-exemple/ai8.png delete mode 100644 src/www/template-exemple/hd.jpg delete mode 100644 src/www/template-exemple/html5-ie.js delete mode 100644 src/www/template-exemple/image-1.png delete mode 100644 src/www/template-exemple/img1.png delete mode 100644 src/www/template-exemple/img2.png delete mode 100644 src/www/template-exemple/img3.png delete mode 100644 src/www/template-exemple/img4.png delete mode 100644 src/www/template-exemple/img5.png delete mode 100644 src/www/template-exemple/img6.png delete mode 100644 src/www/template-exemple/jabz-logo.png delete mode 100644 src/www/template-exemple/jonas-jacek.png delete mode 100644 src/www/template-exemple/readme.txt delete mode 100644 src/www/template-exemple/style.css diff --git a/README.md b/README.md index 2367ae9..d3a0aec 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Of course, once uninstalled, everything get back to normal. TODO : ------ + - [X] move to 2.0 - [ ] check nginx conf - [X] insert clean index.php diff --git a/conf/app.src b/conf/app.src new file mode 100644 index 0000000..9c13023 --- /dev/null +++ b/conf/app.src @@ -0,0 +1,3 @@ +SOURCE_URL=https://github.com/kepon85/emailPoubelle.php/archive/d9f444c7687e3d4597d6d95c33fa96fd1332c1de.zip +SOURCE_SUM=3ab236748b1b912c03ddf4e09c4e7f0304467adadc0012c9b8f434353fe26e46 +SOURCE_FORMAT=zip \ No newline at end of file diff --git a/manifest.json b/manifest.json index eb310aa..5e21de5 100644 --- a/manifest.json +++ b/manifest.json @@ -7,7 +7,7 @@ "fr": "Créez des adresses email jetables qui redirigent les mails vers votre adresse réelle" }, "url": "https://framagit.org/kepon/emailPoubellePhp/", - "version": "2.0~ynh3", + "version": "2.0~ynh4", "license": "Beerware", "maintainer": { "name": "krakinou", @@ -63,13 +63,13 @@ "example": "AveryStrongPassword" }, { - "name": "public_site", + "name": "is_public", + "type": "boolean", "ask": { - "en": "Should this application be public ?", - "fr": "Est-ce que cette application doit être visible publiquement ?" + "en": "Is it a public application?", + "fr": "Est-ce une application publique ?" }, - "choices": ["Yes", "No"], - "default": "No" + "default": false } ] } diff --git a/scripts/backup b/scripts/backup index 3273ec1..9276c92 100644 --- a/scripts/backup +++ b/scripts/backup @@ -62,5 +62,4 @@ ynh_backup "/etc/cron.d/$app" # BACKUP POSTFIX & ALIASES #================================================= -ynh_backup $postfix ynh_backup /etc/aliases diff --git a/scripts/install b/scripts/install index 72d2acd..87bad26 100644 --- a/scripts/install +++ b/scripts/install @@ -66,8 +66,10 @@ locale-gen #INSTALL SOURCES #=============================================== # Copy source files -sudo mkdir -p $final_path -sudo cp -R ../src/* $final_path + +ynh_print_info "Downloading sources to $final_path" +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" sudo cp ../conf/index_source.php $final_path/www/index.php ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php @@ -106,9 +108,9 @@ sudo chmod o-r $final_path/conf.php ynh_mysql_create_db $db_user $db_user $db_pwd #setting postfix to use virtual aliases file -sudo cp $postfix $postfix.emailpoubelle.bak #backup it eventually if that causes some issues -ynh_replace_string "^virtual_alias_maps" "#virtual_alias_maps" $postfix -echo "virtual_alias_maps = hash:$final_path/var/virtual" | sudo tee -a $postfix +# Add postfix configuration hook and regen postfix conf +cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ +yunohost service regen-conf postfix #create the virtual aliases file sudo touch $final_path/var/virtual @@ -133,12 +135,19 @@ sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf # Create a dedicated nginx config #ynh_add_nginx_config -# If app is public, add url to SSOWat conf as skipped_uris -if [ "$is_public" = "Yes" ]; + +#================================================= +# SETUP SSOWAT +#================================================= + +# Make app public if necessary +if [ $is_public -eq 1 ] then -sudo yunohost app setting $app skipped_uris -v "/" + # unprotected_uris allows SSO credentials to be passed anyway. + ynh_app_setting_set $app unprotected_uris "/" fi + #A verifier? A integrer dans dépendances? #adding php-cli for cron sudo apt-get update -qq diff --git a/scripts/remove b/scripts/remove index 6bee0d0..b61f02c 100644 --- a/scripts/remove +++ b/scripts/remove @@ -21,10 +21,8 @@ sudo rm -f /etc/nginx/conf.d/$domain.d/emailpoubelle.conf #removing aliases sudo sed -i "/devnull:\/dev\/null/d" /etc/aliases sudo newaliases -#efface le nouvel virtual alias -sudo sed -i "/virtual_alias_maps = hash:\/var\/www\/emailpoubelle\/var\/virtual/d" $postfix -#reactive le nouveau -ynh_replace_string "^#virtual_alias_maps" "virtual_alias_maps" $postfix +# Remove hook for postfix conf +ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" #remove cronjob sudo rm -f /etc/cron.d/emailpoubelle diff --git a/scripts/restore b/scripts/restore index 2fe1d04..10e4a46 100644 --- a/scripts/restore +++ b/scripts/restore @@ -1,5 +1,5 @@ #!/bin/bash - + #================================================= # GENERIC START #================================================= @@ -81,8 +81,9 @@ locale-gen #================================================= # RESTORE POSTFIX ALIASES #================================================= +cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ +yunohost service regen-conf postfix -ynh_restore_file $postfix #================================================= # RESTORE THE CRON FILE diff --git a/scripts/upgrade b/scripts/upgrade index 5c7e84e..a25f670 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -46,47 +46,47 @@ path_url=$(ynh_normalize_url_path $path_url) #================================================= #check for matlink's version #================================================= - -cat /etc/yunohost/apps/$app/status.json | grep "matlink" -if [[ $?==0 ]]; then +#deprecated - not maintained for more than a year... +#cat /etc/yunohost/apps/$app/status.json | grep "matlink" +#if [[ $?==0 ]]; then #add missing info in settings - final_path=/var/www/$app - db_name=emailPoubelle - ynh_app_setting_set $app db_name $db_name - ynh_app_setting_set $app final_path $final_path +# final_path=/var/www/$app +# db_name=emailPoubelle +# ynh_app_setting_set $app db_name $db_name +# ynh_app_setting_set $app final_path $final_path #install geoip dependencies - ynh_install_app_dependencies $pkg_dependencies +# ynh_install_app_dependencies $pkg_dependencies #install locale packages - for i in $lang ; do - ynh_replace_string "# $i" "$i" /etc/locale.gen - done - locale-gen +# for i in $lang ; do +# ynh_replace_string "# $i" "$i" /etc/locale.gen +# done +# locale-gen #change folder locale => lang as per src2.0 - rm -rf $final_path/locale - mkdir -p $final_path/lang +# rm -rf $final_path/locale +# mkdir -p $final_path/lang #add new index.php - cp ../conf/index_source.php $final_path/www/index.php +# cp ../conf/index_source.php $final_path/www/index.php #switch from previous (modified) conf.php to new one (emailpoubelle original) - cp ../src/conf-dist.php $final_path/conf-dist.new.php +# cp ../src/conf-dist.php $final_path/conf-dist.new.php #insert domain in line 24, DB in line 31, DBUSER in line 32, etc. - rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DOMAIN',") - sed -i "24s/.*/${rep}/" $final_path/conf-dist.new.php - rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DB',") - sed -i "31s/.*/${rep}/" $final_path/conf-dist.new.php - rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DBUSER',") - sed -i "32s/.*/${rep}/" $final_path/conf-dist.new.php - rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DBPASS',") - sed -i "33s/.*/${rep}/" $final_path/conf-dist.new.php +# rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DOMAIN',") +# sed -i "24s/.*/${rep}/" $final_path/conf-dist.new.php +# rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DB',") +# sed -i "31s/.*/${rep}/" $final_path/conf-dist.new.php +# rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DBUSER',") +# sed -i "32s/.*/${rep}/" $final_path/conf-dist.new.php +# rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DBPASS',") +# sed -i "33s/.*/${rep}/" $final_path/conf-dist.new.php #replace old conf and process with install command - mv $final_path/conf.php $final_path/conf.php.old - mv $final_path/conf-dist.new.php $final_path/conf.php - ynh_replace_string "define('DB', 'sqlite:'" "//define('DB', 'sqlite:'" $final_path/conf.php - ynh_replace_string "define('ALIASLIMITBYMAIL" "//define('ALIASLIMITBYMAIL" $final_path/conf.php - #setting conf file not world-readable (dude, there is a plain-text password !) - sudo chmod o-r $final_path/conf.php +# mv $final_path/conf.php $final_path/conf.php.old +# mv $final_path/conf-dist.new.php $final_path/conf.php +# ynh_replace_string "define('DB', 'sqlite:'" "//define('DB', 'sqlite:'" $final_path/conf.php +# ynh_replace_string "define('ALIASLIMITBYMAIL" "//define('ALIASLIMITBYMAIL" $final_path/conf.php +# #setting conf file not world-readable (dude, there is a plain-text password !) +# sudo chmod o-r $final_path/conf.php -fi +#fi #================================================= @@ -101,7 +101,6 @@ ynh_replace_string "index index.php;" "index www/ndex.php;" /etc/yunohost/$domai ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php - #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement db_pass=$(ynh_app_setting_get $app mysqlpwd) if [ -z $db_pass]; then @@ -112,15 +111,9 @@ if [ -z $db_pass]; then fi # Copy source files -cp -a ../src/bin/. $final_path/bin -cp -a ../src/lib/. $final_path/lib -cp -a ../src/lang/. $final_path/lang -cp -a ../src/www/. $final_path/www -cp ../src/emailPoubelle.php $final_path/emailPoubelle.php -cp ../src/emailPoubelleAdmin.php $final_path/emailPoubelleAdmin.php -cp ../src/README.md $final_path/README.md -cp ../src/CHANGELOG.md $final_path/CHANGELOG.md -cp ../src/conf-dist.php $final_path/conf-dist.php +ynh_print_info "Downloading sources to $final_path" +# Download, check integrity, uncompress and patch the source from app.src +ynh_setup_source "$final_path" cp ../conf/index_source.php $final_path/www/index.php test -e $final_path/template-exemple if [[ ! $? -eq 0 ]]; then diff --git a/sources/hooks/conf_regen/98-postfix_emailpoubelle b/sources/hooks/conf_regen/98-postfix_emailpoubelle new file mode 100644 index 0000000..39ac8ac --- /dev/null +++ b/sources/hooks/conf_regen/98-postfix_emailpoubelle @@ -0,0 +1,42 @@ +#!/bin/bash + +set -e + +do_pre_regen() { + pending_dir=$1 + + # Patch postfix conf + postfix_main_cf="${pending_dir}/../postfix/etc/postfix/main.cf" + + # FIXME : check this file actually exists to not crash when only running this + # hook alone + + sudo sed -e "s@^alias_maps\s*=\s*\(.*\)@alias_maps = \1,hash:/var/lib/mailman/data/aliases@"\ + -e "s@^virtual_alias_maps\s*=\s*\(.*\)@virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman,\1@"\ + -i $postfix_main_cf + +} + +do_post_regen() { + + regen_conf_files=$1 + +} + +FORCE=${2:-0} +DRY_RUN=${3:-0} + +case "$1" in + pre) + do_pre_regen $4 + ;; + post) + do_post_regen $4 + ;; + *) + echo "hook called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +exit 0 \ No newline at end of file diff --git a/src/.gitignore b/src/.gitignore deleted file mode 100644 index e13ab03..0000000 --- a/src/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -/postfix -virtual -virtual.db -checkupdate -conf.php -test* -var/database* -var/.htaccess -devToProd.sh diff --git a/src/CHANGELOG.md b/src/CHANGELOG.md deleted file mode 100644 index 4bc5219..0000000 --- a/src/CHANGELOG.md +++ /dev/null @@ -1,66 +0,0 @@ -## X (future) - - - support postfix-mysql (not plain text virtual file) - - javascript checkupgrade in admin page - -## 2.0 (2018-11) - - - Internationnalisation, traduction possible (fichier source dans lang/messages.pot) - - Traduction anglais / français (merci à https://github.com/matlink pour l'anglais) - -## 1.4 (2018-03-19) - - - Interface admin avec stats, top user, possibilité de nettoyer, blacklister... - -## 1.2 (2018-03-19) - - - Ne pas permettre la création d'un alias depuis un alias - - Limiter le nombre d'alias possible - -## 1.0.1 (2014-01-06) - -Bugfixes: - - - fixe ListeAlias no send email if error - -## 1.0 (2013-10-02) - -Features: - - - add database with PDO (remove plain text) - support mysql, sqlite, postgresql... - - add multi-domain support - - add memory email (with cookies) - - add life for alias (optional) - - add comment for alias (optional) - - add template for example - - add javascript in form (noscript compatible) - - add cron for expir life email - - add maintenance mode - - add basic form anti-spam - - add disable/enable alias function - - pass UTF-8 encode - -## 0.3 (2013-08-08) (without database) - - - add blacklist.txt regex - - add function "alias list" - - add shell statistique script - - add readme - -## 0.2 (2012-08-05) - -Features: - - - add aliasdeny.txt regex - - migrate to Net_DNS2 - - check email exist with DNS (check MX) - -Bugfixes: - - - fixe http://forge.zici.fr/p/emailpoubelle-php/issues/4/ - -## 0.1b (2012-03-20) - - - start project - diff --git a/src/README.md b/src/README.md deleted file mode 100644 index 4d81232..0000000 --- a/src/README.md +++ /dev/null @@ -1,44 +0,0 @@ -emailPoubelle.php -============= - -Un script pour un petit service d'email jetable - -* [Démo](http://poubelle.zici.fr/) -* [Page du projet](http://forge.zici.fr/p/emailpoubelle-php/) -* [Download](http://forge.zici.fr/p/emailpoubelle-php/source/download/master/) -* [Bug report](http://forge.zici.fr/p/emailpoubelle-php/issues/) - -Installation ------------ - -Installation des dépendances : - - pear install Net_DNS2 - -Télécharger & décompresser les sources : - - mkdir -p /www/emailPoubelle/postfix - cd /tmp - wget -O emailPoubelle.zip https://framagit.org/kepon/emailPoubellePhp/-/archive/master/emailPoubellePhp-master.zip - unzip emailPoubelle.zip - cp -r emailpoubelle-php-master/* /var/www/emailPoubelle - -Configure apache virtualhost (ou autres serveur http) - [...] - DocumentRoot /var/www/emailPoubelle/www - [...] - -Configurer Postfix : - - vi /etc/postfix/main.cf - [...] - virtual_alias_maps = hash:/www/emailPoubelle/var/virtual - touch /www/emailPoubelle/var/virtual - /usr/sbin/postmap /www/emailPoubelle/var/virtual - chown www-data /www/emailPoubelle/var/virtual - chown www-data /www/emailPoubelle/var/virtual.db - -Ajouter dans le fichier /etc/aliases le devnull - - echo "devnull: /dev/null" >> /etc/aliases - newaliases diff --git a/src/bin/migrate-0.3-1.0.php b/src/bin/migrate-0.3-1.0.php deleted file mode 100644 index a3bdaef..0000000 --- a/src/bin/migrate-0.3-1.0.php +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/php -setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -} catch ( PDOException $e ) { - die('Connexion à la base '.$e->getMessage()); -} - -// postmap command -function UpdateVirtualDB_migrateTo10() { - global $dbco; - try { - $selectcmd = $dbco->prepare("SELECT alias, email - FROM ".DBTABLEPREFIX."alias - WHERE status = 5 - ORDER BY id ASC"); - $selectcmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - $file_content=null; - while($alias_db = $selectcmd->fetch()) { - $file_content .= $alias_db['alias'].' '.$alias_db['email']."\n"; - } - $alias_file=fopen(FICHIERALIAS,'w'); - fputs($alias_file, $file_content); - fclose($alias_file); - exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); -} - - -// add new alias -function AjouterAlias_migrateTo10($status, $alias,$email, $life, $comment) { - global $dbco; - $dateCreat=date('Y-m-d H:i:s', 0); - $dateExpir=NULL; - try { - $insertcmd = $dbco->prepare("INSERT INTO ".DBTABLEPREFIX."alias (status, alias, email, dateCreat, dateExpir, comment) - VALUES (:status, :alias, :email, :dateCreat, :dateExpir, :comment)"); - $insertcmd->bindParam('status', $status, PDO::PARAM_INT); - $insertcmd->bindParam('alias', $alias, PDO::PARAM_STR); - $insertcmd->bindParam('email', $email, PDO::PARAM_STR); - $insertcmd->bindParam('dateCreat', $dateCreat, PDO::PARAM_STR); - $insertcmd->bindParam('dateExpir', $dateExpir, PDO::PARAM_STR); - $insertcmd->bindParam('comment', $comment, PDO::PARAM_STR); - $insertcmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - return $dbco->lastInsertId(); -} - -$handle = fopen(FICHIERALIAS, 'r'); -while (!feof($handle)) { - $buffer = fgets($handle); - if ($buffer) { - $bufferExplode = explode(' ', $buffer); - if (!preg_match('/^(#|$|;)/', $buffer)) { - echo $bufferExplode[0].' -> '.$bufferExplode[1]."\n"; - AjouterAlias_migrateTo10(5, trim($bufferExplode[0]), trim($bufferExplode[1]), null, null); - } - } -} -fclose($handle); - -UpdateVirtualDB_migrateTo10(); - -?> diff --git a/src/conf-dist.php b/src/conf-dist.php deleted file mode 100644 index 46e5901..0000000 --- a/src/conf-dist.php +++ /dev/null @@ -1,98 +0,0 @@ -/dev/null 2>&1 -define('CRON', false); - -// Fichier d'alias postfix -define('FICHIERALIAS', DATA.'/virtual'); -define('BIN_POSTMAP', '/usr/sbin/postmap'); - -define('URLPAGE', 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"]); - -// Email -define('EMAILTAGSUJET', '[EmailPoubelle]'); -// From de l'email -define('EMAILFROM', '"NO REPLY emailPoubelle" '); -define('EMAILEND', 'emailPoubelle.zici.fr'); - -// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver -define('ALIASDENY', DATA.'/aliasdeny.txt'); - -// Blackliste d'email : (regex ligne par ligne) - commenter pour désactiver -define('BLACKLIST', DATA.'/blacklist.txt'); - -// Depend pear Net/DNS2 -define('CHECKMX', false); -if (CHECKMX) { - require_once('Net/DNS2.php'); - // Serveur DNS pour la résolution/vérification du nom de domaine - define('NS1', 'ns1.fdn.org'); - define('NS2', '8.8.8.8'); -} - -// A indiquer si vous utiliser les URL's rewriting -// Exemple avec un htaccess -// RewriteRule ^ep-([a-z]+)-([a-zA-Z0-9+/=]+)\.html$ switch.php?page=emailPoubelle&act=$1&value=$2 [L] -//define('URLREWRITE_START', 'http://poubelle.zici.fr/ep-'); -//define('URLREWRITE_MIDDLE', '-'); -//define('URLREWRITE_END', '.html'); -// Désactiver -define('URLREWRITE_START', false); -define('URLREWRITE_MIDDLE', false); -define('URLREWRITE_END', false); - -// check update : -// enable : in seconds -// disable : false -define('CHECKUPDATE', 86400); - -// Maintenance mode -define('MAINTENANCE_MODE', false); -// No maintenance for this ip (admin ip) -define('MAINTENANCE_IP', '10.0.0.1'); - - -// Mot de passe par défaut "admin" : -define('ADMIN_PASSWORD', 'admin'); - - -?> diff --git a/src/emailPoubelle.php b/src/emailPoubelle.php deleted file mode 100644 index 93638eb..0000000 --- a/src/emailPoubelle.php +++ /dev/null @@ -1,373 +0,0 @@ -'._("Debug enabled") .'
'; - echo print_r($_REQUEST); - echo ''; -} - -if (!defined('DOMAIN') || !defined('DATA') || !defined('DEBUG') || !defined('FICHIERALIAS') || !defined('DB')) { - echo '
'._("Error : the configuration file conf.php might not be included because the constants are not declared").'.
'; -// check writable work directory -} else if (!is_writable(DATA)) { - echo '
'._("Error : the working directory cannot be written. Please contact the admin").'
'; -// check alias file is_writable -} else if (!is_writable(FICHIERALIAS)) { - echo '
'._("Error : the alias file cannot be written. Please contact the admin").'
'; -// check blacklist file is_writable -} else if (defined('BLACKLIST') && !is_readable(BLACKLIST)) { - echo '
'._("Error : the blacklist file cannot be read. Please contact the admin").'
'; -// check aliasdeny file is_writable -} else if (defined('ALIASDENY') && !is_readable(ALIASDENY)) { - echo '
'._("Error : the forbidden aliases file cannot be read. Please contact the admin").'
'; -// maintenance mod -} else if (MAINTENANCE_MODE == true && MAINTENANCE_IP != $_SERVER["REMOTE_ADDR"]) { - echo '
'._("Service under maintenance").'
'; -} else { - -if (MAINTENANCE_MODE == true) { - echo '
'._("Service under maintenance").'
'; -} - - -// Connect DB -try { - if (preg_match('/^sqlite/', DB)) { - $dbco = new PDO(DB); - } else { - $dbco = new PDO(DB, DBUSER, DBPASS); - } - $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); -} catch ( PDOException $e ) { - die('._("Connexion à la base ").'.$e->getMessage()); -} -// Create DB if not exists -try { - // status : 0=not verified - 3=disable - 5=active - if (preg_match('/^sqlite/', DB)) { - $create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias ( - id INTEGER PRIMARY KEY, - status INTEGER(1) NOT NULL, - alias CHAR(150) NOT NULL UNIQUE, - email CHAR(150) NOT NULL, - dateCreat DATETIME NOT NULL, - dateExpir DATETIME, - comment TEXT);"); - } else { - $create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias ( - id INTEGER PRIMARY KEY AUTO_INCREMENT, - status INTEGER(1) NOT NULL, - alias CHAR(150) NOT NULL UNIQUE, - email CHAR(150) NOT NULL, - dateCreat DATETIME NOT NULL, - dateExpir DATETIME, - comment TEXT);"); - } -} catch ( PDOException $e ) { - echo '
'._("Error initializing tables. Please contact the admin"); - if (DEBUG) { $e->getMessage(); } - echo '
'; - die(); -} - -////////////////// -// Start program -////////////////// - -// get process "act" (action) -$action = isset($_GET['act']) ? $_GET['act'] : ''; -switch ($action) { - case "validemail" : - $get_value = urlUnGen($_GET['value']); - if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$get_value['id']."' AND status = 0")->fetchColumn() != 0) { - UpdateStatusAlias($get_value['id'], $get_value['alias_full'], 5); - echo '
'._("Your trash email address").' '.$get_value['alias_full'].' '._("is now enabled").'
'; - } else { - echo '
'._("Error : unknown ID or already validated").'
'; - } - break; - case "disable" : - $get_value = urlUnGen($_GET['value']); - DisableAlias($get_value['id'], $get_value['alias_full'], null); - break; - case "enable" : - $get_value = urlUnGen($_GET['value']); - EnableAlias($get_value['id'], $get_value['alias_full'], null); - break; - case "delete" : - $get_value = urlUnGen($_GET['value']); - DeleteAlias($get_value['id'], $get_value['alias_full']); - break; - case "cron" : - if (CRON) { - echo '
'._("The scheduled task is running").'
'; - LifeExpire(); - } else { - echo '
'._("You didn't allow the scheduled job").'
'; - } - break; -} -// Form -if (isset($_POST['username']) && $_POST['username'] != '') { // minimal anti-spam - echo 'Hello you'; -} else if (isset($_POST['list'])) { - $email=strtolower(StripCleanToHtml($_POST['email'])); - if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { - echo '
'._("Error : email address incorrect").'
'; - } else if (! VerifMXemail($email)) { - echo '
'._("Error : email address incorrect").' (2)
'; - } else if (ListeAlias($email)) { - echo '
'._("An email has been sent to you").'
'; - } else { - echo '
'._("Error : no known active trash email").'
'; - } -} else if (isset($_POST['email']) && isset($_POST['alias'])) { - $alias=strtolower(StripCleanToHtml($_POST['alias'])); - $email=strtolower(StripCleanToHtml($_POST['email'])); - $domain=StripCleanToHtml($_POST['domain']); - $life=$_POST['life']; - $comment=StripCleanToHtml($_POST['comment']); - $alias_full=$alias.'@'.$domain; - // Check form - if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { - echo '
'._("Error : email address incorrect").'
'; - } else if (! VerifMXemail($email)) { - echo '
'._("Error : email address incorrect").' (2)
'; - } else if (! preg_match('#^[\w.-]+$#',$alias)) { - echo '
'._("Error : trash email address syntax incorrect").'
'; - } else if (!domainePresent($domain)) { - echo '
'._("Error : this domain cannot be used").'
'; - } else if (emailIsAlias($email)) { - echo '
'._("Error : Your email can not contain a trash domain").'
'; - } else if (AliasDeny($alias)) { - echo '
'._("Error : trash email address forbidden").'
'; - } else if (BlacklistEmail($email)) { - echo '
'._("Error : you have been blacklisted").'
'; - // add - } elseif (isset($_POST['add'])) { - if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias_full."'")->fetchColumn() != 0) { - echo '
'._("Error : this trash email already exists").'
'; - } else if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."'")->fetchColumn() > ALIASLIMITBYMAIL) { - echo '
'._("Error: You have reached your limit quota on this app. You can install this script on a personal server if you want more quota").'.
'; - } else { - if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND status > 0")->fetchColumn() != 0) { - AjouterAlias(5, $alias_full, $email, $life, $comment); - echo '
'._("Your trash email address").' '.$alias_full.' > '.$email.' '._("is now enabled").'
'; - } else { - $lastId=AjouterAlias(0, $alias_full, $email, $life, $comment); - $message= _("Confirmation of the creation of your trash email :")."\n"; - $message= $alias_full.' => '.$email."\n"; - $message= _("Click on the link below to validate :")."\n"; - $message.= "\t * ".urlGen('validemail',$lastId,$alias_full)."\n"; - $message.= "\n"; - $message.= _("To delete this trash email, click on the link below :")."\n"; - $message.= "\t * ".urlGen('delete',$lastId,$alias_full)."\n"; - $message.= "\n"; - $message.= _("After confirmation, you will be able to temporary suspend you trash email using the link below :")."\n"; - $message.= "\t * ".urlGen('disable',$lastId,$alias_full)."\n"; - SendEmail($email,_("Alias confirmation")." ".$alias,$message); - echo '
'._("Your email address").' ('.$email.') '._("is unknown, a confirmation has been sent to you.").'
'; - } - } - // delete - } else if (isset($_POST['del'])) { - if ($id = $dbco->query("SELECT id FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND alias = '".$alias_full."'")->fetchColumn()) { - $message= _("Confirmation of the removal of your trash email : ")."\n"; - $message= $alias_full.' => '.$email."\n"; - $message= _("Click on the link below to validate the deletion :")."\n"; - $message.= "\t * ".urlGen('delete',$id,$alias_full)."\n\n"; - $message.= _("If you would like to temporary suspend this trash email, you can follow the link bellow :")."\n"; - $message.= "\t * ".urlGen('disable',$id,$alias_full)."\n"; - SendEmail($email,_("Alias deletion")." ".$alias,$message); - echo '
'._("An email has been sent to you").'.
'; - } else { - echo '
'._("Error : unknown trash email").'
'; - } - // disable - } else if (isset($_POST['disable'])) { - DisableAlias(null, $alias_full, $email); - // enable - } else if (isset($_POST['enable'])) { - EnableAlias(null, $alias_full, $email); - } - - // memory email - if (isset($_POST['memory'])) { - setcookie ("email", StripCleanToHtml($email), time() + 31536000); - } else if (isset($_COOKIE['email'])) { - unset($_COOKIE['email']); - } -} - -////////////////// -// Printing form -////////////////// - -?> - - -
- - -
- - id="input-email" size="24" border="0" onkeyup="printForm()" onchange="printForm()" /> - - /> -
-
- - /> @'; - } else { - echo ''; - } - ?> - -
-
- - /> -
-
- /> - /> - /> - /> -
- -
- - -

-

-

emailPoubelle.php

- - diff --git a/src/emailPoubelleAdmin.php b/src/emailPoubelleAdmin.php deleted file mode 100644 index 602d9fe..0000000 --- a/src/emailPoubelleAdmin.php +++ /dev/null @@ -1,174 +0,0 @@ -'._('Error: Incorrect password').''; -} -if (empty($_SESSION['adminPasswordHash']) || $auth == false) { - echo '
- - - -
'; -} - -// Test connexion, si c'est ok : -if ($auth==true) { - languesSwitch(); - // Connect DB - try { - if (preg_match('/^sqlite/', DB)) { - $dbco = new PDO(DB); - } else { - $dbco = new PDO(DB, DBUSER, DBPASS); - } - $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - } catch ( PDOException $e ) { - die('DB connect error : '.$e->getMessage()); - } - if (isset($_POST['action'])) { - if ($_POST['action'] == 'DeleteEmail' && isset($_POST['email'])) { - DeleteEmail($_POST['email']); - } - if ($_POST['action'] == 'AddBlacklistEmail' && isset($_POST['email'])) { - AddBlacklistEmail($_POST['email']); - } - if ($_POST['action'] == 'DeleteAlias' && isset($_POST['id']) && isset($_POST['alias'])) { - DeleteAlias($_POST['id'], $_POST['alias']); - } - if ($_POST['action'] == 'DisableAlias' && isset($_POST['id']) && isset($_POST['alias'])) { - DisableAlias($_POST['id'], $_POST['alias'], $_POST['email']); - } - } - ?> - - '._('Statistics').' :

'; - echo '
    '; - echo '
  • '._('Total alias').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias")->fetchColumn().'
  • '; - echo '
  • '._('Active alias').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 5")->fetchColumn().'
  • '; - echo '
  • '._('Alias suspended').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 3")->fetchColumn().'
  • '; - echo '
  • '._('Alias not verified').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 0")->fetchColumn().'
  • '; - //echo '
  • Email différent : '.$dbco->query("SELECT DISTINCT count(email) FROM ".DBTABLEPREFIX."alias WHERE status = 5")->fetchColumn().'
  • '; - echo '
'; - - echo '

User info

'; - echo '
- - - -
'; - if (isset($_POST['email'])) { - $requestUtilisateur = $dbco->query("SELECT * FROM ".DBTABLEPREFIX."alias WHERE email='".$_POST['email']."' ORDER BY dateCreat DESC")->fetchAll() ; - echo '

User '.$_POST['email'].' : '; - if (count($requestUtilisateur) != 0) { - echo 'sup'; - if (!BlacklistEmail($_POST['email'])) { - echo 'blk'; - } - } else { - echo 'Not found !'; - } - echo '

'; - echo '

'; - if (count($requestUtilisateur) != 0) { - echo ''; - echo ' - - - - - - '; - foreach ($requestUtilisateur as $utilisateur) { - echo ' - - - - - - '; - } - echo '
StatusAliasDateCreatDateExpirComment
'.$utilisateur['status'].''.$utilisateur['alias'].' -
- sup'; - if ($utilisateur['status'] == 5) { - echo 'Suspendre'; - } - echo '
'.$utilisateur['dateCreat'].''.$utilisateur['dateExpir'].''.$utilisateur['comment'].'
'; - } - } - - echo '

Top user

'; - $recordActifs = $dbco->query("SELECT email, count(alias) calias FROM ".DBTABLEPREFIX."alias WHERE status=5 GROUP BY email ORDER BY calias DESC LIMIT 40")->fetchAll(); - echo ''; - echo ' - - - - '; - foreach ($recordActifs as $recordActif) { - echo ' - - - - '; - } - echo '
EmailNumber of aliasAction
'; - if (BlacklistEmail($recordActif['email'])) { - echo 'blk '; - } - echo $recordActif['email'].''.$recordActif['calias'].' - - sup'; - if (!BlacklistEmail($recordActif['email'])) { - echo 'blk'; - } - echo ' -
'; - -} - - - -?> diff --git a/src/lang/fr/LC_MESSAGES/messages.mo b/src/lang/fr/LC_MESSAGES/messages.mo deleted file mode 100644 index 3c3c06eb85c9e760e6bf009cced9fa09485b9c98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8200 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 diff --git a/src/lang/fr/LC_MESSAGES/messages.po b/src/lang/fr/LC_MESSAGES/messages.po deleted file mode 100644 index 098c3bb..0000000 --- a/src/lang/fr/LC_MESSAGES/messages.po +++ /dev/null @@ -1,369 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-11-16 12:45+0100\n" -"PO-Revision-Date: 2018-11-16 13:02+0100\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: fr_FR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Report-msgstr-Bugs-To: \n" -"X-Generator: Poedit 2.0.6\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -#: emailPoubelleAdmin.php:27 -msgid "Error: Incorrect password" -msgstr "Erreur : mot de passe incorrect" - -#: emailPoubelleAdmin.php:75 -msgid "Statistics" -msgstr "Statistique" - -#: emailPoubelleAdmin.php:77 -msgid "Total alias" -msgstr "Alias total" - -#: emailPoubelleAdmin.php:78 -msgid "Active alias" -msgstr "Alias actif" - -#: emailPoubelleAdmin.php:79 -msgid "Alias suspended" -msgstr "Alias suspendu" - -#: emailPoubelleAdmin.php:80 -msgid "Alias not verified" -msgstr "Alias non vérifié" - -#: emailPoubelleAdmin.php:86 -msgid "User email" -msgstr "Email de l'utilisateur" - -#: emailPoubelle.php:22 -msgid "Debug enabled" -msgstr "Debug activé" - -#: emailPoubelle.php:28 -msgid "Error : the configuration file conf.php might not be included because the constants are not declared" -msgstr "Erreur : Il ne semble pas que le fichier de configuration conf.php soit inclue car les constantes ne sont pas présentes" - -#: emailPoubelle.php:31 -msgid "Error : the working directory cannot be written. Please contact the admin" -msgstr "Erreur : le répertoire de travail ne peut pas être écrit. Merci de contacter l\\'administrateur" - -#: emailPoubelle.php:34 -msgid "Error : the alias file cannot be written. Please contact the admin" -msgstr "Erreur : le fichier d\\'alias ne peut pas être écrit. Merci de contacter l\\'administrateur" - -#: emailPoubelle.php:37 -msgid "Error : the blacklist file cannot be read. Please contact the admin" -msgstr "Erreur : un fichier de blacklist est renseigné mais n\\'est pas lisible. Merci de contacter l\\'administrateur" - -#: emailPoubelle.php:40 -msgid "Error : the forbidden aliases file cannot be read. Please contact the admin" -msgstr "Erreur : un fichier d\\'alias interdit est renseigné mais n\\'est pas lisible. Merci de contacter l\\'administrateur" - -#: emailPoubelle.php:43 emailPoubelle.php:47 -msgid "Service under maintenance" -msgstr "Le service est en maintenance" - -#: emailPoubelle.php:85 -msgid "Error initializing tables. Please contact the admin" -msgstr "Erreur à l\\'initialisation des tables. Merci de contacter l'administrateur" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "Your trash email address" -msgstr "Votre email poubelle" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "is now enabled" -msgstr "est maintenant actif" - -#: emailPoubelle.php:104 -msgid "Error : unknown ID or already validated" -msgstr "Erreur : ID introuvable ou déjà validé" - -#: emailPoubelle.php:121 -msgid "The scheduled task is running" -msgstr "La tâche planifié est lancé" - -#: emailPoubelle.php:124 -msgid "You didn't allow the scheduled job" -msgstr "Vous n\\'avez pas autorisé le lancement par tâche planifié" - -#: emailPoubelle.php:134 emailPoubelle.php:136 emailPoubelle.php:151 -#: emailPoubelle.php:153 -msgid "Error : email address incorrect" -msgstr "Erreur : Adresse email incorrect" - -#: emailPoubelle.php:138 emailPoubelle.php:200 -msgid "An email has been sent to you" -msgstr "Un email vient de vous être envoyé" - -#: emailPoubelle.php:140 -msgid "Error : no known active trash email" -msgstr "Erreur : aucun email actif connu" - -#: emailPoubelle.php:155 -msgid "Error : trash email address syntax incorrect" -msgstr "Erreur : Format de l\\'email poubelle incorrect" - -#: emailPoubelle.php:157 -msgid "Error : this domain cannot be used" -msgstr "Erreur : ce domain n\\'est pas pris en charge" - -#: emailPoubelle.php:159 -msgid "Error : Your email can not contain a trash domain" -msgstr "Erreur : votre email ne peut pas être un email poubelle" - -#: emailPoubelle.php:161 -msgid "Error : trash email address forbidden" -msgstr "Erreur : email poubelle interdit" - -#: emailPoubelle.php:163 -msgid "Error : you have been blacklisted" -msgstr "Erreur : vous avez été blacklisté sur ce service" - -#: emailPoubelle.php:167 -msgid "Error : this trash email already exists" -msgstr "Erreur : cet email poubelle est déjà utilisé" - -#: emailPoubelle.php:169 -msgid "Error: You have reached your limit quota on this app. You can install this script on a personal server if you want more quota" -msgstr "Erreur : Vous avez atteind votre quota limite d'alias sur cette application. Vous pouvez installer ce script sur un serveur personnel si vous voulez plus de quota" - -#: emailPoubelle.php:176 -msgid "Confirmation of the creation of your trash email :" -msgstr "Confirmation de la création de votre email poubelle :" - -#: emailPoubelle.php:178 -msgid "Click on the link below to validate :" -msgstr "Cliquer sur le lien ci-dessous pour confirmer :" - -#: emailPoubelle.php:181 -msgid "To delete this trash email, click on the link below :" -msgstr "Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-dessous :" - -#: emailPoubelle.php:184 -msgid "After confirmation, you will be able to temporary suspend you trash email using the link below :" -msgstr "Après confirmation, vous pourrez suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessous :" - -#: emailPoubelle.php:186 -msgid "Alias confirmation" -msgstr "Confirmation alias" - -#: emailPoubelle.php:187 -msgid "Your email address" -msgstr "Votre email" - -#: emailPoubelle.php:187 -msgid "is unknown, a confirmation has been sent to you." -msgstr "nous étant inconnu, une confirmation vous a été envoyé par email." - -#: emailPoubelle.php:193 -msgid "Confirmation of the removal of your trash email : " -msgstr "Confirmation de la suppression de votre email poubelle " - -#: emailPoubelle.php:195 -msgid "Click on the link below to validate the deletion :" -msgstr "Cliquer sur le lien ci-dessous pour confirmer la suppression :" - -#: emailPoubelle.php:197 -msgid "If you would like to temporary suspend this trash email, you can follow the link bellow :" -msgstr "Sinon pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessous :" - -#: emailPoubelle.php:199 -msgid "Alias deletion" -msgstr "Suppression de l'alias" - -#: emailPoubelle.php:202 -msgid "Error : unknown trash email" -msgstr "Erreur : impossible de trouver cet email poubelle" - -#: emailPoubelle.php:230 -msgid "Add" -msgstr "Ajouter" - -#: emailPoubelle.php:231 -msgid "List" -msgstr "Lister" - -#: emailPoubelle.php:232 emailPoubelle.php:274 -msgid "Delete" -msgstr "Supprimer" - -#: emailPoubelle.php:233 emailPoubelle.php:275 -msgid "Suspend" -msgstr "Suspendre" - -#: emailPoubelle.php:234 emailPoubelle.php:276 -msgid "Resume" -msgstr "Reprendre" - -#: emailPoubelle.php:238 -msgid "Your real email address" -msgstr "Votre email réel" - -#: emailPoubelle.php:241 -msgid "Remember" -msgstr "Mémoriser" - -#: emailPoubelle.php:244 -msgid "Name of your trash email address" -msgstr "Nom de l'email poubelle" - -#: emailPoubelle.php:245 -msgid "Ex : john_shop" -msgstr "Ex : jean-petiteannonce" - -#: emailPoubelle.php:258 -msgid "Unlimited time" -msgstr "Illimité" - -#: emailPoubelle.php:259 -msgid "2 hours" -msgstr "2 heure" - -#: emailPoubelle.php:260 -msgid "6 hours" -msgstr "6 heures" - -#: emailPoubelle.php:261 -msgid "1 day" -msgstr "1 jour" - -#: emailPoubelle.php:262 -msgid "7 days" -msgstr "7 jours" - -#: emailPoubelle.php:263 -msgid "15 days" -msgstr "15 jours" - -#: emailPoubelle.php:264 -msgid "30 days" -msgstr "30 jours" - -#: emailPoubelle.php:265 -msgid "90 days" -msgstr "90 jours" - -#: emailPoubelle.php:269 -msgid "Comment for this trash email (for your to remember)" -msgstr "Un commentaire pour l'ajout ? (pour votre mémoire)" - -#: emailPoubelle.php:270 -msgid "Ex : Inscription sur zici.fr" -msgstr "Ex : Inscription sur zici.fr" - -#: emailPoubelle.php:273 -msgid "Activate" -msgstr "Activer" - -#: emailPoubelle.php:362 -msgid "Version" -msgstr "Version" - -#: emailPoubelle.php:362 -msgid "Created by David Mercereau under licence GNU GPL v3" -msgstr "Créé par David Mercereau sous licence GNU GPL v3" - -#: emailPoubelle.php:363 -msgid "Download and use this script on the project website" -msgstr "Télécharger et utiliser ce script sur le site du projet" - -#: ep_function.php:93 -msgid "has been deleted with all these aliases" -msgstr "a été supprimé avec tout ces alias" - -#: ep_function.php:99 -msgid "Erreur" -msgstr "Erreur" - -#: ep_function.php:99 -msgid "has not been deleted" -msgstr "n'a pas été supprimé" - -#: ep_function.php:120 -msgid "has been deleted" -msgstr "a bien été supprimé" - -#: ep_function.php:126 -msgid "Error: email trash unknown" -msgstr "Erreur : email poubelle inconnu" - -#: ep_function.php:145 ep_function.php:173 -msgid "Error: Can not find this trash email" -msgstr "Erreur : impossible de trouver cet email poubelle" - -#: ep_function.php:148 ep_function.php:150 ep_function.php:152 -#: ep_function.php:176 ep_function.php:178 ep_function.php:180 -msgid "The reception on" -msgstr "La réception sur" - -#: ep_function.php:148 -msgid "is active again" -msgstr "est maintenant activé" - -#: ep_function.php:150 -msgid "is already active" -msgstr "est déjà activé" - -#: ep_function.php:152 -msgid "has not been confirmed by email" -msgstr "n\\'à pas été confirmé par email" - -#: ep_function.php:154 ep_function.php:182 -msgid "Error: unknown status" -msgstr "Erreur : statu inconnu" - -#: ep_function.php:176 -msgid "is now suspended" -msgstr "est maintenant suspendu" - -#: ep_function.php:178 -msgid "is already suspended" -msgstr "est déjà suspendu" - -#: ep_function.php:180 -msgid "can not be suspended because it has not been activated yet" -msgstr "ne peut pas être suspendu car il n'a pas encore été activé" - -#: ep_function.php:254 -msgid "List trash email activate" -msgstr "Liste de vos email poubelles actif" - -#: ep_function.php:257 -msgid "List trash email disable" -msgstr "Liste de vos email poubelles désactivé" - -#: ep_function.php:259 -msgid "Create " -msgstr "Créer le " - -#: ep_function.php:261 -msgid "and expires on" -msgstr "an expire le" - -#: ep_function.php:265 -msgid "Comment :" -msgstr "Commentaire :" - -#: ep_function.php:268 -msgid "Disable :" -msgstr "Désactivé :" - -#: ep_function.php:271 -msgid "Activate :" -msgstr "Activé :" - -#: ep_function.php:274 -msgid "Delete :" -msgstr "Supprimé :" - -#: ep_function.php:280 -msgid "List trash email" -msgstr "Liste email poubelle" diff --git a/src/lang/fr/LC_MESSAGES/messages_old.po b/src/lang/fr/LC_MESSAGES/messages_old.po deleted file mode 100644 index 863a2ce..0000000 --- a/src/lang/fr/LC_MESSAGES/messages_old.po +++ /dev/null @@ -1,312 +0,0 @@ -msgid "" -msgstr "" -"Project-Id-Version: \n" -"Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2018-11-16 12:57+0100\n" -"Last-Translator: \n" -"Language-Team: \n" -"Language: fr_FR\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Report-msgstr-Bugs-To: \n" -"X-Generator: Poedit 2.0.6\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"POT-Creation-Date: \n" - -msgid "1 hours" -msgstr "1 hour" - -msgid "15 hours" -msgstr "15 hours" - -msgid "2 hours" -msgstr "2 heure" - -msgid "30 hours" -msgstr "30 hours" - -msgid "6 hours" -msgstr "6 heures" - -msgid "7 hours" -msgstr "7 hours" - -msgid "90 hours" -msgstr "90 hours" - -msgid "Activate" -msgstr "Activer" - -msgid "Activate :" -msgstr "Activé : " - -msgid "Active alias" -msgstr "Alias actif" - -msgid "Add" -msgstr "Ajouter" - -msgid "" -"After confirmation, you will be able to temporary suspend you trash email " -"using the link below :" -msgstr "" -"Après confirmation, vous pourrez suspendre temporairement cet email poubelle " -"vous pouvez vous rendre sur le lien ci-dessous : " - -msgid "Alias confirmation" -msgstr "Confirmation alias " - -msgid "Alias deletion" -msgstr "Suppression de l\\'alias " - -msgid "Alias not verified" -msgstr "Alias non vérifié" - -msgid "Alias suspended" -msgstr "Alias suspendu" - -msgid "An email has been sent to you" -msgstr "Un email vient de vous être envoyé" - -msgid "Click on the link below to validate :" -msgstr "Cliquer sur le lien ci-dessous pour confirmer" - -msgid "Click on the link below to validate the deletion :" -msgstr "Cliquer sur le lien ci-dessous pour confirmer la suppression : " - -msgid "Comment :" -msgstr "Commentaire" - -msgid "Comment for this trash email (for your to remember)" -msgstr "Un commentaire pour l'ajout ? (pour votre mémoire)" - -msgid "Confirmation of the creation of your trash email :" -msgstr "Confirmation de la création de votre email poubelle" - -msgid "Confirmation of the removal of your trash email : " -msgstr "Confirmation de la suppression de votre email poubelle" - -msgid "Created by David Mercereau under licence GNU GPL v3" -msgstr "Créé par David Mercereau sous licence GNU GPL v3" - -msgid "Créé le" -msgstr "Crée le" - -msgid "Debug enabled" -msgstr "Debug activé" - -msgid "Delete" -msgstr "Supprimer" - -msgid "Delete :" -msgstr "Supprimé : " - -msgid "Disable :" -msgstr "Désactivé : " - -msgid "Download and use this script on the project website" -msgstr "Télécharger et utiliser ce script sur le site du projet" - -msgid "Erreur" -msgstr "Erreur" - -msgid "Error : Your email can not contain a trash domain" -msgstr "Erreur : votre email ne peut pas être un email poubelle" - -msgid "Error : email address incorrect" -msgstr "Erreur : Adresse email incorrect" - -msgid "Error : no known active trash email" -msgstr "Erreur : aucun email actif connu" - -msgid "Error : the alias file cannot be written. Please contact the admin" -msgstr "" -"Erreur : le fichier d\\'alias ne peut pas être écrit. Merci de contacter l" -"\\'administrateur" - -msgid "Error : the blacklist file cannot be read. Please contact the admin" -msgstr "" -"Erreur : un fichier de blacklist est renseigné mais n\\'est pas lisible. " -"Merci de contacter l\\'administrateur" - -msgid "" -"Error : the configuration file conf.php might not be included because the " -"constants are not declared" -msgstr "" -"Erreur : Il ne semble pas que le fichier de configuration conf.php soit " -"inclue car les constantes ne sont pas présentes" - -msgid "" -"Error : the forbidden aliases file cannot be read. Please contact the admin" -msgstr "" -"Erreur : un fichier d\\'alias interdit est renseigné mais n\\'est pas " -"lisible. Merci de contacter l\\'administrateur" - -msgid "" -"Error : the working directory cannot be written. Please contact the admin" -msgstr "" -"Erreur : le répertoire de travail ne peut pas être écrit. Merci de contacter " -"l\\'administrateur" - -msgid "Error : this domain cannot be used" -msgstr "Erreur : ce domain n\\'est pas pris en charge" - -msgid "Error : this trash email already exists" -msgstr "Erreur : cet email poubelle est déjà utilisé" - -msgid "Error : trash email address forbidden" -msgstr "Erreur : email poubelle interdit" - -msgid "Error : trash email address syntax incorrect" -msgstr "Erreur : Format de l\\'email poubelle incorrect" - -msgid "Error : unknown ID or already validated" -msgstr "Erreur : ID introuvable ou déjà validé" - -msgid "Error : unknown trash email" -msgstr "Erreur : impossible de trouver cet email poubelle" - -msgid "Error : you have been blacklisted" -msgstr "Erreur : vous avez été blacklisté sur ce service" - -msgid "Error initializing tables. Please contact the admin" -msgstr "" -"Erreur à l\\'initialisation des tables. Merci de contacter l" -"\\'administrateur " - -msgid "Error: Can not find this trash email" -msgstr "Erreur : impossible de trouver cet email poubelle" - -msgid "Error: Incorrect password" -msgstr "Erreur : mot de passe incorrect" - -msgid "" -"Error: You have reached your limit quota on this app. You can install this script on a " -"personal server if you want more quota" -msgstr "" -"Erreur : Vous avez atteind votre quota limite d'alias sur cette " -"application. Vous pouvez installer ce script sur un serveur personnel si vous voulez plus de " -"quota." - -msgid "Error: email trash unknown" -msgstr "Erreur : email poubelle inconnu" - -msgid "Error: unknown status" -msgstr "Erreur : statu inconnu" - -msgid "Ex : Inscription sur zici.fr" -msgstr "Ex : Inscription sur zici.fr" - -msgid "Ex : john_shop" -msgstr "Ex : jean-petiteannonce" - -msgid "" -"If you would like to temporary suspend this trash email, you can follow the " -"link bellow :" -msgstr "" -"Sinon pour suspendre temporairement cet email poubelle vous pouvez vous " -"rendre sur le lien ci-dessous : " - -msgid "List" -msgstr "Lister" - -msgid "List trash email" -msgstr "Liste email poubelle" - -msgid "List trash email activate" -msgstr "Liste de vos email poubelles actif" - -msgid "List trash email disable" -msgstr "Liste de vos email poubelles désactivé" - -msgid "Name of your trash email address" -msgstr "Nom de l'email poubelle" - -msgid "Remember" -msgstr "Mémoriser" - -msgid "Resume" -msgstr "Reprendre" - -msgid "Service under maintenance" -msgstr "Le service est en maintenance" - -msgid "Statistics" -msgstr "Statistique" - -msgid "Suspend" -msgstr "Suspendre" - -msgid "The reception on" -msgstr "La réception sur" - -msgid "The scheduled task is running" -msgstr "La tâche planifié est lancé" - -msgid "To delete this trash email, click on the link below :" -msgstr "" -"Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-" -"dessous :" - -msgid "Total alias" -msgstr "Alias total" - -msgid "Unlimited time" -msgstr "Illimité" - -msgid "User email" -msgstr "Email de l'utilisateur" - -msgid "Version" -msgstr "Version" - -msgid "You didn't allow the scheduled job" -msgstr "Vous n\\'avez pas autorisé le lancement par tâche planifié" - -msgid "Your email address" -msgstr "Votre email " - -msgid "Your real email address" -msgstr "Votre email réel" - -msgid "Your trash email address" -msgstr "Votre email poubelle" - -msgid "can not be suspended because it has not been activated yet" -msgstr "ne peut pas être suspendu car il n'a pas encore été activé" - -msgid "et expire le" -msgstr "et expire le" - -msgid "has been deleted" -msgstr "a bien été supprimé" - -msgid "has been deleted with all these aliases" -msgstr "a été supprimé avec tout ces alias" - -msgid "has not been confirmed by email" -msgstr "n\\'à pas été confirmé par email" - -msgid "has not been deleted" -msgstr "n'a pas été supprimé" - -msgid "is active again" -msgstr "est maintenant activé" - -msgid "is already active" -msgstr "est déjà activé" - -msgid "is already suspended" -msgstr "Est déjà suspendu" - -msgid "is now enabled" -msgstr "est maintenant actif" - -msgid "is now suspended" -msgstr "Est maintenant suspendu" - -msgid "is unknown, a confirmation has been sent to you." -msgstr "nous étant inconnu, une confirmation vous a été envoyé par email." diff --git a/src/lang/it/LC_MESSAGES/messages.mo b/src/lang/it/LC_MESSAGES/messages.mo deleted file mode 100644 index 5cd447c50f27783b28cfac4a3c5591d8fbb09f01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8051 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 MTsytkA-9eG1rpyK>Hq)$ diff --git a/src/lang/it/LC_MESSAGES/messages.po b/src/lang/it/LC_MESSAGES/messages.po deleted file mode 100644 index 0a56633..0000000 --- a/src/lang/it/LC_MESSAGES/messages.po +++ /dev/null @@ -1,399 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -# -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-11-16 12:45+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: it_IT\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -#: emailPoubelleAdmin.php:27 -msgid "Error: Incorrect password" -msgstr "Errore : Password è errata" - -#: emailPoubelleAdmin.php:75 -msgid "Statistics" -msgstr "Statistica" - -#: emailPoubelleAdmin.php:77 -msgid "Total alias" -msgstr "Alias Total" - -#: emailPoubelleAdmin.php:78 -msgid "Active alias" -msgstr "Alias attivi" - -#: emailPoubelleAdmin.php:79 -msgid "Alias suspended" -msgstr "Alias Sospesi" - -#: emailPoubelleAdmin.php:80 -msgid "Alias not verified" -msgstr "Alias non verificati" - -#: emailPoubelleAdmin.php:86 -msgid "User email" -msgstr "Email dell'utente" - -#: emailPoubelle.php:22 -msgid "Debug enabled" -msgstr "Debug abilitato" - -#: emailPoubelle.php:28 -msgid "" -"Error : the configuration file conf.php might not be included because the " -"constants are not declared" -msgstr "" -"Errore : Il file di configurazione conf.php forse non è incluso " -" perché i constanti non sono dichiarate" - -#: emailPoubelle.php:31 -msgid "" -"Error : the working directory cannot be written. Please contact the admin" -msgstr "" -"Errore : il directory corrente non puo essere modificato. " -"Contatta l'amministratore per favore." - -#: emailPoubelle.php:34 -msgid "Error : the alias file cannot be written. Please contact the admin" -msgstr "Errore : il alias file non puo essere modificato. " -"Contatta l'amministratore per favore." - -#: emailPoubelle.php:37 -msgid "Error : the blacklist file cannot be read. Please contact the admin" -msgstr "Errore : il file della lista nera non puo essere modificato. " -"Contatta l'amministratore per favore." - -#: emailPoubelle.php:40 -msgid "" -"Error : the forbidden aliases file cannot be read. Please contact the admin" -msgstr "" -"Errore : Il proibito alias file non puo essere modificato." -"Contatta l'amministratore per favore." - -#: emailPoubelle.php:43 emailPoubelle.php:47 -msgid "Service under maintenance" -msgstr "Servizio in manutenzione" - -#: emailPoubelle.php:85 -msgid "Error initializing tables. Please contact the admin" -msgstr "Errore per inizializzare le tabelle. Per favore contatta " -"l'amministratore" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "Your trash email address" -msgstr "Il tuo email rifiuti indirizzo" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "is now enabled" -msgstr "è adesso attivo" - -#: emailPoubelle.php:104 -msgid "Error : unknown ID or already validated" -msgstr "Errore : ID non è conosciuto o già validato" - -#: emailPoubelle.php:121 -msgid "The scheduled task is running" -msgstr "L'attività pianificate è in esecuzione " - -#: emailPoubelle.php:124 -msgid "You didn't allow the scheduled job" -msgstr "L'attività pianificate non è autorizata" - -#: emailPoubelle.php:134 emailPoubelle.php:136 emailPoubelle.php:151 -#: emailPoubelle.php:153 -msgid "Error : email address incorrect" -msgstr "Errore : Indirizzo email errato" - -#: emailPoubelle.php:138 emailPoubelle.php:200 -msgid "An email has been sent to you" -msgstr "Ti è stata inviata un'email" - -#: emailPoubelle.php:140 -msgid "Error : no known active trash email" -msgstr "Errore : Nessun'email rifiuti attiva conosciuta" - -#: emailPoubelle.php:155 -msgid "Error : trash email address syntax incorrect" -msgstr "Errore : La sintassi dell'indorizzo email rifiuti è errata" - -#: emailPoubelle.php:157 -msgid "Error : this domain cannot be used" -msgstr "Errore : Il dominio non puo essere utilizzato" - -#: emailPoubelle.php:159 -msgid "Error : Your email can not contain a trash domain" -msgstr "Errore : La tua email non puo contenare un dominio rifiuti" - -#: emailPoubelle.php:161 -msgid "Error : trash email address forbidden" -msgstr "Errore : Indirizzo email rifiuti vietato" - -#: emailPoubelle.php:163 -msgid "Error : you have been blacklisted" -msgstr "Errore : Sei stato nella lista nera" - -#: emailPoubelle.php:167 -msgid "Error : this trash email already exists" -msgstr "Errore : Questo email rifiuti esista già" - -#: emailPoubelle.php:169 -msgid "" -"Error: You have reached your limit quota on this app. You can install this script on a " -"personal server if you want more quota" -msgstr "" -"Errore : Hai raggiunto la tua limite su questa app. Puoi installare questo script " -"su un server personale se vuoi più quota" - -#: emailPoubelle.php:176 -msgid "Confirmation of the creation of your trash email :" -msgstr "Confirmazione della creazione della tua email rifiuti" - -#: emailPoubelle.php:178 -msgid "Click on the link below to validate :" -msgstr "Clicca sul link sottostante per confermare" - -#: emailPoubelle.php:181 -msgid "To delete this trash email, click on the link below :" -msgstr "per sopprimere questa email rifiuti, clicca sul link sottostante" - -#: emailPoubelle.php:184 -msgid "" -"After confirmation, you will be able to temporary suspend you trash email " -"using the link below :" -msgstr "" -"Doppo confermazione, sara possibile di temporanea sospendere la tua email" -"rifiuti con il link sottostante" - -#: emailPoubelle.php:186 -msgid "Alias confirmation" -msgstr "Alias confermazione" - -#: emailPoubelle.php:187 -msgid "Your email address" -msgstr "Il tuo indirizzo email" - -#: emailPoubelle.php:187 -msgid "is unknown, a confirmation has been sent to you." -msgstr "non è conosciuto, una confermazione richiesta ti es stata inviata" - -#: emailPoubelle.php:193 -msgid "Confirmation of the removal of your trash email : " -msgstr "Confermazione per la soppressione della tua email rifiuti" - -#: emailPoubelle.php:195 -msgid "Click on the link below to validate the deletion :" -msgstr "Clicca sul link sottostante per confermare la soppressione" - -#: emailPoubelle.php:197 -msgid "" -"If you would like to temporary suspend this trash email, you can follow the " -"link bellow :" -msgstr "" -"Se vuoi temporeano sospendere la tua email rifiuti, clicca sul link " -"sottostante" - -#: emailPoubelle.php:199 -msgid "Alias deletion" -msgstr "Alias cancellatura" - -#: emailPoubelle.php:202 -msgid "Error : unknown trash email" -msgstr "Errore : Email rifiuti non è conosciuta" - -#: emailPoubelle.php:230 -msgid "Add" -msgstr "Aggiungere" - -#: emailPoubelle.php:231 -msgid "List" -msgstr "Listare" - -#: emailPoubelle.php:232 emailPoubelle.php:274 -msgid "Delete" -msgstr "Sopprimere" - -#: emailPoubelle.php:233 emailPoubelle.php:275 -msgid "Suspend" -msgstr "Sospendere" - -#: emailPoubelle.php:234 emailPoubelle.php:276 -msgid "Resume" -msgstr "Riprendere" - -#: emailPoubelle.php:238 -msgid "Your real email address" -msgstr "Il tuo vero email indirizzo" - -#: emailPoubelle.php:241 -msgid "Remember" -msgstr "Ricordarsi" - -#: emailPoubelle.php:244 -msgid "Name of your trash email address" -msgstr "Il nome dello tuo email rifiuti indirizzo" - -#: emailPoubelle.php:245 -msgid "Ex : john_shop" -msgstr "Ex : john_shop" - -#: emailPoubelle.php:258 -msgid "Unlimited time" -msgstr "Tempo illimitato" - -#: emailPoubelle.php:259 -msgid "2 hours" -msgstr "2 ore" - -#: emailPoubelle.php:260 -msgid "6 hours" -msgstr "6 ore" - -#: emailPoubelle.php:261 -msgid "1 day" -msgstr "1 giorno" - -#: emailPoubelle.php:262 -msgid "7 days" -msgstr "7 giorni" - -#: emailPoubelle.php:263 -msgid "15 days" -msgstr "15 giorni" - -#: emailPoubelle.php:264 -msgid "30 days" -msgstr "30 giorni" - -#: emailPoubelle.php:265 -msgid "90 days" -msgstr "90 giorni" - -#: emailPoubelle.php:269 -msgid "Comment for this trash email (for your to remember)" -msgstr "Commento su questa email rifiuti (per ricordarti)" - -#: emailPoubelle.php:270 -msgid "Ex : Inscription sur zici.fr" -msgstr "Ex: Iscrizione su zici.fr" - -#: emailPoubelle.php:273 -msgid "Activate" -msgstr "Attivare" - -#: emailPoubelle.php:362 -msgid "Version" -msgstr "Versione" - -#: emailPoubelle.php:362 -msgid "Created by David Mercereau under licence GNU GPL v3" -msgstr "Creato da David Mercereau sotto la licenza GNU GPL v3" - -#: emailPoubelle.php:363 -msgid "Download and use this script on the project website" -msgstr "Scarica é utiliza questo script sul website del projetto" - -#: ep_function.php:93 -msgid "has been deleted with all these aliases" -msgstr "e stato cancellato con tutti i alias" - -#: ep_function.php:99 -msgid "Erreur" -msgstr "Errore" - -#: ep_function.php:99 -msgid "has not been deleted" -msgstr "non e stato cancellato" - -#: ep_function.php:120 -msgid "has been deleted" -msgstr "e stato cancellato" - -#: ep_function.php:126 -msgid "Error: email trash unknown" -msgstr "Errore : Email rifiuti non è conosciuta" - -#: ep_function.php:145 ep_function.php:173 -msgid "Error: Can not find this trash email" -msgstr "Errore : Questa email rifiuti non è stata trovata" - -#: ep_function.php:148 ep_function.php:150 ep_function.php:152 -#: ep_function.php:176 ep_function.php:178 ep_function.php:180 -msgid "The reception on" -msgstr "La ricezione su" - -#: ep_function.php:148 -msgid "is active again" -msgstr "è riattivata" - -#: ep_function.php:150 -msgid "is already active" -msgstr "è gia attivata" - -#: ep_function.php:152 -msgid "has not been confirmed by email" -msgstr "non è stata confermata da email" - -#: ep_function.php:154 ep_function.php:182 -msgid "Error: unknown status" -msgstr "Errore : Stato sconosciuto" - -#: ep_function.php:176 -msgid "is now suspended" -msgstr "è addesso sospesa" - -#: ep_function.php:178 -msgid "is already suspended" -msgstr "è gia sospesa" - -#: ep_function.php:180 -msgid "can not be suspended because it has not been activated yet" -msgstr "non puo essere sospesa perchè non è stata ancora attivata" - -#: ep_function.php:254 -msgid "List trash email activate" -msgstr "La lista di email rifiuti è attivata" - -#: ep_function.php:257 -msgid "List trash email disable" -msgstr "La lista di email rifiuti è disattivata" - -#: ep_function.php:259 -msgid "Create " -msgstr "Creare" - -#: ep_function.php:261 -msgid "and expires on" -msgstr "e scade alle" - -#: ep_function.php:265 -msgid "Comment :" -msgstr "Commento :" - -#: ep_function.php:268 -msgid "Disable :" -msgstr "Disattivare :" - -#: ep_function.php:271 -msgid "Activate :" -msgstr "Attivare :" - -#: ep_function.php:274 -msgid "Delete :" -msgstr "Cancellare :" - -#: ep_function.php:280 -msgid "List trash email" -msgstr "Listare email rifiuti" diff --git a/src/lang/messages.pot b/src/lang/messages.pot deleted file mode 100644 index c0214a2..0000000 --- a/src/lang/messages.pot +++ /dev/null @@ -1,383 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-11-16 12:45+0100\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=CHARSET\n" -"Content-Transfer-Encoding: 8bit\n" - -#: emailPoubelleAdmin.php:27 -msgid "Error: Incorrect password" -msgstr "" - -#: emailPoubelleAdmin.php:75 -msgid "Statistics" -msgstr "" - -#: emailPoubelleAdmin.php:77 -msgid "Total alias" -msgstr "" - -#: emailPoubelleAdmin.php:78 -msgid "Active alias" -msgstr "" - -#: emailPoubelleAdmin.php:79 -msgid "Alias suspended" -msgstr "" - -#: emailPoubelleAdmin.php:80 -msgid "Alias not verified" -msgstr "" - -#: emailPoubelleAdmin.php:86 -msgid "User email" -msgstr "" - -#: emailPoubelle.php:22 -msgid "Debug enabled" -msgstr "" - -#: emailPoubelle.php:28 -msgid "" -"Error : the configuration file conf.php might not be included because the " -"constants are not declared" -msgstr "" - -#: emailPoubelle.php:31 -msgid "" -"Error : the working directory cannot be written. Please contact the admin" -msgstr "" - -#: emailPoubelle.php:34 -msgid "Error : the alias file cannot be written. Please contact the admin" -msgstr "" - -#: emailPoubelle.php:37 -msgid "Error : the blacklist file cannot be read. Please contact the admin" -msgstr "" - -#: emailPoubelle.php:40 -msgid "" -"Error : the forbidden aliases file cannot be read. Please contact the admin" -msgstr "" - -#: emailPoubelle.php:43 emailPoubelle.php:47 -msgid "Service under maintenance" -msgstr "" - -#: emailPoubelle.php:85 -msgid "Error initializing tables. Please contact the admin" -msgstr "" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "Your trash email address" -msgstr "" - -#: emailPoubelle.php:102 emailPoubelle.php:173 -msgid "is now enabled" -msgstr "" - -#: emailPoubelle.php:104 -msgid "Error : unknown ID or already validated" -msgstr "" - -#: emailPoubelle.php:121 -msgid "The scheduled task is running" -msgstr "" - -#: emailPoubelle.php:124 -msgid "You didn't allow the scheduled job" -msgstr "" - -#: emailPoubelle.php:134 emailPoubelle.php:136 emailPoubelle.php:151 -#: emailPoubelle.php:153 -msgid "Error : email address incorrect" -msgstr "" - -#: emailPoubelle.php:138 emailPoubelle.php:200 -msgid "An email has been sent to you" -msgstr "" - -#: emailPoubelle.php:140 -msgid "Error : no known active trash email" -msgstr "" - -#: emailPoubelle.php:155 -msgid "Error : trash email address syntax incorrect" -msgstr "" - -#: emailPoubelle.php:157 -msgid "Error : this domain cannot be used" -msgstr "" - -#: emailPoubelle.php:159 -msgid "Error : Your email can not contain a trash domain" -msgstr "" - -#: emailPoubelle.php:161 -msgid "Error : trash email address forbidden" -msgstr "" - -#: emailPoubelle.php:163 -msgid "Error : you have been blacklisted" -msgstr "" - -#: emailPoubelle.php:167 -msgid "Error : this trash email already exists" -msgstr "" - -#: emailPoubelle.php:169 -msgid "" -"Error: You have reached your limit quota on this app. You can install this script on a " -"personal server if you want more quota" -msgstr "" - -#: emailPoubelle.php:176 -msgid "Confirmation of the creation of your trash email :" -msgstr "" - -#: emailPoubelle.php:178 -msgid "Click on the link below to validate :" -msgstr "" - -#: emailPoubelle.php:181 -msgid "To delete this trash email, click on the link below :" -msgstr "" - -#: emailPoubelle.php:184 -msgid "" -"After confirmation, you will be able to temporary suspend you trash email " -"using the link below :" -msgstr "" - -#: emailPoubelle.php:186 -msgid "Alias confirmation" -msgstr "" - -#: emailPoubelle.php:187 -msgid "Your email address" -msgstr "" - -#: emailPoubelle.php:187 -msgid "is unknown, a confirmation has been sent to you." -msgstr "" - -#: emailPoubelle.php:193 -msgid "Confirmation of the removal of your trash email : " -msgstr "" - -#: emailPoubelle.php:195 -msgid "Click on the link below to validate the deletion :" -msgstr "" - -#: emailPoubelle.php:197 -msgid "" -"If you would like to temporary suspend this trash email, you can follow the " -"link bellow :" -msgstr "" - -#: emailPoubelle.php:199 -msgid "Alias deletion" -msgstr "" - -#: emailPoubelle.php:202 -msgid "Error : unknown trash email" -msgstr "" - -#: emailPoubelle.php:230 -msgid "Add" -msgstr "" - -#: emailPoubelle.php:231 -msgid "List" -msgstr "" - -#: emailPoubelle.php:232 emailPoubelle.php:274 -msgid "Delete" -msgstr "" - -#: emailPoubelle.php:233 emailPoubelle.php:275 -msgid "Suspend" -msgstr "" - -#: emailPoubelle.php:234 emailPoubelle.php:276 -msgid "Resume" -msgstr "" - -#: emailPoubelle.php:238 -msgid "Your real email address" -msgstr "" - -#: emailPoubelle.php:241 -msgid "Remember" -msgstr "" - -#: emailPoubelle.php:244 -msgid "Name of your trash email address" -msgstr "" - -#: emailPoubelle.php:245 -msgid "Ex : john_shop" -msgstr "" - -#: emailPoubelle.php:258 -msgid "Unlimited time" -msgstr "" - -#: emailPoubelle.php:259 -msgid "2 hours" -msgstr "" - -#: emailPoubelle.php:260 -msgid "6 hours" -msgstr "" - -#: emailPoubelle.php:261 -msgid "1 day" -msgstr "" - -#: emailPoubelle.php:262 -msgid "7 days" -msgstr "" - -#: emailPoubelle.php:263 -msgid "15 days" -msgstr "" - -#: emailPoubelle.php:264 -msgid "30 days" -msgstr "" - -#: emailPoubelle.php:265 -msgid "90 days" -msgstr "" - -#: emailPoubelle.php:269 -msgid "Comment for this trash email (for your to remember)" -msgstr "" - -#: emailPoubelle.php:270 -msgid "Ex : Inscription sur zici.fr" -msgstr "" - -#: emailPoubelle.php:273 -msgid "Activate" -msgstr "" - -#: emailPoubelle.php:362 -msgid "Version" -msgstr "" - -#: emailPoubelle.php:362 -msgid "Created by David Mercereau under licence GNU GPL v3" -msgstr "" - -#: emailPoubelle.php:363 -msgid "Download and use this script on the project website" -msgstr "" - -#: ep_function.php:93 -msgid "has been deleted with all these aliases" -msgstr "" - -#: ep_function.php:99 -msgid "Erreur" -msgstr "" - -#: ep_function.php:99 -msgid "has not been deleted" -msgstr "" - -#: ep_function.php:120 -msgid "has been deleted" -msgstr "" - -#: ep_function.php:126 -msgid "Error: email trash unknown" -msgstr "" - -#: ep_function.php:145 ep_function.php:173 -msgid "Error: Can not find this trash email" -msgstr "" - -#: ep_function.php:148 ep_function.php:150 ep_function.php:152 -#: ep_function.php:176 ep_function.php:178 ep_function.php:180 -msgid "The reception on" -msgstr "" - -#: ep_function.php:148 -msgid "is active again" -msgstr "" - -#: ep_function.php:150 -msgid "is already active" -msgstr "" - -#: ep_function.php:152 -msgid "has not been confirmed by email" -msgstr "" - -#: ep_function.php:154 ep_function.php:182 -msgid "Error: unknown status" -msgstr "" - -#: ep_function.php:176 -msgid "is now suspended" -msgstr "" - -#: ep_function.php:178 -msgid "is already suspended" -msgstr "" - -#: ep_function.php:180 -msgid "can not be suspended because it has not been activated yet" -msgstr "" - -#: ep_function.php:254 -msgid "List trash email activate" -msgstr "" - -#: ep_function.php:257 -msgid "List trash email disable" -msgstr "" - -#: ep_function.php:259 -msgid "Create " -msgstr "" - -#: ep_function.php:261 -msgid "and expires on" -msgstr "" - -#: ep_function.php:265 -msgid "Comment :" -msgstr "" - -#: ep_function.php:268 -msgid "Disable :" -msgstr "" - -#: ep_function.php:271 -msgid "Activate :" -msgstr "" - -#: ep_function.php:274 -msgid "Delete :" -msgstr "" - -#: ep_function.php:280 -msgid "List trash email" -msgstr "" diff --git a/src/lang/note.txt b/src/lang/note.txt deleted file mode 100644 index fd0d6ca..0000000 --- a/src/lang/note.txt +++ /dev/null @@ -1,11 +0,0 @@ -cp lib/ep_function.php . -xgettext *.php -o lang/messages.pot --from-code="UTF-8" -msgmerge --no-wrap -N lang/fr/LC_MESSAGES/messages.po lang/messages.pot > lang/fr/LC_MESSAGES/messages-new.po - -# Edit lang/fr/LC_MESSAGES/messages-new.po - -mv lang/fr/LC_MESSAGES/messages-new.po lang/fr/LC_MESSAGES/messages.po -mv lang/fr/LC_MESSAGES/messages-new.mo lang/fr/LC_MESSAGES/messages.mo -rm ep_function.php -msgfmt -o lang/fr/LC_MESSAGES/messages.mo -v lang/fr/LC_MESSAGES/messages.po - diff --git a/src/lib/blk.png b/src/lib/blk.png deleted file mode 100644 index d0eac5fb5e16a4260517e66587d1cedbb0c4bd38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 944 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 diff --git a/src/lib/en.png b/src/lib/en.png deleted file mode 100644 index 6d307158fb997eb283110ba7a34afe68b686d348..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1078 zcmV-61j+k}P)U0|++()dq?NPDiKn-sw3+|bFo2?M=uAQIf-(LS@|%;!x{&v;FkFwstEsK=iU60$eEsvtQX(9!LrK7ukhx-6n5>Mr07U3aERBnc zyO}Ar$U%mhtM>Wzben4IVk*V2UD(S!f2z&_b~ikMxh`jw#iT0T>hf)ot=sI*#Y8}G ztyWV|PhF5f)G01Fyw}65sr9w4(BFWK#pl1&=Dx_*w~LL!xlXZiHLQ#&mcU5l$? z_QJhDuHodN5UzE9^2aY0qS3t7E!EW28W$F=KQaKh>J49+#JshWNLSQuF{jh&c5O~V zk{=_VQ1GUpe2QN_kelNn6NI9b0g*CEi9OtOXtTMxI;yqpcy4c<#{g7Njy5mi0VnRv zIV>g{ntv-vZ)^MJiBBZfiXAynfym*zqD5zNNM>QOlRIW{?{p;S(Kdm?Z~%$N zsH{@mJmC^ab0{!ywoSK>p zgueRU<%^_7-MK8*(7+)e7eX2wPp_!s-x?SpBmjBASg}h0p5FjIfs(!ku-WimupdRP zRl98k0F~K)yx{iKF>$*=bd(A|w&#DHyMVmlKfW?yrI zl22J_X9Bt>`C|h3JAZp~kB<}on1GHEj_7ENnacYe-k8A&Cg5GUs4e>Wom})pL;S`M w?-a7isOsFGDveEBxb(jN+F0Py=l?5>FVAu>bFKCmf&c&j07*qoM6N<$f`;c80ssI2 diff --git a/src/lib/ep_function.php b/src/lib/ep_function.php deleted file mode 100644 index b608101..0000000 --- a/src/lib/ep_function.php +++ /dev/null @@ -1,492 +0,0 @@ - array(NS1, NS2))); - try { - $result = $r->query($domaine[1], 'MX'); - } catch(Net_DNS2_Exception $e) { - return false; - } - if ($result->answer) { - return true; - } else { - return false; - } - } else { - return true; - } -} - -// postmap command -function UpdateVirtualDB() { - global $dbco; - try { - $selectcmd = $dbco->prepare("SELECT status, alias, email - FROM ".DBTABLEPREFIX."alias - WHERE status > 0 - ORDER BY alias ASC"); - $selectcmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - $file_content=null; - while($alias_db = $selectcmd->fetch()) { - if ($alias_db['status'] == 5) { - $file_content .= $alias_db['alias'].' '.$alias_db['email']."\n"; - } else if ($alias_db['status'] == 3) { - $file_content .= $alias_db['alias']." devnull\n"; - } - } - $alias_file=fopen(FICHIERALIAS,'w'); - fputs($alias_file, $file_content); - fclose($alias_file); - exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); -} - -// add new alias -function AjouterAlias($status, $alias,$email, $life, $comment) { - global $dbco; - $dateCreat=date('Y-m-d H:i:s'); - if ($life == 0) { - $dateExpir=NULL; - } else { - $dateExpir=date('Y-m-d H:i:s', time()+$life); - } - try { - $insertcmd = $dbco->prepare("INSERT INTO ".DBTABLEPREFIX."alias (status, alias, email, dateCreat, dateExpir, comment) - VALUES (:status, :alias, :email, :dateCreat, :dateExpir, :comment)"); - $insertcmd->bindParam('status', $status, PDO::PARAM_INT); - $insertcmd->bindParam('alias', $alias, PDO::PARAM_STR); - $insertcmd->bindParam('email', $email, PDO::PARAM_STR); - $insertcmd->bindParam('dateCreat', $dateCreat, PDO::PARAM_STR); - $insertcmd->bindParam('dateExpir', $dateExpir, PDO::PARAM_STR); - $insertcmd->bindParam('comment', $comment, PDO::PARAM_STR); - $insertcmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - UpdateVirtualDB(); - if (preg_match('/^sqlite/', DB)) { - return $dbco->lastInsertId(); - } else { - $stmt = $dbco->query("SELECT LAST_INSERT_ID()"); - return $stmt->fetchColumn(); - } - -} - -// delete email -function DeleteEmail($email) { - global $dbco; - if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."'")->fetchColumn() != 0) { - try { - $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE email = :email"); - $deletecmd->bindParam('email', $email, PDO::PARAM_STR); - $deletecmd->execute(); - echo '
'.$email.' '._('has been deleted with all these aliases').'.
'; - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - } else { - echo '
'._('Erreur').' : '.$email.' '._('has not been deleted').'.
'; - } - UpdateVirtualDB(); -} - -function AddBlacklistEmail($email) { - $contenu = '/^'.$email.'$/'; - $fichier = fopen(BLACKLIST, 'a'); - fwrite($fichier, $contenu."\n"); - fclose($fichier); - echo '
La mention '.$contenu.' a été ajouté au fichier de blackliste '.BLACKLIST.'
'; -} -// delete alias -function DeleteAlias($id, $alias_full) { - global $dbco; - if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias_full."' AND id = ".$id)->fetchColumn() != 0) { - try { - $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); - $deletecmd->bindParam('id', $id, PDO::PARAM_INT); - $deletecmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); - $deletecmd->execute(); - echo '
'.$alias_full.' '._('has been deleted').'
'; - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - } else { - echo '
'._('Error: email trash unknown').'
'; - } - UpdateVirtualDB(); -} - -// enable alias -function EnableAlias($id, $alias_full, $email) { - global $dbco; - if ($id == null) { - $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE email = :email AND alias = :alias_full"); - $selectcmd->bindParam('email', $email, PDO::PARAM_STR); - } else { - $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); - $selectcmd->bindParam('id', $id, PDO::PARAM_INT); - } - $selectcmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); - $selectcmd->execute(); - $alias_fetch = $selectcmd->fetch(); - if (! $alias_fetch) { - echo '
'._('Error: Can not find this trash email').'
'; - } else if ($alias_fetch['status'] == 3) { - UpdateStatusAlias($alias_fetch['id'], $alias_full, 5); - echo '
'._('The reception on').' '.$alias_full.' '._('is active again').'.
'; - } else if ($alias_fetch['status'] == 5) { - echo '
'._('The reception on').' '.$alias_full.' '._('is already active').'.
'; - } else if ($alias_fetch['status'] == 0) { - echo '
'._('The reception on').' '.$alias_full.''; - } else { - echo '
'._('Error: unknown status').'
'; - } - UpdateVirtualDB(); -} - -// disable alias -function DisableAlias($id, $alias_full, $email) { - global $dbco; - if ($id == null) { - $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE email = :email AND alias = :alias_full"); - $selectcmd->bindParam('email', $email, PDO::PARAM_STR); - } else { - $selectcmd = $dbco->prepare("SELECT id,status FROM ".DBTABLEPREFIX."alias WHERE id = :id AND alias = :alias_full"); - $selectcmd->bindParam('id', $id, PDO::PARAM_INT); - } - $selectcmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); - $selectcmd->execute(); - $alias_fetch = $selectcmd->fetch(); - if (! $alias_fetch) { - echo '
'._('Error: Can not find this trash email').'
'; - } else if ($alias_fetch['status'] == 5) { - UpdateStatusAlias($alias_fetch['id'], $alias_full, 3); - echo '
'._('The reception on').' '.$alias_full.' '._('is now suspended').'.
'; - } else if ($alias_fetch['status'] == 3) { - echo '
'._('The reception on').' '.$alias_full.' '._('is already suspended').'.
'; - } else if ($alias_fetch['status'] == 0) { - echo '
'._('The reception on').' '.$alias_full.' '._('can not be suspended because it has not been activated yet').'.
'; - } else { - echo '
'._('Error: unknown status').'
'; - } - UpdateVirtualDB(); -} - -// update alias status -function UpdateStatusAlias($id, $alias_full, $status) { - global $dbco; - try { - $updatecmd = $dbco->prepare("UPDATE ".DBTABLEPREFIX."alias SET status = $status WHERE id = :id AND alias = :alias_full"); - $updatecmd->bindParam('id', $id, PDO::PARAM_INT); - $updatecmd->bindParam('alias_full', $alias_full, PDO::PARAM_STR); - $updatecmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - UpdateVirtualDB(); -} - -// parse file for blacklist and aliasdeny -function parseFileRegex($file, $chaine) { - $return=false; - $handle = fopen($file, 'r'); - while (!feof($handle)) { - $buffer = fgets($handle); - $buffer = str_replace("\n", "", $buffer); - if ($buffer) { - if (!preg_match('/^(#|$|;)/', $buffer) && preg_match($buffer, $chaine)) { - $return=true; - break; - } - } - } - fclose($handle); - return $return; -} - -// check blacklistemail -function BlacklistEmail($email) { - if (defined('BLACKLIST')) { - return parseFileRegex(BLACKLIST, $email); - } else { - return false; - } -} - -// check aliasdeny -function AliasDeny($alias) { - if (defined('ALIASDENY')) { - return parseFileRegex(ALIASDENY, $alias); - } else { - return false; - } -} - -// list alias -function ListeAlias($email) { - global $dbco; - try { - $selectcmd = $dbco->prepare("SELECT id, status, alias, dateCreat, dateExpir, comment - FROM ".DBTABLEPREFIX."alias - WHERE email = :email AND status > 0 - ORDER BY status DESC"); - $selectcmd->bindParam('email', $email, PDO::PARAM_STR); - $selectcmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } - $nb_alias=0; - $nb_alias_disable=0; - $message= "## "._('List trash email activate')." : \n\n"; - while($alias_db = $selectcmd->fetch()) { - if ($alias_db['status'] == 3 && $nb_alias_disable == 0) { - $message.= "## "._('List trash email disable')." : \n\n"; - } - $message.=" * ".$alias_db['alias']." "._('Create ')." ".$alias_db['dateCreat']; - if ($alias_db['dateExpir']) { - $message.=" "._('and expires on')." ".$alias_db['dateExpir']; - } - $message.="\n"; - if ($alias_db['comment']) { - $message.="\t"._('Comment :')." ".$alias_db['comment']."\n"; - } - if ($alias_db['status'] == 5) { - $message.="\t"._('Disable :')." ".urlGen('disable',$alias_db['id'],$alias_db['alias'])."\n"; - $nb_alias++; - } else { - $message.="\t"._('Activate :')." ".urlGen('enable',$alias_db['id'],$alias_db['alias'])."\n"; - $nb_alias_disable++; - } - $message.="\t"._('Delete :')." ".urlGen('delete',$alias_db['id'],$alias_db['alias'])."\n\n"; - } - $nb_alias_total = $nb_alias + $nb_alias_disable; - if ($nb_alias_total == 0) { - return false; - } else { - SendEmail($email,_('List trash email'),$message); - return true; - } -} - -function SendEmail($recipient, $sujet, $message) { - $header = "From: ".EMAILFROM."\n"; - $header.= "MIME-Version: 1.0\n"; -/* - if (preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $recipient)) { - $header = str_replace("\n", "\r\n", $header); - $message = str_replace("\n", "\r\n", $header); - } -*/ - $message="Bonjour,\n\n".$message."\n\n". - mail($recipient,EMAILTAGSUJET.' '.$sujet,$message,$header); -} - -function urlGen($act,$id,$alias_full) { - $idUrl=base64_encode($id.';'.$alias_full); - if (URLREWRITE_START && URLREWRITE_MIDDLE && URLREWRITE_END) { - return URLREWRITE_START.$act.URLREWRITE_MIDDLE.$idUrl.URLREWRITE_END; - } else { - return URLPAGE."?act=".$act."&value=".$idUrl; - } -} -function urlUnGen($get_value) { - $explode_get_value = explode(';', base64_decode($get_value)); - $return['id']=$explode_get_value[0]; - $return['alias_full']=$explode_get_value[1]; - return $return; -} - -// Source http://css-tricks.com/serious-form-security/ -function StripCleanToHtml($s){ - // Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: " etc.) - // Also strips any tags it may encouter - // Use: Anything that shouldn't contain html (pretty much everything that is not a textarea) - return htmlentities(trim(strip_tags(stripslashes($s))), ENT_NOQUOTES, "UTF-8"); -} -function CleanToHtml($s){ - // Restores the added slashes (ie.: " I\'m John " for security in output, and escapes them in htmlentities(ie.: " etc.) - // It preserves any tags in that they are encoded aswell (like <html>) - // As an extra security, if people would try to inject tags that would become tags after stripping away bad characters, - // we do still strip tags but only after htmlentities, so any genuine code examples will stay - // Use: For input fields that may contain html, like a textarea - return strip_tags(htmlentities(trim(stripslashes($s))), ENT_NOQUOTES, "UTF-8"); -} - -////////////////// -// Admin function -////////////////// - -function CheckUpdate() { - if (CHECKUPDATE) { - if (! is_file(DATA.'/checkupdate') || filemtime(DATA.'/checkupdate') + CHECKUPDATE < time()) { - $ep_get_version = @file_get_contents('http://poubelle.zici.fr/ep_checkupdate'); - $ep_version_file=fopen(DATA.'/checkupdate','w'); - fputs($ep_version_file, $ep_get_version); - fclose($ep_version_file); - if (DEBUG) { echo 'ep_checkupdate_downloaded : '.file_get_contents(DATA.'/checkupdate').'\n'; } - } - $file_current_version = trim(file_get_contents(DATA.'/checkupdate')); - if ($file_current_version != '' && $file_current_version != VERSION) { - return '

Upgrade note: Your version is in '.VERSION.' while the current version is in '.$file_current_version.'

'; - } else { - return false; - } - } -} - -function LifeExpire() { - global $dbco; - try { - $deletecmd = $dbco->prepare("DELETE FROM ".DBTABLEPREFIX."alias WHERE dateExpir IS NOT NULL AND dateExpir < '".date('Y-m-d H:i:s')."'"); - $deletecmd->execute(); - } catch ( PDOException $e ) { - echo "DB error : ", $e->getMessage(); - die(); - } -} - -// Vérifie que le domaine de l'alias est bien dans la configuration -function domainePresent($postDom) { - $domains = explode(';', DOMAIN); - $return=true; - if (count($domains) == 1) { - if (!preg_match('#'.$postDom.'#',DOMAIN)) { - $return=false; - } - } else { - foreach ($domains as $one_domain) { - if (!preg_match('#'.$postDom.'#',$one_domain)) { - $return=false; - } - } - } - return $return; -} -// Vérifie que l'email n'est pas un alias avec un domain "poubelle" (éviter boucle forward) -function emailIsAlias($postemail) { - $domains = explode(';', DOMAIN); - $return=false; - if (count($domains) == 1) { - if (preg_match('#'.DOMAIN.'$#',$postemail)) { - $return=true; - } - } else { - foreach ($domains as $one_domain) { - if (preg_match('#'.$one_domain.'$#',$postemail)) { - $return=true; - } - } - } - return $return; -} - - -function get_ip() { - // IP si internet partagé - if (isset($_SERVER['HTTP_CLIENT_IP'])) { - return $_SERVER['HTTP_CLIENT_IP']; - } - // IP derrière un proxy - elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { - return $_SERVER['HTTP_X_FORWARDED_FOR']; - } - // Sinon : IP normale - else { - return (isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ''); - } -} - -// Fonction langues : -function languesSwitch() { - echo ' -
-
- - fr - it - en -
-
'; -} - -function lang2locale($langue) { - global $langueEtLocalDispo; - if ($langueEtLocalDispo[$langue] != '') { - return $langueEtLocalDispo[$langue]; - } else { - // par défaut - return 'en_US'; - } -} -function locale2lang($localeRecherche) { - global $langueEtLocalDispo; - foreach($langueEtLocalDispo as $code=>$locale) { - if ($locale == $localeRecherche) { - return $code; - break; - } - } - // par défaut - return 'en'; -} - -// Ajoute la langue à une URL qui n'en a pas -function addLang2url($lang) { - global $_SERVER; - $URIexplode=explode('?', $_SERVER['REQUEST_URI']); - if ($URIexplode[1] != '') { - return $URIexplode[0].$URIexplode[1].'&langue='.$lang; - } else { - return $URIexplode[0].'?langue='.$lang; - } -} -function replaceLang2url($lang) { - global $_SERVER; - $URIexplode=explode('?', $_SERVER['REQUEST_URI']); - $debutUrl=substr($URIexplode[0], 0, -langCountChar($URIexplode[0])); - if ($URIexplode[1] != '') { - return $debutUrl.$lang.'?'.$URIexplode[1]; - } else { - return $debutUrl.$lang; - } -} -function langCountChar($url) { - // $url reçu c'est l'URL avant la query : ?machin=1 - if (preg_match('#/sr-Cyrl-ME$#',$url)) { - return 10; - } elseif (preg_match('#/[a-z]{2}-[A-Z]{2}$#',$url)) { - return 5; - } elseif (preg_match('#/[a-z]{3}-[A-Z]{2}$#',$url)) { - return 6; - } elseif (preg_match('#/[a-z]{3}$#',$url)) { - return 3; - } elseif (preg_match('#/[a-z]{2}$#',$url)) { - return 2; - } -} -?> diff --git a/src/lib/ep_header.php b/src/lib/ep_header.php deleted file mode 100644 index dfa88e8..0000000 --- a/src/lib/ep_header.php +++ /dev/null @@ -1,67 +0,0 @@ - 'fr_FR', - 'en' => 'en_US', - 'it' => 'it_IT', - ); - - -// Détection et redirection (langue toujours) -if (isset($_POST['langSwitch'])) { - $locale = lang2locale($_POST['langSwitch']); - $localeshort=locale2lang($locale); - if ($_COOKIE['langue'] != $localeshort) { - setcookie("langue",$localeshort,strtotime( '+1 year' )); - } -} elseif (isset($_COOKIE['langue'])) { - $locale = lang2locale($_COOKIE['langue']); - $lang=locale2lang($locale); - //header('Location: '.addLang2url($lang)); -} else { - $HTTP_ACCEPT_LANGUAGE=$_SERVER['HTTP_ACCEPT_LANGUAGE']; - //echo $HTTP_ACCEPT_LANGUAGE.'
'; - $lang_from_http_accept = explode(',', $HTTP_ACCEPT_LANGUAGE); - //echo $lang_from_http_accept[0].'
'; - $locale = lang2locale($lang_from_http_accept[0]); - if (substr($locale,0,2) != substr($lang_from_http_accept[0],0,2)) { - //echo "Non trouvé, 2ème tentative"; - $lang_from_http_accept = explode('-', $lang_from_http_accept[0]); - //echo $lang_from_http_accept[0].'
'; - $locale = lang2locale($lang_from_http_accept[0]); - } - //echo $locale.'
'; - $lang = locale2lang($locale); - //echo $lang.'
'; -} - -// Définition de la langue : -$results=putenv("LC_ALL=$locale.utf8"); -if (!$results) { - exit ('putenv failed'); -} -$results=putenv("LC_LANG=$locale.utf8"); -if (!$results) { - exit ('putenv failed'); -} -$results=putenv("LC_LANGUAGE=$locale.utf8"); -if (!$results) { - exit ('putenv failed'); -} -$results=setlocale(LC_ALL, "$locale.utf8"); -if (!$results) { - exit ('setlocale failed: locale function is not available on this platform, or the given local does not exist in this environment'); -} -bindtextdomain("messages", LANG); -textdomain("messages"); - -?> diff --git a/src/lib/fr.png b/src/lib/fr.png deleted file mode 100644 index 1b14ae3215b36154e7b9271ee9a2b81de6bb40e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 914 zcmV;D18w|?P)U0|++()dq?NPDiKn-sw3+|bFo2?M=uAQIf-(LS@|%;!x{&v;FkFwstEsK=iU60$eEsvtQX(9!LrK7ukhx-6n5>Mr07U3aERBnc zyO}Ar$U%mhtM>Wzben4IVk*V2UD(S!f2z&_b~ikMxh`jw#iT0T>hf)ot=sI*#Y8}G ztyWV|PhF5f)G01Fyw}65sr9w4(BFWK#pl1&=Dx_*w~LL!xlXZiHLQ#&mcU5l$? z_QJhDuHodN5UzE9^2aY0qS3t7E!EW28W$F=KQaKh>J49+#JshWNLSQuF{jh&c5O~V zk{=_VQ1GUpe2QN_kelNn6NI9b0g*CEi9OtOXtTMxI;yqpcy4c<#{g7Njy5mi0VnRv zIV>g{ntv-vZ)^MJiBBZfiXAynfym*zqD5zNNM>QOlRIW{?{p;S(Kdm?Z~%$N zsH{@mJmC^ab0{!ywoSK>p zgueRU<%^_7-MK8*(7+)e7eX2wPp_!s-x?SpBmjBASg}h0p5FjIfs(!ku-WimupdRP zRl98k0F~K)yx{iKF>$*=bd(A|w&#DHyMVmlKfU0|++()dq?NPDiKn-sw3+|bFo2?M=uAQIf-(LS@|%;!x{&v;FkFwstEsK=iU60$eEsvtQX(9!LrK7ukhx-6n5>Mr07U3aERBnc zyO}Ar$U%mhtM>Wzben4IVk*V2UD(S!f2z&_b~ikMxh`jw#iT0T>hf)ot=sI*#Y8}G ztyWV|PhF5f)G01Fyw}65sr9w4(BFWK#pl1&=Dx_*w~LL!xlXZiHLQ#&mcU5l$? z_QJhDuHodN5UzE9^2aY0qS3t7E!EW28W$F=KQaKh>J49+#JshWNLSQuF{jh&c5O~V zk{=_VQ1GUpe2QN_kelNn6NI9b0g*CEi9OtOXtTMxI;yqpcy4c<#{g7Njy5mi0VnRv zIV>g{ntv-vZ)^MJiBBZfiXAynfym*zqD5zNNM>QOlRIW{?{p;S(Kdm?Z~%$N zsH{@mJmC^ab0{!ywoSK>p zgueRU<%^_7-MK8*(7+)e7eX2wPp_!s-x?SpBmjBASg}h0p5FjIfs(!ku-WimupdRP zRl98k0F~K)yx{iKF>$*=bd(A|w&#DHyMVmlKfzZPu0000ONkl b(?uKrUZPV#+@CI100000NkvXXu0mjf+bX?> diff --git a/src/lib/status0.png b/src/lib/status0.png deleted file mode 100644 index 12d374f2d24dd6de43a0de002cf6de1ed18cb518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEbHUgGKN%KnI1h)6S#WBR<^wP@?T;4D&@tXrwC>)z^*npb z_rL#h?~L?6$z*#~_R4w5+{GCS4~SYta_sdwpm09Cpy_HC^ZbIA%Q`Lp%pFAH6CUzk z&lfD3(|RF)D%V}XBL=;)Yw9gKZ0CpH^>n?Hplo?#oo1V=j{1R`X7M?Pe3*L7=Qgwa z$XHP8K9ONNFGKkb|Aw=(9x>h3X^G?BBp|mj`tUEsb%~2YUK}ZXFaFV(ufWXYRN;bK z5l8H<8AyKL^T4QXS$kmJW1U+|uVm*GYuGX7zq1yfTq&^u7yt~Ou6{1-oD!MbHUgGKN%KnI1h)-AQuU&N!Q0TL#i(`nz>9v>Fda(wI9Q`;y{9~J^ z*z7>TBPlZs{1;qRX=7|YsPco0%~aFPQQ`xyOYgFc9Vf*H z=WH^6ecq~j@6Tl3+Usjh)rfwU;9e{JMm@6ds(8TE$}Zg{8Sab2Z60!1dxqK6FtU7P zO#5w7cTCZ&dP11V9ccxzn6(KTuV=W{`(;17b}T6LS@Fi^r)>|eOGLb z59Keo9&r6&GS7`%4vXVQtrbpo8OvN3x!<1ps_t9@v%2Y#*E{}YPF3G1_AY_xaN-r- xY1<2DrW`%JAUW!QiJQ}FvE`m&C4b8IGTtn=sH$AHYa!7444$rjF6*2UngA!EirN4G diff --git a/src/lib/status5.png b/src/lib/status5.png deleted file mode 100644 index 4cb5f4bcc13e54002c8487a66cd62ac2353a484a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 355 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkEbHUgGKN%KnI1h)-A7wfSBxQ0RlFi(`nz>9v;)y$=V79Q_!touc*b zt<($g7tfXy7ruO_#j(!mE^D|t^SY+lkt*Hsj$Ds4N_uB2giToV=u^<82|~>CKHe$+ zcjx!LT3J)6^Xj!&N7M8(F?b@ v^v&LIs#13Wi&Ua~bHdXd+PD6N|78;TX?y#6i5Jei0#Y0$L4LviA%Njt^WI31l&6bhNX4zB1b1cz#v=#L9XQ1BeB*}A z%q#-T*4)b4(o?t>F*0#zoIb=Q$oTmtkhx|Ks|wRYkOCL`0G3nf>>LU!8g&ecZvf@i zF{v>LIB*y*Py(9O5Wuep(t6;`5vIViTuKZ~9gTA(-x+M+aA06$eNbb-z@e}}OvNsM m(}BTo!EZ5z1_KrbCLV@_U2LV?JKcpq4)=8Rb6Mw<&;$Tia9maZ diff --git a/src/var/aliasdeny.txt b/src/var/aliasdeny.txt deleted file mode 100644 index e3cb516..0000000 --- a/src/var/aliasdeny.txt +++ /dev/null @@ -1,22 +0,0 @@ -/^root$/ -/^mail$/ -/^email$/ -/^test$/ -/^toto$/ -/^www-data$/ -/^www-owne$/ -/^manager$/ -/^admin$/ -/postmaster/ -/^MAILER-DAEMON$/ -/^abuse$/ -/^spam$/ -/^backup$/ -/^list$/ -/^nobody$/ -/^vmail$/ -/^mysql$/ -/^web$/ -/^git$/ -/^mail$/ -/^[1-9]+$/ diff --git a/src/var/blacklist.txt b/src/var/blacklist.txt deleted file mode 100644 index 407e9a0..0000000 --- a/src/var/blacklist.txt +++ /dev/null @@ -1,7 +0,0 @@ -/^exemple@exemple.com$/ -/.pl$/ -/^exemple[1-9]+@toto.fr$/ -/@yopmail.com$/ -/^harou/ -/@gmx.com$/ -/^sportnet/ diff --git a/src/www/admin.php b/src/www/admin.php deleted file mode 100644 index 23d29eb..0000000 --- a/src/www/admin.php +++ /dev/null @@ -1,197 +0,0 @@ - - - -emailPoubelle Admin - Template-exemple - - - - - - - - -
-
- OWMX-2 HTML5 & CSS3 -
-
-
-

-

-

.

- -

Let the Show Begin - Pre and Code

-

This is how it looks if you use pre and code together, for example to highlight and nicely markup a piece of code:

-
pre {
font-size : 12px;
background : #F0F0F0;
}
-

Example Blockquote

-

If you want to quote somebody, you can use this perfectly semantic example for a blockquote:

- Jonas Jacek -
- During my years in the Internet Marketing business I have seen and done many things I never thought would be of interest to me or anyone else. -
-

Examples Alerts, Notice & Confirmation

-

These sample styles for alerts and notices are useful if you want to use the template in content management systems.

-

Alert: This is how an alert looks like.

-

Notice: This is how a notice looks like.

-

Confirmation: This is how a confirmation looks like.

-

Example Table

-

The following is the design for a table. The style is simple and user-friendly. Some of the effects were made with CSS3.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Mini HTML5 Reference Guide
TagInfoAttributes
<abbr>abbreviationglobal attributes**
<area>in an image map alt, coords, href, hreflang, media, ping, rel, shape, target, type
<article>article/ contentglobal attributes**
<aside>sidebarglobal attributes**
<audio>sound contentautobuffer, autoplay, controls, loop, src
<b>bold textglobal attributes**
-

Example hCalendar

-

The following is a definition list in combination with the hCalendar microformat.

-
-
11-18-2010
-
Conference Name
-
http://www.conference-website.com/
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec eleifend diam. Fusce lobortis odio ac sem scelerisque sed iaculis purus ornare.
-
-

Example Video

-

You can put your Video-Files here...

- -

Example Audio

-

You can put your Audio-Files here...

- -

Example Lists

-

Two different kinds of lists were styled: Ordered lists (ol) and unordered (ul) lists.

-
    -
  1. This is
  2. -
  3. The Ordered
  4. -
  5. Listing
  6. -
-
    -
  • This is
  • -
  • The Unordered
  • -
  • Listing
  • -
-

Example Form

-

This is how a form will look like in this template.

-
- - - - - - -
- -
-
-

Author: Jonas Jacek | Date: 2010-01-21 | Comments: 7

-

Tags: , , ,

-
-
- -
- -
- diff --git a/src/www/index.php b/src/www/index.php deleted file mode 100644 index 444d413..0000000 --- a/src/www/index.php +++ /dev/null @@ -1,36 +0,0 @@ - - - -emailPoubelle - Template-exemple - - - - - - - - -
-
- OWMX-2 HTML5 & CSS3 -
-
-
-

-

.

- -
-
- diff --git a/src/www/template-exemple/ai1.png b/src/www/template-exemple/ai1.png deleted file mode 100644 index 62ed67abfb07b33b33063d84492b19eeaedfb6f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c8!3HGtQ{P+wQjEnx?oJHr&dIz4a`Zf1978y+ zCksSXe6nX2N=QmbNN^BKX);V`>WSET;K1&RVmGxEKIUDGJV3zk>?wb>*Yd?vfjSvH MUHx3vIVCg!07SJQeEEaktaVsey&57|0k55KJ4kH_zfRkWDw}Ypf+YAmpMjqW4 iZ9y-BO5QWGNHBaYVmuqSJNXb$CxfS}pUXO@geCwV8$Hed diff --git a/src/www/template-exemple/ai4.png b/src/www/template-exemple/ai4.png deleted file mode 100644 index 581eeecacb4900553a0a5ec727a557c9d80184c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 195 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3HF~3v%Lt6k~CayA#8@b22Z19JVBHcNd2L zAh=-f^2tCE&H|6fVxSgb5N2eUHAey{$X?><>&kwMlb4%W@a*BuQ-MOxo-U3d8t3;; z*vQLZz;RfpuXXl|%`dO4U9sWH=CvFeoIR>00al#nr_~tnY)q=!7vTEMqDagj%znp7 ih7S+ddZmYlS(#4{6zA07tNQ^oj=|H_&t;ucLK6TXk~-G_ diff --git a/src/www/template-exemple/ai5.png b/src/www/template-exemple/ai5.png deleted file mode 100644 index a59b68cc832eb1dec978a0402016e420a0b9579b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CN!3-p8*3HQUQY`6?zK#qG>ra@ocD)4hB}-f* zN`mv#O3D+9QW+dm@{>{(JaZG%Q-e|yQz{EjrrH1%aR&H=xc>kDzoVlANUE0C)B**W zOM?7@|Nm#Weu@`pAcLx>i(^Q|t)zsc7G^azHi#U+E>v1sPKu-ge&}h iMhrC-t8>dzZ^x|65!)*4CjJj-8iS{+pUXO@geCxuF)Hi; diff --git a/src/www/template-exemple/ai7.png b/src/www/template-exemple/ai7.png deleted file mode 100644 index 2605b61bfcc03039d3c11cd1c741f47d610c522f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^%plCc1|-8Yw(bW~jKx9jP7LeL$-D$|WJ+8kN}Tg^ zb5rw57&1yq3as??%gf94vJ#W3^zw_+^?$ybaR#VP+SA1`gyVX00uTs9ReZ8%1_I?C dMs@>6hG~!3izn-PZviS}@O1TaS?83{1OWblB~t(Z diff --git a/src/www/template-exemple/ai8.png b/src/www/template-exemple/ai8.png deleted file mode 100644 index ad328538ddf5f5e5ef5b882406eab07077d868a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 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

) 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�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 X7n6YS_|pXJBJyw^9~xkzL4W_*ns?F` diff --git a/src/www/template-exemple/html5-ie.js b/src/www/template-exemple/html5-ie.js deleted file mode 100644 index 3fd3ade..0000000 --- a/src/www/template-exemple/html5-ie.js +++ /dev/null @@ -1,10 +0,0 @@ -document.createElement("header"); -document.createElement("footer"); -document.createElement("section"); -document.createElement("aside"); -document.createElement("nav"); -document.createElement("article"); -document.createElement("figure"); -document.createElement("figcaption"); -document.createElement("hgroup"); -document.createElement("time"); diff --git a/src/www/template-exemple/image-1.png b/src/www/template-exemple/image-1.png deleted file mode 100644 index 3df828fa6d960965716327993cc74d0d5128459b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^DIm{XE)7O>#7AG%{DfgaFXXSxH3p`yMLn>~)yGG!Pz5tYPD}zbxKd7n8LXQi3?`r&kVqp)@ySU`9l*LyQm*~l acGiw#jK>eZ-trUZRt8U3KbLh*2~7ZsR$Ax) diff --git a/src/www/template-exemple/img1.png b/src/www/template-exemple/img1.png deleted file mode 100644 index 2f7da4971d5c32b91634f474150902aa41f37b45..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8337 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

iicXsve+bwTR zoqQ&NGCuLZ*7j1eM?wGg3z~Ncy5L}dU}i1orI$^CeP_gM>=)#)T4u4NpkGYo_&4Y zgF4+riL_-dT=_xwfxGYOy028gjtL+A`&w*gRmHmVQ(?C^+*gmkOcD(qa>h+(Y81`d0n$J&XpG04e?@>`{n*1d5Qf@v#?XxJ!Hq(#I+ zF^phasm^>Jkv=?sK9f#sMaT?d;-DFL&04vL%rbd!?7ow~Q){)p_1*6;%`ay=v;an7 zoXht$8dWxNt+A;^tVUVu2VPlxT`a@vAh(8cG9-e`H2#^ zq3_282*@JZvPdbU*mj-RsMUqdrG>@WnU71wqPCQ+9j&wtabzSm0${`d07xWUt=53x zkH7JIufB8Pr$7C9DxC@9xUX-p;d`lc7Ly}gT~B$bEr_E;R)V3$y%<$BMVcgi=-11tDwyehtN^4Y#Q046Wcfa$!M#Cqi5yZAF0AyoyZF`R6 zNQ_|EWRN2}3)FWqfA_~NM@4a)s_0_M}E9Yjy3ZOP|Y>Wsbqg! zX{};5VmM|NW=m;&^KZW?Y?uwV8)q@X=(z6WuY66}E~7<+Q5=PV7kG_Uz2vu=Ci0@t zlPFeb5Je#%YD7iaCM0c%>$pJ}iLg@Ib~D;d8Q)XLfC>SSw6up8QrfaDH*xLUi@xs% zVaUv0vl&E@MrN(iFaaY=j7%a%qWbOkzK0AVkukgXzao{N;Le|Q* zqaaY)s@0pW#2gF9aU$)u8lL0Y0%YPaiXs*=zCX8I)}#_H4i9B4t=HCTYz%_*^<@xc zx6YeeboswiI*h b*w+6A{sVuo1Y&!D00000NkvXXu0mjf-k$!) diff --git a/src/www/template-exemple/img2.png b/src/www/template-exemple/img2.png deleted file mode 100644 index 7f96f2a5dab6f54907b485fe236226c3fbd261e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7656 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 UIJiRKfB*mh07*qoM6N<$g0}&H`v3p{ diff --git a/src/www/template-exemple/img4.png b/src/www/template-exemple/img4.png deleted file mode 100644 index 7e97bb4d46fac6419b86b2150400570106f90a89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5672 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 diff --git a/src/www/template-exemple/readme.txt b/src/www/template-exemple/readme.txt deleted file mode 100644 index bc86176..0000000 --- a/src/www/template-exemple/readme.txt +++ /dev/null @@ -1,34 +0,0 @@ -#################################################### -# License # -#################################################### - -This W3C-compliant, CSS-based website template has a -Creative Commons Attribution-Share Alike 3.0 -Unported License. ->> http://creativecommons.org/licenses/by-sa/3.0/ - - -#################################################### -# What You Can Do # -#################################################### - -Feel free to remix, copy, distribute and transmit -this template. All I ask is that you keep the -footer links in the template intact. Also, if you -alter, transform, or build upon this work, you -may distribute the resulting work only under the -same, similar or a compatible license. - - -#################################################### -# Feedback & Action # -#################################################### - -I'd love to get your feedback on the template. -Please contact me with your critics, ideas, etc. ->> http://www.jabz.info/contact/jonas-jared-jacek/ - -If you like to contribute your remix, I will be -more than happy to put your version on owmx.com -and credit you in http://www.owmx.com/credits/. - diff --git a/src/www/template-exemple/style.css b/src/www/template-exemple/style.css deleted file mode 100644 index 3342dc4..0000000 --- a/src/www/template-exemple/style.css +++ /dev/null @@ -1,442 +0,0 @@ -/*================================================== -Template: OWMX-2 -Resource: http://www.owmx.com/ -Version: 1.0 -Date: 2010-09-13 -Editor: Jonas Jacek -License: CC Attribution-Share Alike 3.0 Unported -==================================================*/ - -/* Reset */ -header, footer, article, nav, section, aside, time, hgroup { - display : block; -} -html, body, header, footer, article, nav, section, aside, time, h1, h2, h3, p, a, ul, li, dl, dd, dt, table, thead, tfoot, tbody, th, tr, td { - border : 0; - font : 12px/22px Verdana, sans-serif; - margin : 0; - outline : 0; - padding : 0; -} - -/* BASICS */ -BODY { - background : #FFF; - border-top : 5px solid #FFF; - color : #444; -} - -A { - color : #0A647C; - text-decoration : none; - } - A:HOVER { - color : #DB0202; - } - -H1, H3, H4, H5, H6 { - background : url(./ai4.png) no-repeat 0 7px; - border-bottom : 1px dotted #B5B3A9; - color : #333; - font-weight : bold; - margin : 0 0 10px; - padding : 0 0 0 25px; - } - H1 { - background : url(./ai4.png) no-repeat 0 6px; - font-size : 15px; - } - H2 { - font-size : 14px; - margin : 0 0 20px 0; - } - H3 { - background : url(./ai5.png) no-repeat 0 7px; - } - H3, H4, H5, H6 { - font-size : 13px; - } - -SUP { - top : -4px; -} - -/* Header */ -header { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - background : #006699 url(./hd.jpg) no-repeat top left; - margin : 0 0 10px 0; - padding : 10px 10px; - position : relative; - } - header a { - color : #FFF; - font-size : 16px; - } - header a:hover { - color : #FFF; - } - -/* Article */ -article { - border-left : 1px dotted #666; - float : right; - height : auto; - padding : 0 0 0 20px; - width : 560px; - } - article p { - margin : 0 0 20px 0; - } - article img { - float : left; - margin : 6px 10px 0 0; - } - -/* Highlighted Paragraphs */ -.highlight-1, .highlight-2, .highlight-3 { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - padding : 5px 10px; -} - .highlight-1 { - background : #FFCCCC; - border : 1px dotted #FF9966; - } - .highlight-2 { - background : #FFFF99; - border : 1px dotted #FFCC33; - } - .highlight-3 { - background : #CCFF99; - border : 1px dotted #CCCC33; - } - -/* Citations & Quotes */ -cite { - border-left: 2px solid #006699; - color : #666; - font-size : 10px; - font-style : normal; - font-weight : bold; - margin : 0; - padding : 5px 10px; -} - -blockquote { - border-left: 2px solid #006699; - color : #666; - margin : 0 0 20px 0; - padding : 5px 10px; -} - -/* Pre & Code */ -pre { - color : #333; - font-size : 10px; - line-height : 15px; /*--Height of each line of code--*/ - overflow : hidden; /*--If the Code exceeds the width, put "auto" and scrolling is available--*/ - overflow-Y : hidden; /*--Hides vertical scroll created by IE--*/ - } - pre code { - background : #EEE; - border-left : 2px solid #006699; - margin : 0 0 10px 0; - padding : 5px; - display : block; - } - -/* Table */ -table { - border-collapse : collapse; - text-align:left; - margin : 0 0 20px 0; - } - caption { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - background : #006699; - color : #FFF; - font-weight : bold; - } - tr:nth-child(odd) { - background : #FFF; - } - tr:nth-child(even) { - background : #DDD; - } - tr:hover td { - color : #006699; - } - td, th { - min-width : 120px; - padding : 0 5px; - vertical-align:top; - } - th { - background : #FFF; - border-bottom : 2px solid #006699; - color : #666; - font-size : 10px; - font-weight : bold; - } - td { - border-bottom : 1px solid #CCC; - font-size : 10px; - } - -/* Calendar */ -dl.vevent { - margin : -20px 0 20px 0; - padding : 0; - } - .vevent dt { - font-size : 10px; - position : relative; - left : 0; - top : 22px; - font-weight : bold; - } - .vevent dd - { - border-left : 2px solid #006699; - font-size : 11px; - margin : 0 0 0 80px; - padding : 0 0 0 10px; - } - dd.summary { - font-weight : bold; - } - .vevent a { - font-size : 11px; - } - -/* Forms */ -article form { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - background : #DDD; - margin : 0 0 20px; - padding : 10px; - } - article label { - color : #666; - display : block; - font-size : 10px; - font-weight : bold; - margin : 0 0 0 2px; - } - article input, article textarea { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border : 1px solid #CCC; - font-size : 11px; - padding : 4px 5px; - /*width : 458px;*/ - } - article input { - margin : 0 0 10px; - } - article input.button, .btn { - background: #999; - border : 1px solid #888; - color: #FFF; - cursor : pointer; - font-weight : bold; - margin : 10px 0 0 0; - text-shadow : 0 -1px 1px rgba(0,0,0,0.25); - width : 25%; - } - article input.button:disabled, .btn{ - color: #888; - } - article textarea { - height : 100px; - } - -/* Lists */ -article ul, aside ul { - list-style : none; - margin : 0 0 20px 0; - } - article ul { - margin : 0 0 20px 23px; - } - article ul li { - background : url(./ai2.png) no-repeat 0 8px; - padding : 0 0 0 17px; - } - -/* Sidebar */ -aside { - float : left; - margin : 0 0 20px 0; - width : 200px; -} - -/* Search Box */ -.s { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - margin : 0 0 20px 0; - padding : 10px; - width : 179px; - } - .s input { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border : 1px solid #CCC; - color : #999; - font-size : 11px; - padding : 4px 5px; - width : 168px; - } - -/* Navigation & Menu */ -nav ul { - list-style : none; - } - nav li { - background : url(./ai1.png) no-repeat 0 8px; - padding : 0 0 0 15px; - } - nav li ul, aside li ul li ul { - margin : 0; - } - nav li li a { - font-size : 11px; - } - nav li li li a { - font-size : 10px; - } - nav li li li, aside li.active li li { - background : url(./ai8.png) no-repeat 0 10px; - } - nav li.active, aside li.active li { - background : url(./ai2.png) no-repeat 0 8px; - } - -/* Gallery */ -.gallery { - list-style : none; - margin : 0 0 10px; - } - .gallery li { - display: inline; - margin : 0 15px 0 0; - } - .gallery a img { - border : 1px solid #999; - height : 50px; - opacity: 0.8; - padding : 1px; - width : 50px; - } - .gallery li:last-child { - margin : 0 0 10px 0; - } - .gallery a img:hover{ - opacity: 1; - } - -/* Ad Space */ -.adspace { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - -moz-box-shadow : 0 2px 2px rgba(0,0,0,0.3); - -webkit-box-shadow : 0 2px 2px rgba(0,0,0,0.3); - background : #EEE; - height : 100%; - margin : 0 0 20px 0; - padding : 5px 10px; - text-align : center; - width : 178px; - } - .adspace a img { - border : none; - } - -/* Tag Cloud */ -#tagcloud { - overflow : hidden; - width : 200px; - } - #tagcloud li { - display : inline; - margin : 0 10px 0 0; - } - .tagcloudsize-1 a { - font-size : 14px; - } - .tagcloudsize-2 a { - font-size : 16px; - } - .tagcloudsize-3 a { - font-size : 18px; - } - -/* Footer */ -footer { - border-top : 1px dotted #B5B3A9; - clear : both; - margin : 20px 0; - } - footer a, footer p { - color : #666; - display : inline; - font-size : 10px; - } - -/* Wrappers */ -#a, #b { - margin : 0 auto; - position : relative; - } - #a { - width : 800px; - } - #b { - overflow : hidden; - } - -/* Shadow-Boxes*/ -#c, .meta, .s { - -moz-border-radius : 4px; - -webkit-border-radius : 4px; - -moz-box-shadow : 0 2px 2px rgba(0,0,0,0.3); - -webkit-box-shadow : 0 2px 2px rgba(0,0,0,0.3); - background : #EEE; - } - #c { - background : #EEE; - margin : 0 0 20px 0; - padding : 5px 10px; - width : 178px; - } - #c p, #c a { - font-size : 11px; - line-height : 15px; - } - #c p { - margin : 0 0 10px 0; - } - #c img { - float : left; - margin : 4px 10px 2px 0; - } - .meta { - margin : 20px 0 3px; - padding : 2px 5px; - } - .meta p, .meta a { - font-size : 10px; - margin : 0; - } - -.open { - color : #CCC; -} -.close { - color : #0A647C; -} From 60b080ff1e6e60843a095a287d5de457f572fb88 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:46:22 +0100 Subject: [PATCH 05/45] Update README --- README.md | 49 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 17 deletions(-) diff --git a/README.md b/README.md index d3a0aec..e7ca2d0 100644 --- a/README.md +++ b/README.md @@ -1,32 +1,47 @@ -emailpoubelle -============= -A Yunohost version of Email Poubelle by David Mercereau. All thanks to David. -http://www.mercereau.info/sortie-de-la-version-1-0-demailpoubelle-php-email-jetable-auto-hebergeable/ +#Emailpoubelle +[![Integration level](https://dash.yunohost.org/integration/emailpoubelle.svg)](https://ci-apps.yunohost.org/jenkins/job/emailpoubelle%20%28Community%29/lastBuild/consoleFull) +[![Install emailpoubelle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=emailpoubelle) -Original packaging done by Matlink, https://github.com/matlink/emailpoubelle_ynh +A Yunohost version of [Email Poubelle](http://www.mercereau.info/sortie-de-la-version-1-0-demailpoubelle-php-email-jetable-auto-hebergeable/) by David Mercereau. +EmailPoubelle (Trash email) is a script to create temporay email adresses that aims to your real email address -WARNING -========= +All thanks to David. + +##WARNING Using this will cause to disable the Yunohost ldap aliases ! Once installed, you won't be able to use the aliasses settings that you can see when you modify your personnal settings in the SSOWAT pannel. Of course, once uninstalled, everything get back to normal. -TODO : ------- +## Links + + * Report a bug: https://github.com/YunoHost-Apps/emailpoubelle_ynh/issues + * App website: https://github.com/kepon85/emailPoubelle.php + * YunoHost website: https://yunohost.org/ + +--- + +Developers info +---------------- + +Please do your pull request to the [testing branch](https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing). + +To try the testing branch, please proceed like that. +``` +sudo yunohost app install https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug +or +sudo yunohost app upgrade calibreweb -u https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug +``` + +##TODO : -- [X] move to 2.0 - [ ] check nginx conf -- [X] insert clean index.php - [ ] insert cron in conf - [ ] insert symlink for langages in /lang -- [X] check dependency for lang -- [X] remove php-geoip - [ ] remove new locale on remove -- [X] Why the flags don't show?? -- [X] Implement Admin panel -- [X] Add backup restore script -- [ ] check checksum on download - [ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) - [ ] cron job to remove redirections (0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) conflict with SSOWAT + non-public app - [ ] package_check integration - [ ] Multiinstance - [ ] LDAP + +##LICENCE +Package and software are GPL 3.0 \ No newline at end of file From 9a54a3a3319e020f9d542ec8b9f37f93c9b52337 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:48:20 +0100 Subject: [PATCH 06/45] Update README --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7ca2d0..ff68281 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ #Emailpoubelle + [![Integration level](https://dash.yunohost.org/integration/emailpoubelle.svg)](https://ci-apps.yunohost.org/jenkins/job/emailpoubelle%20%28Community%29/lastBuild/consoleFull) [![Install emailpoubelle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=emailpoubelle) @@ -8,6 +9,7 @@ EmailPoubelle (Trash email) is a script to create temporay email adresses that a All thanks to David. ##WARNING + Using this will cause to disable the Yunohost ldap aliases ! Once installed, you won't be able to use the aliasses settings that you can see when you modify your personnal settings in the SSOWAT pannel. Of course, once uninstalled, everything get back to normal. @@ -38,10 +40,12 @@ sudo yunohost app upgrade calibreweb -u https://github.com/Yunohost-Apps/emailpo - [ ] insert symlink for langages in /lang - [ ] remove new locale on remove - [ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) -- [ ] cron job to remove redirections (0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) conflict with SSOWAT + non-public app +- [ ] cron job to remove redirections (`0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) +- [ ] conflict with SSOWAT + non-public app - [ ] package_check integration - [ ] Multiinstance - [ ] LDAP ##LICENCE + Package and software are GPL 3.0 \ No newline at end of file From 7dddc3fd9b99cacf55328051dcd1d954c71654b3 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:49:25 +0100 Subject: [PATCH 07/45] Update README --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ff68281..890b500 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ -#Emailpoubelle +# Emailpoubelle [![Integration level](https://dash.yunohost.org/integration/emailpoubelle.svg)](https://ci-apps.yunohost.org/jenkins/job/emailpoubelle%20%28Community%29/lastBuild/consoleFull) [![Install emailpoubelle with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=emailpoubelle) A Yunohost version of [Email Poubelle](http://www.mercereau.info/sortie-de-la-version-1-0-demailpoubelle-php-email-jetable-auto-hebergeable/) by David Mercereau. + EmailPoubelle (Trash email) is a script to create temporay email adresses that aims to your real email address All thanks to David. -##WARNING +## WARNING Using this will cause to disable the Yunohost ldap aliases ! Once installed, you won't be able to use the aliasses settings that you can see when you modify your personnal settings in the SSOWAT pannel. Of course, once uninstalled, everything get back to normal. From 28109a347ff90e4e01b43a8ac62c0ad265520f5c Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:50:25 +0100 Subject: [PATCH 08/45] Update README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 890b500..365777e 100644 --- a/README.md +++ b/README.md @@ -31,7 +31,7 @@ To try the testing branch, please proceed like that. ``` sudo yunohost app install https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug or -sudo yunohost app upgrade calibreweb -u https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug +sudo yunohost app upgrade emailpoubelle -u https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug ``` ##TODO : From b1a603c8e92ca4faa9d8ce54e16588421eaff8d5 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 4 Mar 2019 21:50:45 +0100 Subject: [PATCH 09/45] Update README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 365777e..fef9c66 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ or sudo yunohost app upgrade emailpoubelle -u https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug ``` -##TODO : +## TODO : - [ ] check nginx conf - [ ] insert cron in conf @@ -47,6 +47,6 @@ sudo yunohost app upgrade emailpoubelle -u https://github.com/Yunohost-Apps/emai - [ ] Multiinstance - [ ] LDAP -##LICENCE +## LICENCE Package and software are GPL 3.0 \ No newline at end of file From c7c0adc7cd30016b97bd0ee6f37a2dfc4ff3e281 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 5 Mar 2019 21:46:39 +0100 Subject: [PATCH 10/45] update hook for path --- sources/hooks/conf_regen/98-postfix_emailpoubelle | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sources/hooks/conf_regen/98-postfix_emailpoubelle b/sources/hooks/conf_regen/98-postfix_emailpoubelle index 39ac8ac..7ea9506 100644 --- a/sources/hooks/conf_regen/98-postfix_emailpoubelle +++ b/sources/hooks/conf_regen/98-postfix_emailpoubelle @@ -1,5 +1,8 @@ #!/bin/bash +source /usr/share/yunohost/helpers +final_path=$(ynh_app_setting_get emailpoubelle final_path) + set -e do_pre_regen() { @@ -11,8 +14,7 @@ do_pre_regen() { # FIXME : check this file actually exists to not crash when only running this # hook alone - sudo sed -e "s@^alias_maps\s*=\s*\(.*\)@alias_maps = \1,hash:/var/lib/mailman/data/aliases@"\ - -e "s@^virtual_alias_maps\s*=\s*\(.*\)@virtual_alias_maps = hash:/var/lib/mailman/data/virtual-mailman,\1@"\ + sudo sed -e "s@^virtual_alias_maps\s*=\s*\(.*\)@virtual_alias_maps = hash:$final_path/var/virtual,\1@"\ -i $postfix_main_cf } From 9a8b44f6908915146273757cff0ef1cb0a1f4678 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 5 Mar 2019 22:43:49 +0100 Subject: [PATCH 11/45] use more helpers --- README.md | 4 ++-- conf/emailpoubelle.cron | 1 + conf/nginx.conf | 45 +++++++++++++++++++++++++---------------- conf/nginx.conf.new | 35 -------------------------------- scripts/_common.sh | 3 +-- scripts/install | 39 ++++++++++++++--------------------- scripts/remove | 3 +-- scripts/upgrade | 27 +++++++------------------ 8 files changed, 55 insertions(+), 102 deletions(-) create mode 100644 conf/emailpoubelle.cron delete mode 100644 conf/nginx.conf.new diff --git a/README.md b/README.md index fef9c66..eeef46a 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,12 @@ sudo yunohost app upgrade emailpoubelle -u https://github.com/Yunohost-Apps/emai ## TODO : -- [ ] check nginx conf +- [X] check nginx conf - [ ] insert cron in conf - [ ] insert symlink for langages in /lang - [ ] remove new locale on remove - [ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) -- [ ] cron job to remove redirections (`0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) +- [X] cron job to remove redirections (`0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) - [ ] conflict with SSOWAT + non-public app - [ ] package_check integration - [ ] Multiinstance diff --git a/conf/emailpoubelle.cron b/conf/emailpoubelle.cron new file mode 100644 index 0000000..45235b0 --- /dev/null +++ b/conf/emailpoubelle.cron @@ -0,0 +1 @@ +0 */2 * * * www-data cd $final_path/www/; /usr/bin/php index.php > /dev/null 2>&1 \ No newline at end of file diff --git a/conf/nginx.conf b/conf/nginx.conf index 1333f44..6853de3 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,18 +1,29 @@ -location YNH_EXAMPLE_PATH { - # Path to source - alias YNH_EXAMPLE_ALIAS ; - # Example PHP configuration - index www/index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; +location __PATH__/ { + + # Path to source + alias __FINALPATH__/ ; + + # Force usage of https + if ($scheme = http) { + rewrite ^ https://$server_name$request_uri? permanent; + } + +### PHP configuration + index www/index.php; + + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; + + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } +### End of PHP configuration part + + # Include SSOWAT user panel. + include conf.d/yunohost_panel.conf.inc; } diff --git a/conf/nginx.conf.new b/conf/nginx.conf.new deleted file mode 100644 index 2067dab..0000000 --- a/conf/nginx.conf.new +++ /dev/null @@ -1,35 +0,0 @@ - -#New nginx.conf - a implémenter -#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; -location __PATH__/ { - - # Path to source - alias __FINALPATH__/ ; - - # Force usage of https - if ($scheme = http) { - rewrite ^ https://$server_name$request_uri? permanent; - } - -### Example PHP configuration (remove it if not used) - index index.php; - - # Common parameter to increase upload size limit in conjunction with dedicated php-fpm file - #client_max_body_size 50M; - - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; - - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } -### End of PHP configuration part - - # Include SSOWAT user panel. - include conf.d/yunohost_panel.conf.inc; -} diff --git a/scripts/_common.sh b/scripts/_common.sh index f705c56..f1cb75a 100644 --- a/scripts/_common.sh +++ b/scripts/_common.sh @@ -1,7 +1,6 @@ #================================================= # COMMON VARIABLES #================================================= -pkg_dependencies="php-geoip" +pkg_dependencies="php-geoip php7.0-cli" app="emailpoubelle" lang="fr_FR.UTF-8 en_US.UTF-8 it_IT.UTF-8" -postfix=/etc/postfix/main.cf diff --git a/scripts/install b/scripts/install index 87bad26..136819c 100644 --- a/scripts/install +++ b/scripts/install @@ -15,16 +15,17 @@ ynh_abort_if_errors domain=$YNH_APP_ARG_DOMAIN path_url=$YNH_APP_ARG_PATH admin=$YNH_APP_ARG_ADMIN +ynh_print_OFF password=$YNH_APP_ARG_PASSWORD +ynh_print_ON is_public=$5 final_path=/var/www/$app db_user=emailPoubelle -cronline="0 */2 * * * www-data cd $final_path/www/; /usr/bin/php index.php > /dev/null 2>&1" #================================================= # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS #================================================= - +ynh_print_info "Check settings for installation" final_path=/var/www/$app test ! -e "$final_path" || ynh_die "This path already contains a folder" @@ -53,7 +54,7 @@ ynh_app_setting_set $app final_path $final_path #================================================= #INSTALL DEPENDENCIES #================================================= - +ynh_print_info "Installing dependencies" ynh_install_app_dependencies $pkg_dependencies #install locale (nginx will restart at the end of the install) @@ -82,10 +83,13 @@ ln -s $final_path/www/template-exemple $final_path/template-exemple #=============================================== #SETTINGS & DATABASE #=============================================== +ynh_print_info "Setting database & settings" #generating random password for database +ynh_print_OFF db_pwd=$(ynh_string_random) ynh_app_setting_set $app mysqlpwd $db_pwd +ynh_print_ON #configuring with given settings sudo cp $final_path/conf-dist.php $final_path/conf.php @@ -99,13 +103,16 @@ ynh_replace_string "// define('DBUSER'," " define('DBUSER'," $f ynh_replace_string "// define('DBPASS'," " define('DBPASS'," $final_path/conf.php ynh_replace_string "baseMysql" "$db_user" $final_path/conf.php ynh_replace_string "utilisateurMysql" "$db_user" $final_path/conf.php +ynh_print_OFF ynh_replace_string "motdepassedefou" "$db_pwd" $final_path/conf.php ynh_replace_string "define('ADMIN_PASSWORD', 'admin');" "define('ADMIN_PASSWORD', '$password');" $final_path/conf.php +ynh_print_ON #setting conf file not world-readable (dude, there is a plain-text password !) sudo chmod o-r $final_path/conf.php - #initialize database (databasename = db_user) +ynh_print_OFF ynh_mysql_create_db $db_user $db_user $db_pwd +ynh_print_ON #setting postfix to use virtual aliases file # Add postfix configuration hook and regen postfix conf @@ -122,19 +129,12 @@ sudo cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it sudo echo "devnull:/dev/null" | sudo tee -a /etc/aliases sudo newaliases -# Modify Nginx configuration file and copy it to Nginx conf directory -sudo sed -i "s@YNH_EXAMPLE_PATH@$path_url@g" ../conf/nginx.conf -sudo sed -i "s@YNH_EXAMPLE_ALIAS@$final_path/@g" ../conf/nginx.conf -sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf +#adding cronjob for removing expired email addresses +sudo cp -a ../conf/$app.cron /etc/cron.d/$app +sudo chmod 644 /etc/cron.d/$app -# Handle root path, avoid double slash. -# Temporary fix, in waiting for an upgrade of the helper. (#361) -#path_url_slash_less=${path_url%/} -#ynh_replace_string "__PATH__/" "$path_url_slash_less/" "../conf/nginx.conf" -#ynh_replace_string "__FINALPATH__/" "$final_path/www" "../conf/nginx.conf" # Create a dedicated nginx config -#ynh_add_nginx_config - +ynh_add_nginx_config #================================================= # SETUP SSOWAT @@ -147,15 +147,6 @@ then ynh_app_setting_set $app unprotected_uris "/" fi - -#A verifier? A integrer dans dépendances? -#adding php-cli for cron -sudo apt-get update -qq -sudo apt-get install -yqq php5-cli -#adding cronjob for removing expired email addresses -sudo echo "$cronline" | sudo tee -a /etc/cron.d/emailpoubelle -sudo chmod 644 /etc/cron.d/emailpoubelle - # Restart services systemctl reload nginx systemctl reload postfix diff --git a/scripts/remove b/scripts/remove index b61f02c..222a355 100644 --- a/scripts/remove +++ b/scripts/remove @@ -8,7 +8,6 @@ domain=$(ynh_app_setting_get $app domain) db_name=$(ynh_app_setting_get $app db_name) db_user==$db_name root_pwd=$(sudo cat /etc/yunohost/mysql) -postfix=/etc/postfix/main.cf #remove php-geoip ynh_remove_app_dependencies @@ -26,6 +25,6 @@ ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle #remove cronjob sudo rm -f /etc/cron.d/emailpoubelle -sudo service postfix reload +yunohost service regen-conf postfix sudo service nginx reload sudo yunohost app ssowatconf diff --git a/scripts/upgrade b/scripts/upgrade index a25f670..b92f2b2 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -38,13 +38,12 @@ ynh_abort_if_errors #================================================= # CHECK THE PATH #================================================= - # Normalize the URL path syntax path_url=$(ynh_normalize_url_path $path_url) #================================================= -#check for matlink's version +#check for matlink's version - deprecated - uninstall & reinstall #================================================= #deprecated - not maintained for more than a year... #cat /etc/yunohost/apps/$app/status.json | grep "matlink" @@ -66,7 +65,6 @@ path_url=$(ynh_normalize_url_path $path_url) # mkdir -p $final_path/lang #add new index.php # cp ../conf/index_source.php $final_path/www/index.php - #switch from previous (modified) conf.php to new one (emailpoubelle original) # cp ../src/conf-dist.php $final_path/conf-dist.new.php #insert domain in line 24, DB in line 31, DBUSER in line 32, etc. @@ -85,21 +83,13 @@ path_url=$(ynh_normalize_url_path $path_url) # ynh_replace_string "define('ALIASLIMITBYMAIL" "//define('ALIASLIMITBYMAIL" $final_path/conf.php # #setting conf file not world-readable (dude, there is a plain-text password !) # sudo chmod o-r $final_path/conf.php - #fi - #================================================= -# NGINX CONFIGURATION +#INSTALL DEPENDENCIES #================================================= - -#change nginx.conf as per https://forum.yunohost.org/t/need-help-on-nginx-conf-cannot-access-resources/6342 -ynh_replace_string "alias $finalpath/www/ ;" "alias $finalpath/ ;" /etc/yunohost/$domain.d/$app.conf -ynh_replace_string "index index.php;" "index www/ndex.php;" /etc/yunohost/$domain.d/$app.conf - -#correct template name in index.php -ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php - +ynh_print_info "Installing dependencies" +ynh_install_app_dependencies $pkg_dependencies #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement db_pass=$(ynh_app_setting_get $app mysqlpwd) @@ -110,6 +100,9 @@ if [ -z $db_pass]; then ynh_app_setting_set $app mysqlpwd $db_pass fi +#================================================= +#INSTALL SOURCES +#=============================================== # Copy source files ynh_print_info "Downloading sources to $final_path" # Download, check integrity, uncompress and patch the source from app.src @@ -126,12 +119,6 @@ ln -s $final_path/lang/it $final_path/lang/it_IT chown -R www-data:www-data $final_path -#adding php-cli for cron -#sudo apt-get update -qq -#sudo apt-get install -yqq php5-cli -#adding cronjob for removing expired email addresses -#sudo echo "$cronline" | sudo tee -a /etc/cron.d/emailpoubelle -#sudo chmod 644 /etc/cron.d/emailpoubelle #================================================= # RELOAD SERVICES From 4e16de44b9016f2bf0ff8d06900db8128ca3accc Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 5 Mar 2019 22:46:48 +0100 Subject: [PATCH 12/45] update from previous version --- check_process | 1 + 1 file changed, 1 insertion(+) diff --git a/check_process b/check_process index e0d2ab2..e8eaa0e 100644 --- a/check_process +++ b/check_process @@ -12,6 +12,7 @@ setup_root=1 setup_private=1 setup_public=1 + upgrade=1 from_commit=bc3f24c8e5d1cf93f9069cf235177ddf0cc078bc upgrade=1 backup_restore=1 multi_instance=0 From 71ce4c72761cbb595325ffbdf305860fc5c91634 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sat, 13 Apr 2019 15:11:19 +0200 Subject: [PATCH 13/45] =?UTF-8?q?Mise=20=C3=A0=20niveau=20pour=20package?= =?UTF-8?q?=20check?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 10 ++++++++-- scripts/install | 26 +++++++++++++------------- scripts/remove | 16 +++++++--------- scripts/restore | 2 +- scripts/upgrade | 2 +- 5 files changed, 30 insertions(+), 26 deletions(-) diff --git a/manifest.json b/manifest.json index 5e21de5..0750825 100644 --- a/manifest.json +++ b/manifest.json @@ -51,7 +51,10 @@ "en": "Choose an admin user for emailpoubelle", "fr": "Choisissez un administrateur pour emailpoubelle" }, - "example": "homer" + "example": "homer", + "help": { + "en": "Admin user can access to the control panel, block and remove all redirection and reset any settings", + "fr": "L'administrateur peut accéder au panneau de controle, bloquer et supprimer les redirections ainsi que réinitialiser les réglages"}, }, { "name": "password", @@ -69,7 +72,10 @@ "en": "Is it a public application?", "fr": "Est-ce une application publique ?" }, - "default": false + "default": false, + "help": { + "en": "The app can be accessed outside Yunohost and anyone will be able to create a trash email adress" + "fr": "L'application sera accessible en dehors de yunohost et n'importe qui pourra y créer une adresse poubelle"}, } ] } diff --git a/scripts/install b/scripts/install index 136819c..abe9217 100644 --- a/scripts/install +++ b/scripts/install @@ -71,7 +71,7 @@ locale-gen ynh_print_info "Downloading sources to $final_path" # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" -sudo cp ../conf/index_source.php $final_path/www/index.php +cp ../conf/index_source.php $final_path/www/index.php ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php #Temporaire - mettre en config @@ -92,7 +92,7 @@ ynh_app_setting_set $app mysqlpwd $db_pwd ynh_print_ON #configuring with given settings -sudo cp $final_path/conf-dist.php $final_path/conf.php +cp $final_path/conf-dist.php $final_path/conf.php #Update various conf : domain, database, user and password ynh_replace_string "exemple.fr" "$domain" $final_path/conf.php ynh_replace_string "exemple.com" "$domain" $final_path/conf.php @@ -108,7 +108,7 @@ ynh_replace_string "motdepassedefou" "$db_pwd" $f ynh_replace_string "define('ADMIN_PASSWORD', 'admin');" "define('ADMIN_PASSWORD', '$password');" $final_path/conf.php ynh_print_ON #setting conf file not world-readable (dude, there is a plain-text password !) -sudo chmod o-r $final_path/conf.php +chmod o-r $final_path/conf.php #initialize database (databasename = db_user) ynh_print_OFF ynh_mysql_create_db $db_user $db_user $db_pwd @@ -120,18 +120,18 @@ cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/h yunohost service regen-conf postfix #create the virtual aliases file -sudo touch $final_path/var/virtual -sudo postmap $final_path/var/virtual -sudo chown -R www-data:www-data $final_path +touch $final_path/var/virtual +postmap $final_path/var/virtual +chown -R www-data:www-data $final_path #create an alias for deleted junk adresses -sudo cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it -sudo echo "devnull:/dev/null" | sudo tee -a /etc/aliases -sudo newaliases +cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it +echo "devnull:/dev/null" | tee -a /etc/aliases +newaliases #adding cronjob for removing expired email addresses -sudo cp -a ../conf/$app.cron /etc/cron.d/$app -sudo chmod 644 /etc/cron.d/$app +cp -a ../conf/$app.cron /etc/cron.d/$app +chmod 644 /etc/cron.d/$app # Create a dedicated nginx config ynh_add_nginx_config @@ -150,6 +150,6 @@ fi # Restart services systemctl reload nginx systemctl reload postfix -sudo service php* reload -sudo yunohost app ssowatconf +service php* reload +yunohost app ssowatconf diff --git a/scripts/remove b/scripts/remove index 222a355..b771a21 100644 --- a/scripts/remove +++ b/scripts/remove @@ -4,27 +4,25 @@ source _common.sh source /usr/share/yunohost/helpers -domain=$(ynh_app_setting_get $app domain) db_name=$(ynh_app_setting_get $app db_name) db_user==$db_name -root_pwd=$(sudo cat /etc/yunohost/mysql) #remove php-geoip ynh_remove_app_dependencies #removing emailpoubelle database ynh_mysql_remove_db $db_user $db_name #removing emailpoubelle directory -sudo rm -rf /var/www/emailpoubelle +ynh_secure_remove /var/www/$app #removing nginx conf -sudo rm -f /etc/nginx/conf.d/$domain.d/emailpoubelle.conf +ynh_remove_nginx_config #removing aliases -sudo sed -i "/devnull:\/dev\/null/d" /etc/aliases -sudo newaliases +sed -i "/devnull:\/dev\/null/d" /etc/aliases +newaliases # Remove hook for postfix conf ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" #remove cronjob -sudo rm -f /etc/cron.d/emailpoubelle +rm -f /etc/cron.d/emailpoubelle yunohost service regen-conf postfix -sudo service nginx reload -sudo yunohost app ssowatconf +service nginx reload +yunohost app ssowatconf diff --git a/scripts/restore b/scripts/restore index 10e4a46..22673fa 100644 --- a/scripts/restore +++ b/scripts/restore @@ -96,7 +96,7 @@ ynh_restore_file "/etc/cron.d/$app" #================================================= # RELOAD NGINX & ALIASES #================================================= -sudo newaliases +newaliases systemctl reload nginx systemctl restart php7.0-fpm systemctl reload postfix diff --git a/scripts/upgrade b/scripts/upgrade index b92f2b2..07d5fbe 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -126,4 +126,4 @@ chown -R www-data:www-data $final_path systemctl restart php7.0-fpm systemctl reload nginx systemctl reload postfix -sudo yunohost app ssowatconf +yunohost app ssowatconf From bc5177893e3440b03b36d65414bd869068fa4398 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sat, 13 Apr 2019 15:17:15 +0200 Subject: [PATCH 14/45] typo --- manifest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 0750825..804b9ec 100644 --- a/manifest.json +++ b/manifest.json @@ -55,7 +55,7 @@ "help": { "en": "Admin user can access to the control panel, block and remove all redirection and reset any settings", "fr": "L'administrateur peut accéder au panneau de controle, bloquer et supprimer les redirections ainsi que réinitialiser les réglages"}, - }, + } { "name": "password", "type": "password", @@ -75,7 +75,7 @@ "default": false, "help": { "en": "The app can be accessed outside Yunohost and anyone will be able to create a trash email adress" - "fr": "L'application sera accessible en dehors de yunohost et n'importe qui pourra y créer une adresse poubelle"}, + "fr": "L'application sera accessible en dehors de yunohost et n'importe qui pourra y créer une adresse poubelle"} } ] } From 2686240c2da568b2865dd07e4c3dbdfc6a2d1dff Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sat, 13 Apr 2019 15:21:50 +0200 Subject: [PATCH 15/45] typo --- manifest.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/manifest.json b/manifest.json index 804b9ec..bb5a19c 100644 --- a/manifest.json +++ b/manifest.json @@ -54,7 +54,8 @@ "example": "homer", "help": { "en": "Admin user can access to the control panel, block and remove all redirection and reset any settings", - "fr": "L'administrateur peut accéder au panneau de controle, bloquer et supprimer les redirections ainsi que réinitialiser les réglages"}, + "fr": "L'administrateur peut accéder au panneau de controle, bloquer et supprimer les redirections ainsi que réinitialiser les réglages" + } } { "name": "password", From 6919047511e914a1fcbf02a107d1a38e75602356 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sat, 13 Apr 2019 15:31:07 +0200 Subject: [PATCH 16/45] typo --- manifest.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/manifest.json b/manifest.json index bb5a19c..f82fdfd 100644 --- a/manifest.json +++ b/manifest.json @@ -56,7 +56,7 @@ "en": "Admin user can access to the control panel, block and remove all redirection and reset any settings", "fr": "L'administrateur peut accéder au panneau de controle, bloquer et supprimer les redirections ainsi que réinitialiser les réglages" } - } + }, { "name": "password", "type": "password", @@ -75,8 +75,9 @@ }, "default": false, "help": { - "en": "The app can be accessed outside Yunohost and anyone will be able to create a trash email adress" - "fr": "L'application sera accessible en dehors de yunohost et n'importe qui pourra y créer une adresse poubelle"} + "en": "The app can be accessed outside Yunohost and anyone will be able to create a trash email adress", + "fr": "L'application sera accessible en dehors de yunohost et n'importe qui pourra y créer une adresse poubelle" + } } ] } From 12384b0a27c502530fda3cad04e3b3cba67a1783 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sat, 13 Apr 2019 15:37:56 +0200 Subject: [PATCH 17/45] package check recommandations --- scripts/backup | 12 ++++++------ scripts/remove | 2 +- scripts/restore | 12 ++++++------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/scripts/backup b/scripts/backup index 9276c92..64ed7ca 100644 --- a/scripts/backup +++ b/scripts/backup @@ -7,12 +7,12 @@ #================================================= # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +#if [ ! -e _common.sh ]; then +# # Get the _common.sh file if it's not in the current directory +# cp ../settings/scripts/_common.sh ./_common.sh +# chmod a+rx _common.sh +#fi +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= diff --git a/scripts/remove b/scripts/remove index b771a21..2569dc0 100644 --- a/scripts/remove +++ b/scripts/remove @@ -16,7 +16,7 @@ ynh_secure_remove /var/www/$app #removing nginx conf ynh_remove_nginx_config #removing aliases -sed -i "/devnull:\/dev\/null/d" /etc/aliases +ynh_replace_string "/devnull:\/dev\/null/d" /etc/aliases newaliases # Remove hook for postfix conf ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" diff --git a/scripts/restore b/scripts/restore index 22673fa..c6feefa 100644 --- a/scripts/restore +++ b/scripts/restore @@ -7,12 +7,12 @@ #================================================= # IMPORT GENERIC HELPERS #================================================= -if [ ! -e _common.sh ]; then - # Get the _common.sh file if it's not in the current directory - cp ../settings/scripts/_common.sh ./_common.sh - chmod a+rx _common.sh -fi -source _common.sh +#if [ ! -e _common.sh ]; then +# # Get the _common.sh file if it's not in the current directory +# cp ../settings/scripts/_common.sh ./_common.sh +# chmod a+rx _common.sh +#fi +source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers #================================================= From 6c8025db6848e898ce69ddb0dbd2e7308b360b93 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 15 Apr 2019 00:07:14 +0200 Subject: [PATCH 18/45] Correct php socket --- conf/nginx.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 6853de3..fd17daa 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -14,7 +14,7 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; + fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; From b870da0d97170fb68487747d516330960f8f01ec Mon Sep 17 00:00:00 2001 From: Krakinou Date: Thu, 18 Apr 2019 22:17:43 +0200 Subject: [PATCH 19/45] copy from example --- conf/nginx.conf | 2 +- scripts/install | 2 + scripts/remove | 102 +++++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 95 insertions(+), 11 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index fd17daa..6853de3 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -14,7 +14,7 @@ location __PATH__/ { try_files $uri $uri/ index.php; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm.sock; + fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; fastcgi_index index.php; include fastcgi_params; diff --git a/scripts/install b/scripts/install index abe9217..a0cec7d 100644 --- a/scripts/install +++ b/scripts/install @@ -136,6 +136,8 @@ chmod 644 /etc/cron.d/$app # Create a dedicated nginx config ynh_add_nginx_config +ynh_add_fpm_config + #================================================= # SETUP SSOWAT #================================================= diff --git a/scripts/remove b/scripts/remove index 2569dc0..57fe260 100644 --- a/scripts/remove +++ b/scripts/remove @@ -1,28 +1,110 @@ #!/bin/bash +#================================================= +# GENERIC START +#================================================= +# IMPORT GENERIC HELPERS +#================================================= + source _common.sh source /usr/share/yunohost/helpers +#================================================= +# LOAD SETTINGS +#================================================= +ynh_print_info --message="Loading installation settings..." -db_name=$(ynh_app_setting_get $app db_name) -db_user==$db_name +app=$YNH_APP_INSTANCE_NAME -#remove php-geoip +domain=$(ynh_app_setting_get --app=$app --key=domain) +port=$(ynh_app_setting_get --app=$app --key=port) +db_name=$(ynh_app_setting_get --app=$app --key=db_name) +db_user=$db_name +final_path=$(ynh_app_setting_get --app=$app --key=final_path) + + + +#================================================= +# REMOVE THE MYSQL DATABASE +#================================================= +ynh_print_info --message="Removing the MySQL database" + +# Remove a database if it exists, along with the associated user +ynh_mysql_remove_db --db_user=$db_user --db_name=$db_name + + + +#================================================= +# REMOVE DEPENDENCIES +#================================================= +ynh_print_info --message="Removing dependencies" + +# Remove metapackage and its dependencies ynh_remove_app_dependencies -#removing emailpoubelle database -ynh_mysql_remove_db $db_user $db_name -#removing emailpoubelle directory -ynh_secure_remove /var/www/$app -#removing nginx conf + + + +#================================================= +# REMOVE APP MAIN DIR +#================================================= +ynh_print_info --message="Removing app main directory" + +# Remove the app directory securely +ynh_secure_remove --file="$final_path" + + +#================================================= +# REMOVE NGINX CONFIGURATION +#================================================= +ynh_print_info --message="Removing nginx web server configuration" + +# Remove the dedicated nginx config ynh_remove_nginx_config + +#================================================= +# REMOVE PHP-FPM CONFIGURATION +#================================================= +ynh_print_info --message="Removing php-fpm configuration" + +# Remove the dedicated php-fpm config +ynh_remove_fpm_config + + +#================================================= +# SPECIFIC REMOVE +#================================================= +# REMOVE THE CRON FILE +#================================================= + +# Remove a cron file +ynh_secure_remove --file="/etc/cron.d/$app" + +# Remove a directory securely +ynh_secure_remove --file="/etc/$app/" + +# Remove the log files +ynh_secure_remove --file="/var/log/$app/" + + +#================================================= #removing aliases +#================================================= ynh_replace_string "/devnull:\/dev\/null/d" /etc/aliases newaliases # Remove hook for postfix conf ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" -#remove cronjob -rm -f /etc/cron.d/emailpoubelle +#================================================= +# GENERIC FINALIZATION +#================================================= +# REMOVE DEDICATED USER +#================================================= +ynh_print_info --message="Removing the dedicated system user" + +# Delete a system user +ynh_system_user_delete --username=$app + + yunohost service regen-conf postfix service nginx reload yunohost app ssowatconf From 36fc504a138b673bf496190833228756aff3bd96 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Thu, 18 Apr 2019 22:26:47 +0200 Subject: [PATCH 20/45] no php-fpm! --- conf/nginx.conf | 21 ++++++++++----------- scripts/install | 2 -- scripts/remove | 8 -------- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 6853de3..1f10a7c 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -11,17 +11,16 @@ location __PATH__/ { ### PHP configuration index www/index.php; - try_files $uri $uri/ index.php; - location ~ [^/]\.php(/|$) { - fastcgi_split_path_info ^(.+?\.php)(/.*)$; - fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; - - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME $request_filename; - } +# try_files $uri $uri/ index.php; +# location ~ [^/]\.php(/|$) { +# fastcgi_split_path_info ^(.+?\.php)(/.*)$; +# fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; +# fastcgi_index index.php; +# include fastcgi_params; +# fastcgi_param REMOTE_USER $remote_user; +# fastcgi_param PATH_INFO $fastcgi_path_info; +# fastcgi_param SCRIPT_FILENAME $request_filename; +# } ### End of PHP configuration part # Include SSOWAT user panel. diff --git a/scripts/install b/scripts/install index a0cec7d..abe9217 100644 --- a/scripts/install +++ b/scripts/install @@ -136,8 +136,6 @@ chmod 644 /etc/cron.d/$app # Create a dedicated nginx config ynh_add_nginx_config -ynh_add_fpm_config - #================================================= # SETUP SSOWAT #================================================= diff --git a/scripts/remove b/scripts/remove index 57fe260..c9b82b8 100644 --- a/scripts/remove +++ b/scripts/remove @@ -61,14 +61,6 @@ ynh_print_info --message="Removing nginx web server configuration" # Remove the dedicated nginx config ynh_remove_nginx_config -#================================================= -# REMOVE PHP-FPM CONFIGURATION -#================================================= -ynh_print_info --message="Removing php-fpm configuration" - -# Remove the dedicated php-fpm config -ynh_remove_fpm_config - #================================================= # SPECIFIC REMOVE From 5115f8f821f6e9c5446b889aba365d9b16d6a335 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Thu, 18 Apr 2019 22:53:05 +0200 Subject: [PATCH 21/45] remove port --- scripts/remove | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index c9b82b8..366e41f 100644 --- a/scripts/remove +++ b/scripts/remove @@ -17,7 +17,6 @@ ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get --app=$app --key=domain) -port=$(ynh_app_setting_get --app=$app --key=port) db_name=$(ynh_app_setting_get --app=$app --key=db_name) db_user=$db_name final_path=$(ynh_app_setting_get --app=$app --key=final_path) From 9d7922e93d70ddbdd09f44d35642e4cc0c5df6b1 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Thu, 18 Apr 2019 22:57:31 +0200 Subject: [PATCH 22/45] remove php-fpm config --- conf/nginx.conf | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 1f10a7c..9be6262 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -11,18 +11,6 @@ location __PATH__/ { ### PHP configuration index www/index.php; -# try_files $uri $uri/ index.php; -# location ~ [^/]\.php(/|$) { -# fastcgi_split_path_info ^(.+?\.php)(/.*)$; -# fastcgi_pass unix:/var/run/php5-fpm-__NAME__.sock; -# fastcgi_index index.php; -# include fastcgi_params; -# fastcgi_param REMOTE_USER $remote_user; -# fastcgi_param PATH_INFO $fastcgi_path_info; -# fastcgi_param SCRIPT_FILENAME $request_filename; -# } -### End of PHP configuration part - # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; } From 982f9ca5318c5b5f25996016c9eefb32d86798ca Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:16:58 +0200 Subject: [PATCH 23/45] update php conf / Remove unwanted remove steps --- conf/nginx.conf | 12 +++++++++++- scripts/remove | 11 +++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 9be6262..610c145 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,4 +1,4 @@ -location __PATH__/ { +location __PATH__ { # Path to source alias __FINALPATH__/ ; @@ -10,6 +10,16 @@ location __PATH__/ { ### PHP configuration index www/index.php; + try_files $uri $uri/ index.php; + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+?\.php)(/.*)$; + fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; + fastcgi_index index.php; + include fastcgi_params; + fastcgi_param REMOTE_USER $remote_user; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME $request_filename; + } # Include SSOWAT user panel. include conf.d/yunohost_panel.conf.inc; diff --git a/scripts/remove b/scripts/remove index 366e41f..f08dd46 100644 --- a/scripts/remove +++ b/scripts/remove @@ -69,19 +69,14 @@ ynh_remove_nginx_config # Remove a cron file ynh_secure_remove --file="/etc/cron.d/$app" - -# Remove a directory securely -ynh_secure_remove --file="/etc/$app/" - -# Remove the log files -ynh_secure_remove --file="/var/log/$app/" - - +sleep 1s #================================================= #removing aliases #================================================= ynh_replace_string "/devnull:\/dev\/null/d" /etc/aliases +sleep 1s newaliases +sleep 1s # Remove hook for postfix conf ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" From d0a22d72940e772ad584ae558322bb4c60cc6b9a Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:26:34 +0200 Subject: [PATCH 24/45] Remove /devnull in /etc/aliases --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index f08dd46..a5e2c9f 100644 --- a/scripts/remove +++ b/scripts/remove @@ -73,7 +73,7 @@ sleep 1s #================================================= #removing aliases #================================================= -ynh_replace_string "/devnull:\/dev\/null/d" /etc/aliases +ynh_replace_string "/devnull:\/dev\/null/d" "" /etc/aliases sleep 1s newaliases sleep 1s From a162bbea2d5ec6fe6fd93ab11905205ccd4547c5 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:33:05 +0200 Subject: [PATCH 25/45] Remove devnull in /etc/aliases --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index a5e2c9f..e9aaa40 100644 --- a/scripts/remove +++ b/scripts/remove @@ -73,7 +73,7 @@ sleep 1s #================================================= #removing aliases #================================================= -ynh_replace_string "/devnull:\/dev\/null/d" "" /etc/aliases +ynh_replace_string "/devnull:/dev/null" /etc/aliases sleep 1s newaliases sleep 1s From d33e1dd5512e952d25982f87d77a703e2b1da432 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:35:29 +0200 Subject: [PATCH 26/45] Remove devnull in /etc/aliases --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index e9aaa40..e82d9b8 100644 --- a/scripts/remove +++ b/scripts/remove @@ -73,7 +73,7 @@ sleep 1s #================================================= #removing aliases #================================================= -ynh_replace_string "/devnull:/dev/null" /etc/aliases +ynh_replace_string "devnull:/dev/null" /etc/aliases sleep 1s newaliases sleep 1s From 15667e5dfcdf203eae05c380562522183bd7ffe3 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:37:15 +0200 Subject: [PATCH 27/45] Remove devnull in /etc/aliases --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index e82d9b8..f635897 100644 --- a/scripts/remove +++ b/scripts/remove @@ -73,7 +73,7 @@ sleep 1s #================================================= #removing aliases #================================================= -ynh_replace_string "devnull:/dev/null" /etc/aliases +ynh_replace_string "devnull:/dev/null" "" /etc/aliases sleep 1s newaliases sleep 1s From 6a38f0239b4143c0b50fca6ebf8194124cbe9946 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:41:09 +0200 Subject: [PATCH 28/45] cleaning --- scripts/remove | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/remove b/scripts/remove index f635897..fa69190 100644 --- a/scripts/remove +++ b/scripts/remove @@ -67,17 +67,18 @@ ynh_remove_nginx_config # REMOVE THE CRON FILE #================================================= -# Remove a cron file ynh_secure_remove --file="/etc/cron.d/$app" -sleep 1s + #================================================= #removing aliases #================================================= ynh_replace_string "devnull:/dev/null" "" /etc/aliases -sleep 1s newaliases -sleep 1s + +#================================================= # Remove hook for postfix conf +#================================================= + ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" #================================================= @@ -85,11 +86,6 @@ ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle #================================================= # REMOVE DEDICATED USER #================================================= -ynh_print_info --message="Removing the dedicated system user" - -# Delete a system user -ynh_system_user_delete --username=$app - yunohost service regen-conf postfix service nginx reload From 6ea8df8d5330cf698790f90dce4959152310bf34 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 18:59:47 +0200 Subject: [PATCH 29/45] check /etc/aliases --- scripts/restore | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/scripts/restore b/scripts/restore index c6feefa..28ee0fb 100644 --- a/scripts/restore +++ b/scripts/restore @@ -32,6 +32,7 @@ domain=$(ynh_app_setting_get $app domain) path_url=$(ynh_app_setting_get $app path) final_path=$(ynh_app_setting_get $app final_path) db_name=$(ynh_app_setting_get $app db_name) +admin=$(ynh_app_setting_get $app admin) #================================================= # CHECK IF THE APP CAN BE RESTORED @@ -42,6 +43,9 @@ ynh_webpath_available $domain $path_url \ test ! -d $final_path \ || ynh_die "There is already a directory: $final_path " +# Check user +ynh_user_exists "$admin" + #================================================= # STANDARD RESTORATION STEPS #================================================= @@ -78,12 +82,23 @@ for i in $lang ; do done locale-gen +#Temporaire - mettre en config +ln -s $final_path/lang/fr $final_path/lang/fr_FR +ln -s $final_path/lang/it $final_path/lang/it_IT +ln -s $final_path/www/template-exemple $final_path/template-exemple + #================================================= # RESTORE POSTFIX ALIASES #================================================= cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ yunohost service regen-conf postfix +#create an alias for deleted junk adresses +if ! [ grep "devnull:/dev/null" /etc/aliases ] ; then + cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it + echo "devnull:/dev/null" | tee -a /etc/aliases + newaliases +fi #================================================= # RESTORE THE CRON FILE @@ -96,7 +111,7 @@ ynh_restore_file "/etc/cron.d/$app" #================================================= # RELOAD NGINX & ALIASES #================================================= -newaliases +postmap $final_path/var/virtual systemctl reload nginx systemctl restart php7.0-fpm systemctl reload postfix From 3587b9db878487228f9b35a759bdc9bb97216969 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Sun, 19 May 2019 23:29:48 +0200 Subject: [PATCH 30/45] re-add subpath --- conf/nginx.conf | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/conf/nginx.conf b/conf/nginx.conf index 610c145..f68d0a7 100644 --- a/conf/nginx.conf +++ b/conf/nginx.conf @@ -1,4 +1,5 @@ -location __PATH__ { +#sub_path_only rewrite ^__PATH__$ __PATH__/ permanent; +location __PATH__/ { # Path to source alias __FINALPATH__/ ; From a1f14daf2fbd405a7a2649cfc68bfe0e69020ebc Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 20 May 2019 10:21:06 +0200 Subject: [PATCH 31/45] remove ssowat regen / min 3.5.2 --- README.md | 4 ++-- manifest.json | 2 +- scripts/install | 6 +++--- scripts/remove | 2 +- scripts/upgrade | 1 - 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index eeef46a..84edbcf 100644 --- a/README.md +++ b/README.md @@ -37,13 +37,13 @@ sudo yunohost app upgrade emailpoubelle -u https://github.com/Yunohost-Apps/emai ## TODO : - [X] check nginx conf -- [ ] insert cron in conf +- [X] insert cron in conf - [ ] insert symlink for langages in /lang - [ ] remove new locale on remove - [ ] Test it ! (and check if that doesn't interfer with postfix and its aliases) - [X] cron job to remove redirections (`0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'https://domain/poubelle/index.php?act=cron' >/dev/null 2>&1) - [ ] conflict with SSOWAT + non-public app -- [ ] package_check integration +- [X] package_check integration - [ ] Multiinstance - [ ] LDAP diff --git a/manifest.json b/manifest.json index f82fdfd..ae09ad0 100644 --- a/manifest.json +++ b/manifest.json @@ -14,7 +14,7 @@ "email": "misterl56@hotmail.com" }, "requirements": { - "yunohost": ">= 3.0.0" + "yunohost": ">= 3.5.2" }, "multi_instance": false, "services": [ diff --git a/scripts/install b/scripts/install index abe9217..f9a3b1f 100644 --- a/scripts/install +++ b/scripts/install @@ -56,11 +56,12 @@ ynh_app_setting_set $app final_path $final_path #================================================= ynh_print_info "Installing dependencies" ynh_install_app_dependencies $pkg_dependencies - +sleep 1s #install locale (nginx will restart at the end of the install) for i in $lang ; do ynh_replace_string "# $i" "$i" /etc/locale.gen done +sleep 1s locale-gen #================================================= @@ -151,5 +152,4 @@ fi systemctl reload nginx systemctl reload postfix service php* reload -yunohost app ssowatconf - + diff --git a/scripts/remove b/scripts/remove index fa69190..5709acf 100644 --- a/scripts/remove +++ b/scripts/remove @@ -89,4 +89,4 @@ ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle yunohost service regen-conf postfix service nginx reload -yunohost app ssowatconf + diff --git a/scripts/upgrade b/scripts/upgrade index 07d5fbe..b4922e4 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -126,4 +126,3 @@ chown -R www-data:www-data $final_path systemctl restart php7.0-fpm systemctl reload nginx systemctl reload postfix -yunohost app ssowatconf From c457681b9bff8db0b7e13dbadd5eb89e9e32aaf4 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 20 May 2019 23:35:32 +0200 Subject: [PATCH 32/45] typo --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index b4922e4..8b85ba7 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -93,7 +93,7 @@ ynh_install_app_dependencies $pkg_dependencies #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement db_pass=$(ynh_app_setting_get $app mysqlpwd) -if [ -z $db_pass]; then +if [ -z $db_pass ]; then #c'est moche mais ça fera bien l'affaire - en deux lignes sinon pb en fonction du type de shell t=$(cat /var/www/$app/conf.php | grep DBPASS) db_pass=${t:26:24} From 5f1c35370eb2921baa4d97e905ac80c574070320 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Mon, 20 May 2019 23:54:52 +0200 Subject: [PATCH 33/45] update from template / add nginx --- scripts/upgrade | 72 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 67 insertions(+), 5 deletions(-) diff --git a/scripts/upgrade b/scripts/upgrade index 8b85ba7..485a280 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -16,10 +16,49 @@ source /usr/share/yunohost/helpers app=$YNH_APP_INSTANCE_NAME domain=$(ynh_app_setting_get $app domain) path_url=$(ynh_app_setting_get $app path) +is_public=$(ynh_app_setting_get --app=$app --key=is_public) admin=$(ynh_app_setting_get $app admin) final_path=$(ynh_app_setting_get $app final_path) db_name=$(ynh_app_setting_get $app db_name) +#================================================= +# CHECK VERSION +#================================================= + +### This helper will compare the version of the currently installed app and the version of the upstream package. +### $upgrade_type can have 2 different values +### - UPGRADE_APP if the upstream app version has changed +### - UPGRADE_PACKAGE if only the YunoHost package has changed +### ynh_check_app_version_changed will stop the upgrade if the app is up to date. +### UPGRADE_APP should be used to upgrade the core app only if there's an upgrade to do. +### Not used yet in this script +upgrade_type=$(ynh_check_app_version_changed) + +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= + +# Fix is_public as a boolean value +if [ "$is_public" = "Yes" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=1 + is_public=1 +elif [ "$is_public" = "No" ]; then + ynh_app_setting_set --app=$app --key=is_public --value=0 + is_public=0 +fi + +# If db_name doesn't exist, create it +if [ -z "$db_name" ]; then + db_name=$(ynh_sanitize_dbid --db_name=$app) + ynh_app_setting_set --app=$app --key=db_name --value=$db_name +fi + +# If final_path doesn't exist, create it +if [ -z "$final_path" ]; then + final_path=/var/www/$app + ynh_app_setting_set --app=$app --key=final_path --value=$final_path +fi + #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP @@ -86,11 +125,27 @@ path_url=$(ynh_normalize_url_path $path_url) #fi #================================================= -#INSTALL DEPENDENCIES +# STANDARD UPGRADE STEPS +#================================================= +# NGINX CONFIGURATION +#================================================= +ynh_print_info "Upgrading nginx web server configuration..." + +ynh_backup_if_checksum_is_different "/etc/nginx/conf.d/$domain.d/$app.conf" + +# Create a dedicated nginx config +ynh_add_nginx_config + +#================================================= +# UPGRADE DEPENDENCIES #================================================= ynh_print_info "Installing dependencies" ynh_install_app_dependencies $pkg_dependencies +#================================================= +#UPDATE SETTINGS +#================================================= + #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement db_pass=$(ynh_app_setting_get $app mysqlpwd) if [ -z $db_pass ]; then @@ -103,7 +158,7 @@ fi #================================================= #INSTALL SOURCES #=============================================== -# Copy source files + ynh_print_info "Downloading sources to $final_path" # Download, check integrity, uncompress and patch the source from app.src ynh_setup_source "$final_path" @@ -112,17 +167,24 @@ test -e $final_path/template-exemple if [[ ! $? -eq 0 ]]; then ln -s $final_path/www/template-exemple $final_path/template-exemple fi + #Temporaire - mettre en config ln -s $final_path/lang/fr $final_path/lang/fr_FR ln -s $final_path/lang/it $final_path/lang/it_IT + +#================================================= +# SECURE FILES AND DIRECTORIES +#================================================= + chown -R www-data:www-data $final_path #================================================= # RELOAD SERVICES #================================================= -systemctl restart php7.0-fpm -systemctl reload nginx -systemctl reload postfix +ynh_systemd_action --service_name=php7.0-fpm --action=restart +ynh_systemd_action --service_name=nginx --action=reload +ynh_systemd_action --service_name=postfix --action=reload + From eb6375fe44968eab8b30bcc71b73cfde3cec1da1 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 21 May 2019 00:20:22 +0200 Subject: [PATCH 34/45] cleaning --- scripts/install | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/scripts/install b/scripts/install index f9a3b1f..5c4a1f4 100644 --- a/scripts/install +++ b/scripts/install @@ -56,18 +56,17 @@ ynh_app_setting_set $app final_path $final_path #================================================= ynh_print_info "Installing dependencies" ynh_install_app_dependencies $pkg_dependencies -sleep 1s + #install locale (nginx will restart at the end of the install) for i in $lang ; do ynh_replace_string "# $i" "$i" /etc/locale.gen done -sleep 1s + locale-gen #================================================= #INSTALL SOURCES #=============================================== -# Copy source files ynh_print_info "Downloading sources to $final_path" # Download, check integrity, uncompress and patch the source from app.src @@ -148,8 +147,10 @@ then ynh_app_setting_set $app unprotected_uris "/" fi -# Restart services -systemctl reload nginx -systemctl reload postfix +#================================================= +# RELOAD SERVICES +#================================================= +ynh_systemd_action --service_name=nginx --action=reload +ynh_systemd_action --service_name=postfix --action=reload service php* reload From 86ddf8112bad11c8ada0aaadbb283857c564072c Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 21 May 2019 00:31:09 +0200 Subject: [PATCH 35/45] check ln for language --- scripts/upgrade | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 485a280..116b789 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -169,9 +169,12 @@ if [[ ! $? -eq 0 ]]; then fi #Temporaire - mettre en config +if [ ! -e $final_path/lang/fr_FR ]; then ln -s $final_path/lang/fr $final_path/lang/fr_FR +fi +if [ ! -e $final_path/lang/it_IT ]; then ln -s $final_path/lang/it $final_path/lang/it_IT - +fi #================================================= From 81943621926c2cae7cc9930bc58620cd0928ccac Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 21 May 2019 13:37:11 +0200 Subject: [PATCH 36/45] update with script progression --- scripts/backup | 16 +++++++++++----- scripts/restore | 23 ++++++++++++++++------- 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/scripts/backup b/scripts/backup index 64ed7ca..f98a529 100644 --- a/scripts/backup +++ b/scripts/backup @@ -25,6 +25,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading installation settings..." --time --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -37,29 +38,34 @@ db_name=$(ynh_app_setting_get $app db_name) #================================================= # BACKUP THE APP MAIN DIR #================================================= +ynh_script_progression --message="Backing up the main app directory..." --time --weight=1 -ynh_backup "$final_path" +ynh_backup --src_path="$final_path" #================================================= # BACKUP THE NGINX CONFIGURATION #================================================= +ynh_script_progression --message="Backing up nginx web server configuration..." --time --weight=1 -ynh_backup "/etc/nginx/conf.d/$domain.d/$app.conf" +ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # BACKUP THE MYSQL DATABASE #================================================= +ynh_script_progression --message="Backing up the MySQL database..." --time --weight=1 ynh_mysql_dump_db "$db_name" > db.sql #================================================= # BACKUP THE CRON FILE #================================================= +ynh_script_progression --message="Backing up cron configuration..." --time --weight=1 + +ynh_backup --src_path="/etc/cron.d/$app" -ynh_backup "/etc/cron.d/$app" #================================================= -# BACKUP POSTFIX & ALIASES +# END OF SCRIPT #================================================= -ynh_backup /etc/aliases +ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --time --last diff --git a/scripts/restore b/scripts/restore index 28ee0fb..275a3d6 100644 --- a/scripts/restore +++ b/scripts/restore @@ -25,6 +25,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= +ynh_script_progression --message="Loading settings..." --time --weight=1 app=$YNH_APP_INSTANCE_NAME @@ -37,6 +38,7 @@ admin=$(ynh_app_setting_get $app admin) #================================================= # CHECK IF THE APP CAN BE RESTORED #================================================= +ynh_script_progression --message="Validating restoration parameters..." --time --weight=1 ynh_webpath_available $domain $path_url \ || ynh_die "Path not available: ${domain}${path_url}" @@ -57,12 +59,14 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf" #================================================= # RESTORE THE APP MAIN DIR #================================================= +ynh_script_progression --message="Restoring the app main directory..." --time --weight=1 ynh_restore_file "$final_path" #================================================= # RESTORE THE MYSQL DATABASE #================================================= +ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1 db_pwd=$(ynh_app_setting_get $app mysqlpwd) ynh_mysql_setup_db $db_name $db_name $db_pwd @@ -73,6 +77,7 @@ ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql #================================================= # REINSTALL DEPENDENCIES #================================================= +ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1 # Define and install dependencies ynh_install_app_dependencies $pkg_dependencies @@ -82,10 +87,6 @@ for i in $lang ; do done locale-gen -#Temporaire - mettre en config -ln -s $final_path/lang/fr $final_path/lang/fr_FR -ln -s $final_path/lang/it $final_path/lang/it_IT -ln -s $final_path/www/template-exemple $final_path/template-exemple #================================================= # RESTORE POSTFIX ALIASES @@ -103,6 +104,8 @@ fi #================================================= # RESTORE THE CRON FILE #================================================= +ynh_script_progression --message="Reinstall cron job" --time --weight=1 + ynh_restore_file "/etc/cron.d/$app" @@ -111,9 +114,15 @@ ynh_restore_file "/etc/cron.d/$app" #================================================= # RELOAD NGINX & ALIASES #================================================= +ynh_script_progression --message="Reloading nginx web server and php-fpm..." --time --weight=1 + postmap $final_path/var/virtual -systemctl reload nginx -systemctl restart php7.0-fpm -systemctl reload postfix +ynh_systemd_action --service_name=php7.0-fpm --action=restart +ynh_systemd_action --service_name=nginx --action=reload +ynh_systemd_action --service_name=postfix --action=reload +#================================================= +# END OF SCRIPT +#================================================= +ynh_script_progression --message="Restoration completed for $app" --time --last \ No newline at end of file From e1a1f19b837d9058483b5515f7fc5b00633245fa Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 21 May 2019 13:49:14 +0200 Subject: [PATCH 37/45] handle hook backup/restore --- scripts/backup | 6 ++++++ scripts/restore | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/scripts/backup b/scripts/backup index f98a529..dbc9b65 100644 --- a/scripts/backup +++ b/scripts/backup @@ -63,6 +63,12 @@ ynh_script_progression --message="Backing up cron configuration..." --time --wei ynh_backup --src_path="/etc/cron.d/$app" +#================================================= +# BACKUP postfix conf +#================================================= +ynh_script_progression --message="Backing up postfix conf configuration..." --time --weight=1 + +ynh_backup "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" #================================================= # END OF SCRIPT diff --git a/scripts/restore b/scripts/restore index 275a3d6..3e2757c 100644 --- a/scripts/restore +++ b/scripts/restore @@ -91,7 +91,9 @@ locale-gen #================================================= # RESTORE POSTFIX ALIASES #================================================= -cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ +ynh_script_progression --message="Restore Postfix aliases..." --time --weight=1 + +ynh_restore_file "/usr/share/yunohost/hooks/conf_regen/98-postfix_mailman" yunohost service regen-conf postfix #create an alias for deleted junk adresses From 926579daa9fda3452320b565a41ef60f5789d15e Mon Sep 17 00:00:00 2001 From: Krakinou Date: Tue, 21 May 2019 23:54:00 +0200 Subject: [PATCH 38/45] Disable check for upgrade as package check fail it --- check_process | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/check_process b/check_process index e8eaa0e..7be2d4a 100644 --- a/check_process +++ b/check_process @@ -12,7 +12,7 @@ setup_root=1 setup_private=1 setup_public=1 - upgrade=1 from_commit=bc3f24c8e5d1cf93f9069cf235177ddf0cc078bc +# upgrade=1 from_commit=1d375c45011ad5ab92c038120c7275580479fbc6 upgrade=1 backup_restore=1 multi_instance=0 From 1a582e5d532dd79376aace3b55936d531db2514e Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 00:08:04 +0200 Subject: [PATCH 39/45] typo --- check_process | 9 --------- scripts/restore | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/check_process b/check_process index 7be2d4a..7b10b23 100644 --- a/check_process +++ b/check_process @@ -20,16 +20,7 @@ port_already_use=0 (XXXX) change_url=0 ;;; Levels - Level 1=auto - Level 2=auto - Level 3=auto - Level 4=0 Level 5=auto - Level 6=auto - Level 7=auto - Level 8=0 - Level 9=0 - Level 10=0 ;;; Options Email= Notification=none diff --git a/scripts/restore b/scripts/restore index 3e2757c..2a93290 100644 --- a/scripts/restore +++ b/scripts/restore @@ -93,7 +93,7 @@ locale-gen #================================================= ynh_script_progression --message="Restore Postfix aliases..." --time --weight=1 -ynh_restore_file "/usr/share/yunohost/hooks/conf_regen/98-postfix_mailman" +ynh_restore_file "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" yunohost service regen-conf postfix #create an alias for deleted junk adresses From c3fd5304664aff62361292426f948a3dd584ca70 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 10:58:07 +0200 Subject: [PATCH 40/45] Correct /etc/aliases validation --- scripts/restore | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 2a93290..6932804 100644 --- a/scripts/restore +++ b/scripts/restore @@ -97,7 +97,7 @@ ynh_restore_file "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle" yunohost service regen-conf postfix #create an alias for deleted junk adresses -if ! [ grep "devnull:/dev/null" /etc/aliases ] ; then +if ! grep -q "devnull:/dev/null" /etc/aliases ; then cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it echo "devnull:/dev/null" | tee -a /etc/aliases newaliases @@ -108,7 +108,6 @@ fi #================================================= ynh_script_progression --message="Reinstall cron job" --time --weight=1 - ynh_restore_file "/etc/cron.d/$app" #================================================= From f917b66af19fe7838e6ef6294f7a434e5ce8b5dc Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 11:51:38 +0200 Subject: [PATCH 41/45] update commit --- check_process | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/check_process b/check_process index 7b10b23..321fbee 100644 --- a/check_process +++ b/check_process @@ -25,6 +25,6 @@ Email= Notification=none ;;; Upgrade options -# ; commit=65c382d138596fcb32b4c97c39398815a1dcd4e8 - name=Name of this previous version + ; commit=1d375c45011ad5ab92c038120c7275580479fbc6 + name=2.0~ynh3 manifest_arg=domain=DOMAIN&path=PATH&admin=USER&password=pass&is_public=0& \ No newline at end of file From de1370da040ae9e308adae21d169551e0058d62c Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 12:05:43 +0200 Subject: [PATCH 42/45] Add hook to upgrade --- scripts/upgrade | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 116b789..b7e7806 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -82,7 +82,7 @@ path_url=$(ynh_normalize_url_path $path_url) #================================================= -#check for matlink's version - deprecated - uninstall & reinstall +#check for matlink's version - DEPRECATED - uninstall & reinstall #================================================= #deprecated - not maintained for more than a year... #cat /etc/yunohost/apps/$app/status.json | grep "matlink" @@ -176,6 +176,10 @@ if [ ! -e $final_path/lang/it_IT ]; then ln -s $final_path/lang/it $final_path/lang/it_IT fi +#setting postfix to use virtual aliases file +# Add postfix configuration hook and regen postfix conf +cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ +yunohost service regen-conf postfix #================================================= # SECURE FILES AND DIRECTORIES From b32928e4fa157de1de48c72a7b3f27aca806c2fb Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 12:17:02 +0200 Subject: [PATCH 43/45] update postfix -f --- scripts/upgrade | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index b7e7806..a6f8ddd 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -176,10 +176,13 @@ if [ ! -e $final_path/lang/it_IT ]; then ln -s $final_path/lang/it $final_path/lang/it_IT fi +#setting postfix to use virtual aliases file +# Add postfix configuration hook and regen postfix conf #setting postfix to use virtual aliases file # Add postfix configuration hook and regen postfix conf cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ -yunohost service regen-conf postfix +mv /etc/postfix/main.cf /etc/postfic/main.cf.emailpoubelle.bak +yunohost service regen-conf postfix -f #================================================= # SECURE FILES AND DIRECTORIES From 65afcde7a4485ea92201028d417d633334101d45 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 12:18:42 +0200 Subject: [PATCH 44/45] postfix reload --- scripts/remove | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/remove b/scripts/remove index 5709acf..f8fa531 100644 --- a/scripts/remove +++ b/scripts/remove @@ -42,7 +42,6 @@ ynh_print_info --message="Removing dependencies" ynh_remove_app_dependencies - #================================================= # REMOVE APP MAIN DIR #================================================= @@ -88,5 +87,6 @@ ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle #================================================= yunohost service regen-conf postfix -service nginx reload +ynh_systemd_action --service_name=nginx --action=reload +ynh_systemd_action --service_name=postfix --action=reload From da6994db76724e6f55ee4dad611bc76d120af255 Mon Sep 17 00:00:00 2001 From: Krakinou Date: Wed, 22 May 2019 12:21:06 +0200 Subject: [PATCH 45/45] typo --- scripts/upgrade | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index a6f8ddd..4819643 100644 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -181,7 +181,7 @@ fi #setting postfix to use virtual aliases file # Add postfix configuration hook and regen postfix conf cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/ -mv /etc/postfix/main.cf /etc/postfic/main.cf.emailpoubelle.bak +mv /etc/postfix/main.cf /etc/postfix/main.cf.emailpoubelle.bak yunohost service regen-conf postfix -f #=================================================