1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/emailpoubelle_ynh.git synced 2024-09-03 18:26:29 +02:00

Merge pull request #9 from YunoHost-Apps/Testing

update to 2.0~ynh4
This commit is contained in:
Krakinou 2019-05-23 12:08:03 +02:00 committed by GitHub
commit 99e8cf58c8
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
65 changed files with 518 additions and 3880 deletions

11
.project Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>poubelle_ynh</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>

View file

@ -1,41 +1,52 @@
emailpoubelle # 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/
Original packaging done by Matlink, https://github.com/matlink/emailpoubelle_ynh [![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. 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. Of course, once uninstalled, everything get back to normal.
TODO : ## Links
------
[X] move to 2.0
[ ] check nginx conf * Report a bug: https://github.com/YunoHost-Apps/emailpoubelle_ynh/issues
* App website: https://github.com/kepon85/emailPoubelle.php
* YunoHost website: https://yunohost.org/
[X] insert clean index.php ---
[ ] insert cron in conf Developers info
----------------
[ ] insert symlink for langages in /lang Please do your pull request to the [testing branch](https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing).
[X] check dependency for lang 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 emailpoubelle -u https://github.com/Yunohost-Apps/emailpoubelle_ynh/tree/Testing --debug
```
[X] remove php-geoip ## TODO :
[ ] remove new locale on remove - [X] check nginx 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
- [X] package_check integration
- [ ] Multiinstance
- [ ] LDAP
[X] Why the flag don't show?? ## LICENCE
[X] Implement Admin panel Package and software are GPL 3.0
[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

30
check_process Normal file
View file

@ -0,0 +1,30 @@
;; Complete Test
# Comment ignored
; Manifest
domain="domain.tld" (DOMAIN)
path="/poubelle" (PATH)
admin="john" (USER)
is_public=1 (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 from_commit=1d375c45011ad5ab92c038120c7275580479fbc6
upgrade=1
backup_restore=1
multi_instance=0
incorrect_path=1
port_already_use=0 (XXXX)
change_url=0
;;; Levels
Level 5=auto
;;; Options
Email=
Notification=none
;;; Upgrade options
; commit=1d375c45011ad5ab92c038120c7275580479fbc6
name=2.0~ynh3
manifest_arg=domain=DOMAIN&path=PATH&admin=USER&password=pass&is_public=0&

3
conf/app.src Normal file
View file

@ -0,0 +1,3 @@
SOURCE_URL=https://github.com/kepon85/emailPoubelle.php/archive/d9f444c7687e3d4597d6d95c33fa96fd1332c1de.zip
SOURCE_SUM=3ab236748b1b912c03ddf4e09c4e7f0304467adadc0012c9b8f434353fe26e46
SOURCE_FORMAT=zip

1
conf/emailpoubelle.cron Normal file
View file

@ -0,0 +1 @@
0 */2 * * * www-data cd $final_path/www/; /usr/bin/php index.php > /dev/null 2>&1

View file

@ -1,18 +1,27 @@
location YNH_EXAMPLE_PATH { #sub_path_only rewrite ^__PATH__$ __PATH__/ permanent;
location __PATH__/ {
# Path to source # Path to source
alias YNH_EXAMPLE_ALIAS ; alias __FINALPATH__/ ;
# Example PHP configuration
# Force usage of https
if ($scheme = http) {
rewrite ^ https://$server_name$request_uri? permanent;
}
### PHP configuration
index www/index.php; index www/index.php;
try_files $uri $uri/ index.php; try_files $uri $uri/ index.php;
location ~ [^/]\.php(/|$) { location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$; fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
fastcgi_index index.php; fastcgi_index index.php;
include fastcgi_params; include fastcgi_params;
fastcgi_param REMOTE_USER $remote_user; fastcgi_param REMOTE_USER $remote_user;
fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $request_filename; fastcgi_param SCRIPT_FILENAME $request_filename;
} }
# Include SSOWAT user panel. # Include SSOWAT user panel.
include conf.d/yunohost_panel.conf.inc; include conf.d/yunohost_panel.conf.inc;
} }

View file

@ -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;
}

View file

@ -7,14 +7,14 @@
"fr": "Créez des adresses email jetables qui redirigent les mails vers votre adresse réelle" "fr": "Créez des adresses email jetables qui redirigent les mails vers votre adresse réelle"
}, },
"url": "https://framagit.org/kepon/emailPoubellePhp/", "url": "https://framagit.org/kepon/emailPoubellePhp/",
"version": "2.0~ynh3", "version": "2.0~ynh4",
"license": "Beerware", "license": "Beerware",
"maintainer": { "maintainer": {
"name": "Krakinou", "name": "Krakinou",
"email": "misterl56@hotmail.com" "email": "misterl56@hotmail.com"
}, },
"requirements": { "requirements": {
"yunohost": ">= 3.0.0" "yunohost": ">= 3.5.2"
}, },
"multi_instance": false, "multi_instance": false,
"services": [ "services": [
@ -51,7 +51,11 @@
"en": "Choose an admin user for emailpoubelle", "en": "Choose an admin user for emailpoubelle",
"fr": "Choisissez un administrateur pour 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", "name": "password",
@ -63,13 +67,17 @@
"example": "AveryStrongPassword" "example": "AveryStrongPassword"
}, },
{ {
"name": "public_site", "name": "is_public",
"type": "boolean",
"ask": { "ask": {
"en": "Should this application be public ?", "en": "Is it a public application?",
"fr": "Est-ce que cette application doit être visible publiquement ?" "fr": "Est-ce une application publique ?"
}, },
"choices": ["Yes", "No"], "default": false,
"default": "No" "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"
}
} }
] ]
} }

View file

@ -1,7 +1,6 @@
#================================================= #=================================================
# COMMON VARIABLES # COMMON VARIABLES
#================================================= #=================================================
pkg_dependencies="php-geoip" pkg_dependencies="php-geoip php7.0-cli"
app="emailpoubelle" app="emailpoubelle"
lang="fr_FR.UTF-8 en_US.UTF-8 it_IT.UTF-8" lang="fr_FR.UTF-8 en_US.UTF-8 it_IT.UTF-8"
postfix=/etc/postfix/main.cf

View file

@ -7,12 +7,12 @@
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then #if [ ! -e _common.sh ]; then
# Get the _common.sh file if it's not in the current directory # # Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh # cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh # chmod a+rx _common.sh
fi #fi
source _common.sh source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -25,6 +25,7 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Loading installation settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -37,30 +38,40 @@ db_name=$(ynh_app_setting_get $app db_name)
#================================================= #=================================================
# BACKUP THE APP MAIN DIR # 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 # 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 # BACKUP THE MYSQL DATABASE
#================================================= #=================================================
ynh_script_progression --message="Backing up the MySQL database..." --time --weight=1
ynh_mysql_dump_db "$db_name" > db.sql ynh_mysql_dump_db "$db_name" > db.sql
#================================================= #=================================================
# BACKUP THE CRON FILE # BACKUP THE CRON FILE
#================================================= #=================================================
ynh_script_progression --message="Backing up cron configuration..." --time --weight=1
ynh_backup "/etc/cron.d/$app" ynh_backup --src_path="/etc/cron.d/$app"
#================================================= #=================================================
# BACKUP POSTFIX & ALIASES # 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
#================================================= #=================================================
ynh_backup $postfix ynh_script_progression --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." --time --last
ynh_backup /etc/aliases

View file

@ -15,16 +15,17 @@ ynh_abort_if_errors
domain=$YNH_APP_ARG_DOMAIN domain=$YNH_APP_ARG_DOMAIN
path_url=$YNH_APP_ARG_PATH path_url=$YNH_APP_ARG_PATH
admin=$YNH_APP_ARG_ADMIN admin=$YNH_APP_ARG_ADMIN
ynh_print_OFF
password=$YNH_APP_ARG_PASSWORD password=$YNH_APP_ARG_PASSWORD
ynh_print_ON
is_public=$5 is_public=$5
final_path=/var/www/$app final_path=/var/www/$app
db_user=emailPoubelle 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 # CHECK IF THE APP CAN BE INSTALLED WITH THESE ARGS
#================================================= #=================================================
ynh_print_info "Check settings for installation"
final_path=/var/www/$app final_path=/var/www/$app
test ! -e "$final_path" || ynh_die "This path already contains a folder" test ! -e "$final_path" || ynh_die "This path already contains a folder"
@ -53,22 +54,24 @@ ynh_app_setting_set $app final_path $final_path
#================================================= #=================================================
#INSTALL DEPENDENCIES #INSTALL DEPENDENCIES
#================================================= #=================================================
ynh_print_info "Installing dependencies"
ynh_install_app_dependencies $pkg_dependencies ynh_install_app_dependencies $pkg_dependencies
#install locale (nginx will restart at the end of the install) #install locale (nginx will restart at the end of the install)
for i in $lang ; do for i in $lang ; do
ynh_replace_string "# $i" "$i" /etc/locale.gen ynh_replace_string "# $i" "$i" /etc/locale.gen
done done
locale-gen locale-gen
#================================================= #=================================================
#INSTALL SOURCES #INSTALL SOURCES
#=============================================== #===============================================
# Copy source files
sudo mkdir -p $final_path ynh_print_info "Downloading sources to $final_path"
sudo cp -R ../src/* $final_path # Download, check integrity, uncompress and patch the source from app.src
sudo cp ../conf/index_source.php $final_path/www/index.php ynh_setup_source "$final_path"
cp ../conf/index_source.php $final_path/www/index.php
ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php
#Temporaire - mettre en config #Temporaire - mettre en config
@ -80,13 +83,16 @@ ln -s $final_path/www/template-exemple $final_path/template-exemple
#=============================================== #===============================================
#SETTINGS & DATABASE #SETTINGS & DATABASE
#=============================================== #===============================================
ynh_print_info "Setting database & settings"
#generating random password for database #generating random password for database
ynh_print_OFF
db_pwd=$(ynh_string_random) db_pwd=$(ynh_string_random)
ynh_app_setting_set $app mysqlpwd $db_pwd ynh_app_setting_set $app mysqlpwd $db_pwd
ynh_print_ON
#configuring with given settings #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 #Update various conf : domain, database, user and password
ynh_replace_string "exemple.fr" "$domain" $final_path/conf.php ynh_replace_string "exemple.fr" "$domain" $final_path/conf.php
ynh_replace_string "exemple.com" "$domain" $final_path/conf.php ynh_replace_string "exemple.com" "$domain" $final_path/conf.php
@ -97,59 +103,54 @@ ynh_replace_string "// define('DBUSER'," " define('DBUSER'," $f
ynh_replace_string "// define('DBPASS'," " define('DBPASS'," $final_path/conf.php ynh_replace_string "// define('DBPASS'," " define('DBPASS'," $final_path/conf.php
ynh_replace_string "baseMysql" "$db_user" $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_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 "motdepassedefou" "$db_pwd" $final_path/conf.php
ynh_replace_string "define('ADMIN_PASSWORD', 'admin');" "define('ADMIN_PASSWORD', '$password');" $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 !) #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) #initialize database (databasename = db_user)
ynh_print_OFF
ynh_mysql_create_db $db_user $db_user $db_pwd ynh_mysql_create_db $db_user $db_user $db_pwd
ynh_print_ON
#setting postfix to use virtual aliases file #setting postfix to use virtual aliases file
sudo cp $postfix $postfix.emailpoubelle.bak #backup it eventually if that causes some issues # Add postfix configuration hook and regen postfix conf
ynh_replace_string "^virtual_alias_maps" "#virtual_alias_maps" $postfix cp -R ../sources/hooks/conf_regen/98-postfix_emailpoubelle /usr/share/yunohost/hooks/conf_regen/
echo "virtual_alias_maps = hash:$final_path/var/virtual" | sudo tee -a $postfix yunohost service regen-conf postfix
#create the virtual aliases file #create the virtual aliases file
sudo touch $final_path/var/virtual touch $final_path/var/virtual
sudo postmap $final_path/var/virtual postmap $final_path/var/virtual
sudo chown -R www-data:www-data $final_path chown -R www-data:www-data $final_path
#create an alias for deleted junk adresses #create an alias for deleted junk adresses
sudo cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it cp /etc/aliases /etc/aliases.emailpoubelle.bak #backup it
sudo echo "devnull:/dev/null" | sudo tee -a /etc/aliases echo "devnull:/dev/null" | tee -a /etc/aliases
sudo newaliases newaliases
# Modify Nginx configuration file and copy it to Nginx conf directory #adding cronjob for removing expired email addresses
sudo sed -i "s@YNH_EXAMPLE_PATH@$path_url@g" ../conf/nginx.conf cp -a ../conf/$app.cron /etc/cron.d/$app
sudo sed -i "s@YNH_EXAMPLE_ALIAS@$final_path/@g" ../conf/nginx.conf chmod 644 /etc/cron.d/$app
sudo cp ../conf/nginx.conf /etc/nginx/conf.d/$domain.d/$app.conf
# 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 # Create a dedicated nginx config
#ynh_add_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 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 fi
#A verifier? A integrer dans dépendances? #=================================================
#adding php-cli for cron # RELOAD SERVICES
sudo apt-get update -qq #=================================================
sudo apt-get install -yqq php5-cli ynh_systemd_action --service_name=nginx --action=reload
#adding cronjob for removing expired email addresses ynh_systemd_action --service_name=postfix --action=reload
sudo echo "$cronline" | sudo tee -a /etc/cron.d/emailpoubelle service php* reload
sudo chmod 644 /etc/cron.d/emailpoubelle
# Restart services
systemctl reload nginx
systemctl reload postfix
sudo service php* reload
sudo yunohost app ssowatconf

View file

@ -1,33 +1,92 @@
#!/bin/bash #!/bin/bash
#=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
source _common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#=================================================
# LOAD SETTINGS
#=================================================
ynh_print_info --message="Loading installation settings..."
domain=$(ynh_app_setting_get $app domain) app=$YNH_APP_INSTANCE_NAME
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 domain=$(ynh_app_setting_get --app=$app --key=domain)
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 ynh_remove_app_dependencies
#removing emailpoubelle database
ynh_mysql_remove_db $db_user $db_name
#removing emailpoubelle directory
sudo rm -rf /var/www/emailpoubelle
#removing nginx conf
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 cronjob
sudo rm -f /etc/cron.d/emailpoubelle #=================================================
sudo service postfix reload # REMOVE APP MAIN DIR
sudo service nginx reload #=================================================
sudo yunohost app ssowatconf 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
#=================================================
# SPECIFIC REMOVE
#=================================================
# REMOVE THE CRON FILE
#=================================================
ynh_secure_remove --file="/etc/cron.d/$app"
#=================================================
#removing aliases
#=================================================
ynh_replace_string "devnull:/dev/null" "" /etc/aliases
newaliases
#=================================================
# Remove hook for postfix conf
#=================================================
ynh_secure_remove "/usr/share/yunohost/hooks/conf_regen/98-postfix_emailpoubelle"
#=================================================
# GENERIC FINALIZATION
#=================================================
# REMOVE DEDICATED USER
#=================================================
yunohost service regen-conf postfix
ynh_systemd_action --service_name=nginx --action=reload
ynh_systemd_action --service_name=postfix --action=reload

View file

@ -7,12 +7,12 @@
#================================================= #=================================================
# IMPORT GENERIC HELPERS # IMPORT GENERIC HELPERS
#================================================= #=================================================
if [ ! -e _common.sh ]; then #if [ ! -e _common.sh ]; then
# Get the _common.sh file if it's not in the current directory # # Get the _common.sh file if it's not in the current directory
cp ../settings/scripts/_common.sh ./_common.sh # cp ../settings/scripts/_common.sh ./_common.sh
chmod a+rx _common.sh # chmod a+rx _common.sh
fi #fi
source _common.sh source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
@ -25,6 +25,7 @@ ynh_abort_if_errors
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
ynh_script_progression --message="Loading settings..." --time --weight=1
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
@ -32,16 +33,21 @@ domain=$(ynh_app_setting_get $app domain)
path_url=$(ynh_app_setting_get $app path) path_url=$(ynh_app_setting_get $app path)
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
db_name=$(ynh_app_setting_get $app db_name) db_name=$(ynh_app_setting_get $app db_name)
admin=$(ynh_app_setting_get $app admin)
#================================================= #=================================================
# CHECK IF THE APP CAN BE RESTORED # CHECK IF THE APP CAN BE RESTORED
#================================================= #=================================================
ynh_script_progression --message="Validating restoration parameters..." --time --weight=1
ynh_webpath_available $domain $path_url \ ynh_webpath_available $domain $path_url \
|| ynh_die "Path not available: ${domain}${path_url}" || ynh_die "Path not available: ${domain}${path_url}"
test ! -d $final_path \ test ! -d $final_path \
|| ynh_die "There is already a directory: $final_path " || ynh_die "There is already a directory: $final_path "
# Check user
ynh_user_exists "$admin"
#================================================= #=================================================
# STANDARD RESTORATION STEPS # STANDARD RESTORATION STEPS
#================================================= #=================================================
@ -53,12 +59,14 @@ ynh_restore_file "/etc/nginx/conf.d/$domain.d/$app.conf"
#================================================= #=================================================
# RESTORE THE APP MAIN DIR # RESTORE THE APP MAIN DIR
#================================================= #=================================================
ynh_script_progression --message="Restoring the app main directory..." --time --weight=1
ynh_restore_file "$final_path" ynh_restore_file "$final_path"
#================================================= #=================================================
# RESTORE THE MYSQL DATABASE # RESTORE THE MYSQL DATABASE
#================================================= #=================================================
ynh_script_progression --message="Restoring the MySQL database..." --time --weight=1
db_pwd=$(ynh_app_setting_get $app mysqlpwd) db_pwd=$(ynh_app_setting_get $app mysqlpwd)
ynh_mysql_setup_db $db_name $db_name $db_pwd ynh_mysql_setup_db $db_name $db_name $db_pwd
@ -69,6 +77,7 @@ ynh_mysql_connect_as $db_name $db_pwd $db_name < ./db.sql
#================================================= #=================================================
# REINSTALL DEPENDENCIES # REINSTALL DEPENDENCIES
#================================================= #=================================================
ynh_script_progression --message="Reinstalling dependencies..." --time --weight=1
# Define and install dependencies # Define and install dependencies
ynh_install_app_dependencies $pkg_dependencies ynh_install_app_dependencies $pkg_dependencies
@ -78,15 +87,26 @@ for i in $lang ; do
done done
locale-gen locale-gen
#================================================= #=================================================
# RESTORE POSTFIX ALIASES # RESTORE POSTFIX ALIASES
#================================================= #=================================================
ynh_script_progression --message="Restore Postfix aliases..." --time --weight=1
ynh_restore_file $postfix 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 -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
fi
#================================================= #=================================================
# RESTORE THE CRON FILE # RESTORE THE CRON FILE
#================================================= #=================================================
ynh_script_progression --message="Reinstall cron job" --time --weight=1
ynh_restore_file "/etc/cron.d/$app" ynh_restore_file "/etc/cron.d/$app"
@ -95,9 +115,15 @@ ynh_restore_file "/etc/cron.d/$app"
#================================================= #=================================================
# RELOAD NGINX & ALIASES # RELOAD NGINX & ALIASES
#================================================= #=================================================
sudo newaliases ynh_script_progression --message="Reloading nginx web server and php-fpm..." --time --weight=1
systemctl reload nginx
systemctl restart php7.0-fpm
systemctl reload postfix
postmap $final_path/var/virtual
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

View file

@ -7,68 +7,144 @@
#================================================= #=================================================
source _common.sh source _common.sh
source /usr/share/yunohost/helpers source /usr/share/yunohost/helpers
#================================================= #=================================================
# LOAD SETTINGS # LOAD SETTINGS
#================================================= #=================================================
app=$YNH_APP_INSTANCE_NAME app=$YNH_APP_INSTANCE_NAME
domain=$(ynh_app_setting_get $app domain) domain=$(ynh_app_setting_get $app domain)
path_url=$(ynh_app_setting_get $app path) 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) admin=$(ynh_app_setting_get $app admin)
final_path=$(ynh_app_setting_get $app final_path) final_path=$(ynh_app_setting_get $app final_path)
db_name=$(ynh_app_setting_get $app db_name) db_name=$(ynh_app_setting_get $app db_name)
#check for matlink's version #=================================================
cat /etc/yunohost/apps/$app/status.json | grep "matlink" # CHECK VERSION
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
#install geoip 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
#change folder locale => lang as per src2.0
rm -rf $final_path/locale
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) ### This helper will compare the version of the currently installed app and the version of the upstream package.
cp ../src/conf-dist.php $final_path/conf-dist.new.php ### $upgrade_type can have 2 different values
#insert domain in line 24, DB in line 31, DBUSER in line 32, etc. ### - UPGRADE_APP if the upstream app version has changed
rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DOMAIN',") ### - UPGRADE_PACKAGE if only the YunoHost package has changed
sed -i "24s/.*/${rep}/" $final_path/conf-dist.new.php ### ynh_check_app_version_changed will stop the upgrade if the app is up to date.
rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DB',") ### UPGRADE_APP should be used to upgrade the core app only if there's an upgrade to do.
sed -i "31s/.*/${rep}/" $final_path/conf-dist.new.php ### Not used yet in this script
rep=$(cat $final_path/conf.php | grep "^[^//]" | grep "define('DBUSER',") upgrade_type=$(ynh_check_app_version_changed)
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 "exemple.fr" "$domain" $final_path/conf.php
ynh_replace_string "exemple.com" "$domain" $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
#=================================================
# 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 fi
#change nginx.conf as per https://forum.yunohost.org/t/need-help-on-nginx-conf-cannot-access-resources/6342 # If db_name doesn't exist, create it
ynh_replace_string "alias $finalpath/www/ ;" "alias $finalpath/ ;" /etc/yunohost/$domain.d/$app.conf if [ -z "$db_name" ]; then
ynh_replace_string "index index.php;" "index www/ndex.php;" /etc/yunohost/$domain.d/$app.conf db_name=$(ynh_sanitize_dbid --db_name=$app)
ynh_app_setting_set --app=$app --key=db_name --value=$db_name
fi
#correct template name in index.php # If final_path doesn't exist, create it
ynh_replace_string "Template-exemple" "$domain" $final_path/www/index.php 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
#=================================================
# 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 - DEPRECATED - uninstall & reinstall
#=================================================
#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
#install geoip 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
#change folder locale => lang as per src2.0
# rm -rf $final_path/locale
# 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.
# 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
#fi
#=================================================
# 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 #mysqlpwd setting was implemented in ynh2 - check if saved and if not implement
db_pass=$(ynh_app_setting_get $app mysqlpwd) db_pass=$(ynh_app_setting_get $app mysqlpwd)
@ -79,37 +155,46 @@ if [ -z $db_pass]; then
ynh_app_setting_set $app mysqlpwd $db_pass ynh_app_setting_set $app mysqlpwd $db_pass
fi fi
# Copy source files #=================================================
cp -a ../src/bin/. $final_path/bin #INSTALL SOURCES
cp -a ../src/lib/. $final_path/lib #===============================================
cp -a ../src/lang/. $final_path/lang
cp -a ../src/www/. $final_path/www ynh_print_info "Downloading sources to $final_path"
cp ../src/emailPoubelle.php $final_path/emailPoubelle.php # Download, check integrity, uncompress and patch the source from app.src
cp ../src/emailPoubelleAdmin.php $final_path/emailPoubelleAdmin.php ynh_setup_source "$final_path"
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
cp ../conf/index_source.php $final_path/www/index.php cp ../conf/index_source.php $final_path/www/index.php
test -e $final_path/template-exemple test -e $final_path/template-exemple
if [[ ! $? -eq 0 ]]; then if [[ ! $? -eq 0 ]]; then
ln -s $final_path/www/template-exemple $final_path/template-exemple ln -s $final_path/www/template-exemple $final_path/template-exemple
fi 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
#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
#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/
mv /etc/postfix/main.cf /etc/postfix/main.cf.emailpoubelle.bak
yunohost service regen-conf postfix -f
#=================================================
# SECURE FILES AND DIRECTORIES
#=================================================
chown -R www-data:www-data $final_path 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
# Restart services #=================================================
systemctl restart php7.0-fpm # RELOAD SERVICES
systemctl reload nginx #=================================================
systemctl reload postfix ynh_systemd_action --service_name=php7.0-fpm --action=restart
sudo yunohost app ssowatconf ynh_systemd_action --service_name=nginx --action=reload
ynh_systemd_action --service_name=postfix --action=reload

View file

@ -0,0 +1,44 @@
#!/bin/bash
source /usr/share/yunohost/helpers
final_path=$(ynh_app_setting_get emailpoubelle final_path)
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@^virtual_alias_maps\s*=\s*\(.*\)@virtual_alias_maps = hash:$final_path/var/virtual,\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

9
src/.gitignore vendored
View file

@ -1,9 +0,0 @@
/postfix
virtual
virtual.db
checkupdate
conf.php
test*
var/database*
var/.htaccess
devToProd.sh

View file

@ -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

View file

@ -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

View file

@ -1,80 +0,0 @@
#!/usr/bin/php
<?php
include('../conf.php');
# pour migrer du plain-text vers la base de donnée
// 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());
}
// 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();
?>

View file

@ -1,98 +0,0 @@
<?php
//-----------------------------------------------------------
// emailPoubelle config
// Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html
// Créateur : David Mercereau - david [aro] mercereau [.] info
// Home : http://poubelle.zici.fr
//-----------------------------------------------------------
// writable for script
define('DATA', '../var');
// include directory
define('INC', '../lib');
define('URLINC', './lib'); // or http://mondomaine.tld/lib
define('LANG', '../lang');
// include function
include_once(INC.'/ep_function.php');
include_once(INC.'/ep_header.php');
define('DEBUG', false);
// Domain email (separe with ; exemple : exemple.com;zici.fr;exemple.fr)
define('DOMAIN', 'exemple.fr');
//define('DOMAIN', 'exemple.com;zici.fr;exemple.fr');
// Nombre d'alias poubelle limite par email
define('ALIASLIMITBYMAIL', 30);
// PDO stucture
// Exemple pour MYSQL :
// define('DB', 'mysql:host=127.0.0.1;dbname=baseMysql');
// define('DBUSER', 'utilisateurMysql');
// define('DBPASS', 'motdepassedefou');
// Exemple pour Sqlite :
// define('DB', 'sqlite:./data/emailPoubelle.sqlite');
define('DB', 'sqlite:'.DATA.'/database.sdb');
// table prefix
define('DBTABLEPREFIX', 'ep_');
// Use cron (true/false) for life expire email (recomanded)
// If use true add in crontab :
// 0 */2 * * * /usr/bin/wget -q -t 1 -T 7200 -O /dev/null 'http://exemple.com/page.php?act=cron' >/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" <emailpoubelle@exemple.com>');
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');
?>

View file

@ -1,373 +0,0 @@
<?php
//-----------------------------------------------------------
// Title : Email Poubelle
// Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html
// Author : David Mercereau - david [aro] mercereau [.] info
// Home : http://poubelle.zici.fr
// Date : 08/2018
// Version : 2.0
// Depend : Postifx (postmap command) php-pdo, http serveur
//-----------------------------------------------------------
//////////////////
// Init & check
//////////////////
define('VERSION', '2.0');
if (DEBUG) {
error_reporting(E_ALL);
ini_set('display_errors', 'On');
echo '<div class="highlight-2">'._("Debug enabled") .'<br />';
echo print_r($_REQUEST);
echo '</div>';
}
if (!defined('DOMAIN') || !defined('DATA') || !defined('DEBUG') || !defined('FICHIERALIAS') || !defined('DB')) {
echo '<div class="highlight-1">'._("Error : the configuration file conf.php might not be included because the constants are not declared").'.</div>';
// check writable work directory
} else if (!is_writable(DATA)) {
echo '<div class="highlight-1">'._("Error : the working directory cannot be written. Please contact the admin").'</div>';
// check alias file is_writable
} else if (!is_writable(FICHIERALIAS)) {
echo '<div class="highlight-1">'._("Error : the alias file cannot be written. Please contact the admin").'</div>';
// check blacklist file is_writable
} else if (defined('BLACKLIST') && !is_readable(BLACKLIST)) {
echo '<div class="highlight-1">'._("Error : the blacklist file cannot be read. Please contact the admin").'</div>';
// check aliasdeny file is_writable
} else if (defined('ALIASDENY') && !is_readable(ALIASDENY)) {
echo '<div class="highlight-1">'._("Error : the forbidden aliases file cannot be read. Please contact the admin").'</div>';
// maintenance mod
} else if (MAINTENANCE_MODE == true && MAINTENANCE_IP != $_SERVER["REMOTE_ADDR"]) {
echo '<div class="highlight-2">'._("Service under maintenance").'</div>';
} else {
if (MAINTENANCE_MODE == true) {
echo '<div class="highlight-2">'._("Service under maintenance").'</div>';
}
// 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 '<div class="highlight-1">'._("Error initializing tables. Please contact the admin");
if (DEBUG) { $e->getMessage(); }
echo '</div>';
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 '<div class="highlight-3">'._("Your trash email address").' <b>'.$get_value['alias_full'].'</b> '._("is now enabled").'</div>';
} else {
echo '<div class="highlight-1">'._("Error : unknown ID or already validated").'</div>';
}
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 '<div class="highlight-2">'._("The scheduled task is running").'</div>';
LifeExpire();
} else {
echo '<div class="highlight-1">'._("You didn't allow the scheduled job").'</div>';
}
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 '<div class="highlight-1">'._("Error : email address incorrect").'</div>';
} else if (! VerifMXemail($email)) {
echo '<div class="highlight-1">'._("Error : email address incorrect").' (2)</div>';
} else if (ListeAlias($email)) {
echo '<div class="highlight-3">'._("An email has been sent to you").'</div>';
} else {
echo '<div class="highlight-1">'._("Error : no known active trash email").'</div>';
}
} 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 '<div class="highlight-1">'._("Error : email address incorrect").'</div>';
} else if (! VerifMXemail($email)) {
echo '<div class="highlight-1">'._("Error : email address incorrect").' (2)</div>';
} else if (! preg_match('#^[\w.-]+$#',$alias)) {
echo '<div class="highlight-1">'._("Error : trash email address syntax incorrect").'</div>';
} else if (!domainePresent($domain)) {
echo '<div class="highlight-1">'._("Error : this domain cannot be used").'</div>';
} else if (emailIsAlias($email)) {
echo '<div class="highlight-1">'._("Error : Your email can not contain a trash domain").'</div>';
} else if (AliasDeny($alias)) {
echo '<div class="highlight-1">'._("Error : trash email address forbidden").'</div>';
} else if (BlacklistEmail($email)) {
echo '<div class="highlight-1">'._("Error : you have been blacklisted").'</div>';
// add
} elseif (isset($_POST['add'])) {
if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias_full."'")->fetchColumn() != 0) {
echo '<div class="highlight-1">'._("Error : this trash email already exists").'</div>';
} else if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."'")->fetchColumn() > ALIASLIMITBYMAIL) {
echo '<div class="highlight-1">'._("Error: You have reached your limit quota on this app. You can <a href=\"http://forge.zici.fr/p/emailpoubelle-php/\"> install this script </a> on a personal server if you want more quota").'.</div>';
} 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 '<div class="highlight-3">'._("Your trash email address").'<b> '.$alias_full.' > '.$email.'</b> '._("is now enabled").'</div>';
} 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 '<div class="highlight-2">'._("Your email address").' ('.$email.') '._("is unknown, a confirmation has been sent to you.").'</div>';
}
}
// 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 '<div class="highlight-2">'._("An email has been sent to you").'.</div>';
} else {
echo '<div class="highlight-1">'._("Error : unknown trash email").'</div>';
}
// 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
//////////////////
?>
<?php languesSwitch(); ?>
<form action="<?= URLPAGE?>" method="post">
<div id="onglet" style="display: none;">
<input type="button" value=<?php echo _("Add") ?> id="onglet-add" onClick="ongletChange(this.id)" />
<input type="button" id="onglet-list" value=<?php echo _("List") ?> onClick="ongletChange(this.id)" />
<input type="button" id="onglet-del" value=<?php echo _("Delete") ?> onClick="ongletChange(this.id)" />
<input type="button" id="onglet-dis" value=<?php echo _("Suspend") ?> onClick="ongletChange(this.id)" />
<input type="button" id="onglet-en" value=<?php echo _("Resume") ?> onClick="ongletChange(this.id)" />
<input type="hidden" name="onglet-actif" id="onglet-actif" value="onglet-add" />
</div>
<div id="form-email">
<label for="email"><?php echo _("Your real email address") ?> : </label>
<input type="text" name="email" <?php if (isset($_COOKIE['email'])) { echo 'value="'.$_COOKIE['email'].'"'; } ?> id="input-email" size="24" border="0" onkeyup="printForm()" onchange="printForm()" />
<input class="button2" type="submit" name="list" id="button-list" value="Lister" />
<input type="checkbox" name="memory" id="check-memory" <?php if (isset($_COOKIE['email'])) { echo 'checked="checked" '; } ?>/> <?php echo _("Remember")?>
</div>
<div id="form-alias">
<label for="alias"><?php echo _("Name of your trash email address")?> : </label>
<input type="text" name="alias" id="input-alias" size="24" border="0" onkeyup="printForm()" onchange="printForm()" placeholder=<?php echo _("Ex : john_shop") ?>/> @<?php
$domains = explode(';', DOMAIN);
if (count($domains) == 1) {
echo DOMAIN.'<input type="hidden" value="'.DOMAIN.'" name="domain" id="input-domain" />';
} else {
echo '<select name="domain" id="input-domain">';
foreach ($domains as $one_domain) {
echo '<option value="'.$one_domain.'">'.$one_domain.'</option>';
}
echo '</select>';
}
?>
<select name="life" id="input-life">
<option value="0"><?php echo _("Unlimited time")?></option>
<option value="7200"><?php echo _("2 hours")?></option>
<option value="21600"><?php echo _("6 hours")?></option>
<option value="86400"><?php echo _("1 day")?></option>
<option value="604800"><?php echo _("7 days")?></option>
<option value="1296000"><?php echo _("15 days")?></option>
<option value="2592000"><?php echo _("30 days")?></option>
<option value="7776000"><?php echo _("90 days")?></option>
</select>
</div>
<div id="form-comment">
<label for="comment"><?php echo _("Comment for this trash email (for your to remember)")?></label>
<input type="text" name="comment" size="54" placeholder=<?php echo _("Ex : Inscription sur zici.fr") ?>/>
</div>
<div id="form-submit">
<input class="button" type="submit" id="button-add" name="add" value=<?php echo _("Activate") ?> />
<input class="button" type="submit" id="button-del" name="del" value=<?php echo _("Delete") ?> />
<input class="button" type="submit" id="button-enable" name="enable" value=<?php echo _("Suspend") ?> />
<input class="button" type="submit" id="button-disable" name="disable" value=<?php echo _("Resume") ?> />
</div>
<div id="lePecheur" style="display: none;">
<input name="username" type="text" />
</div>
</form>
<script type="text/javascript">
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
function printForm() {
if (validateEmail(document.getElementById('input-email').value) && document.getElementById('input-alias').value != '') {
document.getElementById('input-alias').disabled = false;
document.getElementById('input-domain').disabled = false;
document.getElementById('button-list').disabled = false;
document.getElementById('button-add').disabled = false;
document.getElementById('button-disable').disabled = false;
document.getElementById('button-enable').disabled = false;
document.getElementById('button-del').disabled = false;
document.getElementById('input-life').disabled = false;
if (document.getElementById('onglet-actif').value == 'onglet-add') {
document.getElementById('form-comment').style.display = "block" ;
}
} else if (validateEmail(document.getElementById('input-email').value)) {
document.getElementById('input-alias').disabled = false;
document.getElementById('input-domain').disabled = false;
document.getElementById('button-list').disabled = false;
document.getElementById('input-life').disabled = false;
document.getElementById('form-comment').style.display = "display" ;
document.getElementById('button-add').disabled = true;
document.getElementById('button-disable').disabled = true;
document.getElementById('button-enable').disabled = true;
document.getElementById('button-del').disabled = true;
document.getElementById('input-life').disabled = true;
document.getElementById('form-comment').style.display = "none" ;
} else {
document.getElementById('input-alias').disabled = true;
document.getElementById('input-domain').disabled = true;
document.getElementById('button-list').disabled = true;
document.getElementById('button-add').disabled = true;
document.getElementById('button-disable').disabled = true;
document.getElementById('button-enable').disabled = true;
document.getElementById('button-del').disabled = true;
document.getElementById('input-life').disabled = true;
document.getElementById('form-comment').style.display = "none" ;
}
}
function ongletPrint() {
var ongletActif = document.getElementById('onglet-actif').value;
document.getElementById('onglet-add').className = "close" ;
document.getElementById('onglet-del').className = "close" ;
document.getElementById('onglet-list').className = "close" ;
document.getElementById('onglet-en').className = "close" ;
document.getElementById('onglet-dis').className = "close" ;
document.getElementById(ongletActif).className = "open" ;
document.getElementById('input-life').style.display = "none" ;
document.getElementById('form-alias').style.display = "inline-block" ;
document.getElementById('button-add').style.display = "none" ;
document.getElementById('button-del').style.display = "none" ;
document.getElementById('button-list').style.display = "none" ;
document.getElementById('button-disable').style.display = "none" ;
document.getElementById('button-enable').style.display = "none" ;
if (ongletActif == 'onglet-add') {
document.getElementById('button-add').style.display = "inline-block" ;
document.getElementById('input-life').style.display = "inline-block" ;
} else if (ongletActif == 'onglet-del') {
document.getElementById('button-del').style.display = "inline-block" ;
} else if (ongletActif == 'onglet-en') {
document.getElementById('button-enable').style.display = "inline-block" ;
} else if (ongletActif == 'onglet-dis') {
document.getElementById('button-disable').style.display = "inline-block" ;
} else if (ongletActif == 'onglet-list') {
document.getElementById('button-list').style.display = "inline-block" ;
document.getElementById('form-alias').style.display = "none" ;
}
}
function ongletChange(ongletValue) {
document.getElementById('onglet-actif').value = ongletValue;
ongletPrint();
}
document.getElementById('onglet').style.display = "block" ;
ongletPrint();
printForm();
</script>
<p><?php echo _("Version")?> <?= VERSION ?> - <?php echo _("Created by David Mercereau under licence GNU GPL v3")?></p>
<p><?php echo _("Download and use this script on the project website")?> <a target="_blank" href="https://framagit.org/kepon/emailPoubellePhp/">emailPoubelle.php</a></p>
<?php
// execute lifeExpir if isn't in crontab
if (!CRON) { LifeExpire(); }
// Close connexion DB
$dbco = null;
// checkupdate
echo CheckUpdate();
} // end maintenance mod
?>

View file

@ -1,174 +0,0 @@
<?php
//-----------------------------------------------------------
// Title : Email Poubelle
// Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html
// Author : David Mercereau - david [aro] mercereau [.] info
// Home : http://poubelle.zici.fr
// Date : 08/2013
// Version : 1.0
// Depend : Postifx (postmap command) php-pdo
//-----------------------------------------------------------
session_start();
$auth=false;
if (isset($_POST['adminPassword'])) {
$_SESSION['adminPasswordHash'] = password_hash($_POST['adminPassword'], PASSWORD_DEFAULT);
}
if (isset($_SESSION['adminPasswordHash'])) {
if (password_verify(ADMIN_PASSWORD, $_SESSION['adminPasswordHash'])) {
$auth=true;
} else {
$auth=false;
}
}
if (isset($_POST['adminPassword']) && $auth==false) {
echo '<div class="highlight-1">'._('Error: Incorrect password').'</div>';
}
if (empty($_SESSION['adminPasswordHash']) || $auth == false) {
echo '<form action="#" method="post">
<label>'.('The admin password').' : </label>
<input type="password" name="adminPassword" />
<input type="submit" />
</form>';
}
// 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']);
}
}
?>
<script>
function confirmation(idForm, idAction, action) {
if (confirm(action + " : êtes-vous sûr ?")) {
document.getElementById(idAction).value = action;
document.getElementById(idForm).submit();
}
}
</script>
<?php
echo '<p>'._('Statistics').' : </p>';
echo '<ul>';
echo '<li>'._('Total alias').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias")->fetchColumn().'</li>';
echo '<li>'._('Active alias').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 5")->fetchColumn().'</li>';
echo '<li>'._('Alias suspended').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 3")->fetchColumn().'</li>';
echo '<li>'._('Alias not verified').' : '.$dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE status = 0")->fetchColumn().'</li>';
//echo '<li>Email différent : '.$dbco->query("SELECT DISTINCT count(email) FROM ".DBTABLEPREFIX."alias WHERE status = 5")->fetchColumn().'</li>';
echo '</ul>';
echo '<h3 id="user">User info</h3>';
echo '<form action="#" method="post">
<label>'._('User email').' : </label>
<input type="text" value="'.$_POST['email'].'" name="email" />
<input type="submit" />
</form>';
if (isset($_POST['email'])) {
$requestUtilisateur = $dbco->query("SELECT * FROM ".DBTABLEPREFIX."alias WHERE email='".$_POST['email']."' ORDER BY dateCreat DESC")->fetchAll() ;
echo '<p>User '.$_POST['email'].' : ';
if (count($requestUtilisateur) != 0) {
echo '<img onclick="confirmation(\'uniqemail_'.$_POST['email'].'\', \'uniqaction_'.$_POST['email'].'\', \'DeleteEmail\')" src="'.URLINC.'/sup.png" alt="sup" />';
if (!BlacklistEmail($_POST['email'])) {
echo '<img onclick="confirmation(\'uniqemail_'.$_POST['email'].'\', \'uniqaction_'.$_POST['email'].'\', \'AddBlacklistEmail\')" src="'.URLINC.'/blk.png" alt="blk" />';
}
} else {
echo 'Not found !';
}
echo '<form style="display: none" method="post" action="#" id="uniqemail_'.$_POST['email'].'">
<input type="hidden" name="email" value="'.$_POST['email'].'" />
<input type="hidden" id="uniqaction_'.$_POST['email'].'" name="action" value="" />
</form>';
echo '</p>';
if (count($requestUtilisateur) != 0) {
echo '<table>';
echo '<tr>
<th>Status</th>
<th>Alias</th>
<th>DateCreat</th>
<th>DateExpir</th>
<th>Comment</th>
</tr>';
foreach ($requestUtilisateur as $utilisateur) {
echo '<tr>
<td><img src="'.URLINC.'/status'.$utilisateur['status'].'.png" alt="'.$utilisateur['status'].'" /></td>
<td>'.$utilisateur['alias'].'
<br /><form style="display: none" method="post" action="#" id="alias'.$utilisateur['id'].'">
<input type="hidden" name="id" value="'.$utilisateur['id'].'" />
<input type="hidden" name="alias" value="'.$utilisateur['alias'].'" />
<input type="hidden" name="email" value="'.$_POST['email'].'" />
<input type="hidden" id="action'.$utilisateur['id'].'" name="action" value="" />
</form>
<img onclick="confirmation(\'alias'.$utilisateur['id'].'\', \'action'.$utilisateur['id'].'\', \'DeleteAlias\')" src="'.URLINC.'/sup.png" alt="sup" />';
if ($utilisateur['status'] == 5) {
echo '<img onclick="confirmation(\'alias'.$utilisateur['id'].'\', \'action'.$utilisateur['id'].'\', \'DisableAlias\')" src="'.URLINC.'/status3.png" alt="Suspendre" />';
}
echo '</td>
<td>'.$utilisateur['dateCreat'].'</td>
<td>'.$utilisateur['dateExpir'].'</td>
<td>'.$utilisateur['comment'].'</td>
</tr>';
}
echo '</table>';
}
}
echo '<h3 id="top">Top user </h3>';
$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 '<table>';
echo '<tr>
<th>Email</th>
<th style="text-align: center">Number of alias</th>
<th style="text-align: center">Action</th>
</tr>';
foreach ($recordActifs as $recordActif) {
echo '<tr>
<td>';
if (BlacklistEmail($recordActif['email'])) {
echo '<img src="'.URLINC.'/blk.png" alt="blk" /> ';
}
echo $recordActif['email'].'</td>
<td style="text-align: center">'.$recordActif['calias'].'</td>
<td style="text-align: center">
<form style="display: none" method="post" action="#" id="email_'.$recordActif['email'].'">
<input type="hidden" name="email" value="'.$recordActif['email'].'" />
<input type="hidden" id="action_'.$recordActif['email'].'" name="action" value="" />
</form>
<img onclick="confirmation(\'email_'.$recordActif['email'].'\', \'action_'.$recordActif['email'].'\', \'DeleteEmail\')" src="'.URLINC.'/sup.png" alt="sup" />';
if (!BlacklistEmail($recordActif['email'])) {
echo '<img onclick="confirmation(\'email_'.$recordActif['email'].'\', \'action_'.$recordActif['email'].'\', \'AddBlacklistEmail\')" src="'.URLINC.'/blk.png" alt="blk" />';
}
echo '
</td>
</tr>';
}
echo '</table>';
}
?>

Binary file not shown.

View file

@ -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 <a href=\"http://forge.zici.fr/p/emailpoubelle-php/\"> install this script </a> on a personal server if you want more quota"
msgstr "Erreur : Vous avez atteind votre quota limite d'alias sur cette application. Vous pouvez <a href=\"http://forge.zici.fr/p/emailpoubelle-php/\">installer ce script</a> 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"

View file

@ -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 <a href="
"\"http://forge.zici.fr/p/emailpoubelle-php/\"> install this script </a> on a "
"personal server if you want more quota"
msgstr ""
"Erreur : Vous avez atteind votre quota limite d'alias sur cette "
"application. Vous pouvez <a href=\"http://forge.zici.fr/p/emailpoubelle-php/"
"\">installer ce script</a> 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."

Binary file not shown.

View file

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 <a href="
"\"http://forge.zici.fr/p/emailpoubelle-php/\"> install this script </a> on a "
"personal server if you want more quota"
msgstr ""
"Errore : Hai raggiunto la tua limite su questa app. Puoi <a href="
"\"http://forge.zici.fr/p/emailpoubelle-php/\"> installare questo script </a> "
"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"

View file

@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 <a href="
"\"http://forge.zici.fr/p/emailpoubelle-php/\"> install this script </a> 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 ""

View file

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,492 +0,0 @@
<?php
//////////////////
// Function
//////////////////
// Status explication :
// 0=not verified - 3=disable - 5=active
// Verification des emails
function VerifMXemail($email) {
if (CHECKMX) {
$domaine=explode('@', $email);
$r = new Net_DNS2_Resolver(array('nameservers' => 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 '<div class="highlight-3"><b>'.$email.'</b> '._('has been deleted with all these aliases').'.</div>';
} catch ( PDOException $e ) {
echo "DB error : ", $e->getMessage();
die();
}
} else {
echo '<div class="highlight-1">'._('Erreur').' : <b>'.$email.'</b> '._('has not been deleted').'.</div>';
}
UpdateVirtualDB();
}
function AddBlacklistEmail($email) {
$contenu = '/^'.$email.'$/';
$fichier = fopen(BLACKLIST, 'a');
fwrite($fichier, $contenu."\n");
fclose($fichier);
echo '<div class="highlight-3">La mention '.$contenu.' a été ajouté au fichier de blackliste '.BLACKLIST.'</div>';
}
// 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 '<div class="highlight-3"><b>'.$alias_full.'</b> '._('has been deleted').'</div>';
} catch ( PDOException $e ) {
echo "DB error : ", $e->getMessage();
die();
}
} else {
echo '<div class="highlight-1">'._('Error: email trash unknown').'</div>';
}
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 '<div class="highlight-1">'._('Error: Can not find this trash email').'</div>';
} else if ($alias_fetch['status'] == 3) {
UpdateStatusAlias($alias_fetch['id'], $alias_full, 5);
echo '<div class="highlight-3">'._('The reception on').' <b>'.$alias_full.'</b> '._('is active again').'.</div>';
} else if ($alias_fetch['status'] == 5) {
echo '<div class="highlight-2">'._('The reception on').' <b>'.$alias_full.'</b> '._('is already active').'.</div>';
} else if ($alias_fetch['status'] == 0) {
echo '<div class="highlight-1">'._('The reception on').' <b>'.$alias_full.'</b '._('has not been confirmed by email').'.</div>';
} else {
echo '<div class="highlight-1">'._('Error: unknown status').'</div>';
}
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 '<div class="highlight-1">'._('Error: Can not find this trash email').'</div>';
} else if ($alias_fetch['status'] == 5) {
UpdateStatusAlias($alias_fetch['id'], $alias_full, 3);
echo '<div class="highlight-3">'._('The reception on').' <b>'.$alias_full.'</b> '._('is now suspended').'.</div>';
} else if ($alias_fetch['status'] == 3) {
echo '<div class="highlight-2">'._('The reception on').' <b>'.$alias_full.'</b> '._('is already suspended').'.</div>';
} else if ($alias_fetch['status'] == 0) {
echo '<div class="highlight-1">'._('The reception on').' <b>'.$alias_full.'</b> '._('can not be suspended because it has not been activated yet').'.</div>';
} else {
echo '<div class="highlight-1">'._('Error: unknown status').'</div>';
}
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.: &quot; etc.)
// Also strips any <html> 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.: &quot; etc.)
// It preserves any <html> tags in that they are encoded aswell (like &lt;html&gt;)
// 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 '<p>Upgrade note: Your version is in '.VERSION.' while the current version is in '.$file_current_version.'</p>';
} 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 '<script>
function langSwitch(lang) {
document.getElementById(\'langSwitch\').value = lang;
document.getElementById(\'fromLangueSwitch\').submit();
}
</script>
<div class="eplangswitch" style="float: right">
<form id="fromLangueSwitch" action="#" method="post">
<input type="hidden" name="langSwitch" value="" id="langSwitch" />
<img alt="fr" src="'.URLINC.'/fr.png" onclick="langSwitch(\'fr\');" />
<img alt="it" src="'.URLINC.'/it.png" onclick="langSwitch(\'it\');" />
<img alt="en" src="'.URLINC.'/en.png" onclick="langSwitch(\'en\');" />
</form>
</div>';
}
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;
}
}
?>

View file

@ -1,67 +0,0 @@
<?php
$country = @geoip_country_code_by_name(get_ip());
$HTTP_ACCEPT_LANGUAGE=$_SERVER['HTTP_ACCEPT_LANGUAGE'];
$lang_from_http_accept = explode(',', $HTTP_ACCEPT_LANGUAGE);
$lang = $lang_from_http_accept[0];
// Dans les URL on utilisera les codes langues https://support.crowdin.com/api/language-codes/
// On a une fonction pour retrouve le local à partir (et vis et versa)
// CODE LOCALE (locale -a)
$langueEtLocalDispo=array(
'fr' => '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.'<br />';
$lang_from_http_accept = explode(',', $HTTP_ACCEPT_LANGUAGE);
//echo $lang_from_http_accept[0].'<br />';
$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].'<br />';
$locale = lang2locale($lang_from_http_accept[0]);
}
//echo $locale.'<br />';
$lang = locale2lang($locale);
//echo $lang.'<br />';
}
// 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");
?>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 901 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 360 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 358 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 355 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 B

View file

@ -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]+$/

View file

@ -1,7 +0,0 @@
/^exemple@exemple.com$/
/.pl$/
/^exemple[1-9]+@toto.fr$/
/@yopmail.com$/
/^harou/
/@gmx.com$/
/^sportnet/

View file

@ -1,197 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<title>emailPoubelle Admin - Template-exemple</title>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="robots" content="index,follow,noarchive">
<link rel="stylesheet" href="template-exemple/style.css">
<!--[if IE]><script src="template-exemple/html5-ie.js"></script><![endif]-->
</head>
<body>
<!--[if lte IE 6]>
<div class="alert-ie6" style="padding: 1em; background: #900; font-size: 1.1em; color: #fff;">
<p><strong>Attention ! </strong> Votre navigateur (Internet Explorer 6 ou 7) présente de sérieuses lacunes en terme de sécurité et de performances, dues à son obsolescence (il date de 2001).<br />En conséquence, ce site sera consultable mais de manière moins optimale qu'avec un navigateur récent (<a href="http://www.browserforthebetter.com/download.html" style="color: #fff;">Internet Explorer 8</a>, <a href="http://www.mozilla-europe.org/fr/firefox/" style="color: #fff;">Firefox 3</a>, <a href="http://www.google.com/chrome?hl=fr" style="color: #fff;">Chrome</a>, <a href="http://www.apple.com/fr/safari/download/" style="color: #fff;">Safari</a>,...)</p>
</div>
<![endif]-->
<div id="a">
<header>
<a href="/" title="Startseite"><strong>OWMX-2</strong> HTML5 &amp; CSS3</a>
</header>
<div id="b">
<article>
<h1><?= _('Emails trash free') ?> - <?= _('Admin space') ?></h1>
<p><?= _('Generate trash emails without lifetime constraint') ?>. </p>
<?php
// Intégration dans votre site :
if (file_exists('../conf.php')) {
include('../conf.php');
} else {
include('../conf-dist.php');
}
include('../emailPoubelleAdmin.php');
?>
<h3>Let the Show Begin - Pre and Code</h3>
<p>This is how it looks if you use <code>pre</code> and <code>code</code> together, for example to highlight and nicely markup a piece of code:</p>
<pre><code>pre {<br /> font-size : 12px;<br /> background : #F0F0F0;<br />}</code></pre>
<h3>Example Blockquote</h3>
<p>If you want to quote somebody, you can use this perfectly semantic example for a blockquote:</p>
<cite>Jonas Jacek</cite>
<blockquote cite="http://www.rield.com/">
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.
</blockquote>
<h3>Examples Alerts, Notice &amp; Confirmation</h3>
<p>These sample styles for alerts and notices are useful if you want to use the template in content management systems.</p>
<p class="highlight-1"><strong>Alert:</strong> This is how an alert looks like.</p>
<p class="highlight-2"><strong>Notice:</strong> This is how a notice looks like.</p>
<p class="highlight-3"><strong>Confirmation:</strong> This is how a confirmation looks like.</p>
<h3>Example Table</h3>
<p>The following is the design for a table. The style is simple and user-friendly. Some of the effects were made with CSS3.</p>
<table>
<caption>Mini HTML5 Reference Guide</caption>
<tbody>
<tr>
<th>Tag</th>
<th>Info</th>
<th>Attributes</th>
</tr>
<tr>
<td>&lt;abbr&gt;</td>
<td>abbreviation</td>
<td>global attributes**</td>
</tr>
<tr>
<td>&lt;area&gt;</td>
<td>in an image map</td>
<td> alt, coords, href, hreflang, media, ping, rel, shape, target, type</td>
</tr>
<tr>
<td>&lt;article&gt;</td>
<td>article/ content</td>
<td>global attributes**</td>
</tr>
<tr>
<td>&lt;aside&gt;</td>
<td>sidebar</td>
<td>global attributes**</td>
</tr>
<tr>
<td>&lt;audio&gt;</td>
<td>sound content</td>
<td>autobuffer, autoplay, controls, loop, src</td>
</tr>
<tr>
<td>&lt;b&gt;</td>
<td>bold text</td>
<td>global attributes**</td>
</tr>
</tbody>
</table>
<h3>Example hCalendar</h3>
<p>The following is a definition list in combination with the hCalendar microformat. </p>
<dl class="vevent">
<dt class="dtstart"><abbr title="2010-11-18" class="dtstart">11-18-2010</abbr></dt>
<dd class="summary">Conference Name</dd>
<dd><a href="#" class="url">http://www.conference-website.com/</a></dd>
<dd class="description">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi nec eleifend diam. Fusce lobortis odio ac sem scelerisque sed iaculis purus ornare.</dd>
</dl>
<h3>Example Video</h3>
<p>You can put your Video-Files here...</p>
<video src="movie.ogg" controls>your browser does not support the video tag</video>
<h3>Example Audio</h3>
<p>You can put your Audio-Files here...</p>
<audio src="file.ogg" controls>your browser does not support the audio tag</audio>
<h3>Example Lists</h3>
<p>Two different kinds of lists were styled: Ordered lists (ol) and unordered (ul) lists.</p>
<ol>
<li>This is</li>
<li>The Ordered</li>
<li>Listing</li>
</ol>
<ul>
<li>This is</li>
<li>The Unordered</li>
<li>Listing</li>
</ul>
<h3>Example Form</h3>
<p>This is how a form will look like in this template.</p>
<form action="#">
<label>Name</label>
<input name="#" type="text" value="Your Name">
<label>Email</label>
<input name="#" type="text" value="Your Email">
<label>Your Comments</label>
<textarea>This is a Comment...</textarea>
<br>
<input class="button" type="submit">
</form>
<section class="meta">
<p>Author: <a href="http://www.jabz.info/contact/jonas-jared-jacek/">Jonas Jacek</a> | Date: 2010-01-21 | Comments: <a href="#">7</a></p>
<p>Tags: <a href="#" rel="tag">quisquam</a>, <a href="#" rel="tag">Tags</a>, <a href="#" rel="tag">dolorem</a> <a href="#" rel="tag">Tags</a>, <a href="#" rel="tag">Tags</a></p>
</section>
</article>
<aside>
<h4>Search</h4>
<form action="#" class="s">
<input name="search" type="text" value="Type term and hit enter...">
</form>
<h4>About the Author</h4>
<div id="c">
<img src="template-exemple/jonas-jacek.png" alt="Jonas Jacek">
<p>Hi, my name is <a href="http://www.jabz.info/contact/jonas-jared-jacek/">Jonas Jacek</a>.<br> Welcome to my new HTML5 / CSS3 blog.</p>
<p>I am a web designer, web developer and Internet marketing enthusiast.</p>
<p>I strongly believe in open-source software and open standards.</p>
</div>
<nav>
<h4>Navigation</h4>
<ul>
<li><a href="#">Lorem</a></li>
<li><a href="#">Ipsum</a></li>
<li class="active"><a href="#">Dolor Sit</a>
<ul>
<li><a href="#">Amet</a></li>
<li><a href="#">Amet</a></li>
</ul>
</li>
<li><a href="#">Downloads</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<h4>Example Gallery</h4>
<ul class="gallery">
<li><a href="index.html"><img src="template-exemple/img1.png"/></a></li>
<li><a href="index.html"><img src="template-exemple/img2.png"/></a></li>
<li><a href="index.html"><img src="template-exemple/img3.png"/></a></li>
</ul>
<ul class="gallery">
<li><a href="index.html"><img src="template-exemple/img4.png"/></a></li>
<li><a href="index.html"><img src="template-exemple/img5.png"/></a></li>
<li><a href="index.html"><img src="template-exemple/img6.png"/></a></li>
</ul>
<h4>AdSpace</h4>
<div class="adspace">
<a href="http://www.jabz.biz/" rel="me"><img src="template-exemple/jabz-logo.png" alt="Jabz Internet Marketing GmbH" title="Jabz Internet Marketing GmbH"/></a>
</div>
<h4>Example Blogroll</h4>
<ul>
<li><a href="http://www.jabz.biz/">Jabz Internet Marketing GmbH</a></li>
<li><a href="http://www.jabz.info/contact/jonas-jared-jacek/">Jonas Jacek</a></li>
<li><a href="http://www.w3.org/">World Wide Web Consortium</a></li>
<li><a href="http://www.getfirefox.com/">Firefox Web Browser</a></li>
</ul>
<h4>Example Tag Cloud</h4>
<ul id="tagcloud">
<li class="tagcloudsize-1"><a href="#">Lorem</a></li>
<li class="tagcloudsize-2"><a href="#">Ipsum</a></li>
<li class="tagcloudsize-3"><a href="#">Dolor</a></li>
<li class="tagcloudsize-2"><a href="#">Sit Amet</a></li>
<li class="tagcloudsize-1"><a href="#">Consectetur</a></li>
</ul>
</aside>
</div>
<footer>
<p>Template Design &amp; Markup by <a href="http://www.jabz.info/contact/jonas-jared-jacek/" title="Profile of Jonas Jacek">Jonas Jacek</a> for <a href="http://www.owmx.com/" title="Free HTML5 &amp; CSS3 Web Template | owmx.com">Free HTML5 &amp; CSS3 Web Templates</a>.</p>
</footer>
</div>
</html>

View file

@ -1,36 +0,0 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<title>emailPoubelle - Template-exemple</title>
<meta charset="UTF-8">
<meta name="description" content="">
<meta name="robots" content="index,follow,noarchive">
<link rel="stylesheet" href="template-exemple/style.css">
<!--[if IE]><script src="template-exemple/html5-ie.js"></script><![endif]-->
</head>
<body>
<!--[if lte IE 6]>
<div class="alert-ie6" style="padding: 1em; background: #900; font-size: 1.1em; color: #fff;">
<p><strong>Attention ! </strong> Votre navigateur (Internet Explorer 6 ou 7) présente de sérieuses lacunes en terme de sécurité et de performances, dues à son obsolescence (il date de 2001).<br />En conséquence, ce site sera consultable mais de manière moins optimale qu'avec un navigateur récent (<a href="http://www.browserforthebetter.com/download.html" style="color: #fff;">Internet Explorer 8</a>, <a href="http://www.mozilla-europe.org/fr/firefox/" style="color: #fff;">Firefox 3</a>, <a href="http://www.google.com/chrome?hl=fr" style="color: #fff;">Chrome</a>, <a href="http://www.apple.com/fr/safari/download/" style="color: #fff;">Safari</a>,...)</p>
</div>
<![endif]-->
<div id="a">
<header>
<a href="/" title="Startseite"><strong>OWMX-2</strong> HTML5 &amp; CSS3</a>
</header>
<div id="b">
<article>
<h1><?= _('Emails trash free') ?></h1>
<p><?= _('Generate trash emails without lifetime constraint') ?>. </p>
<?php
// Intégration dans votre site :
if (file_exists('../conf.php')) {
include('../conf.php');
} else {
include('../conf-dist.php');
}
include('../emailPoubelle.php');
?>
</div>
</div>
</html>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 183 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 136 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

View file

@ -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");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -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/.

View file

@ -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;
}