diff --git a/pywallter.py b/pywallter.py index 1f0f20b..138121c 100755 --- a/pywallter.py +++ b/pywallter.py @@ -12,6 +12,7 @@ from os import system from views.blog import blog from views.filesupload import filesupload from views.inscription import inscription +from views.mymailbox import mymailbox from views.profil import profil from views.logs import logs from views.loginlogout import loginlogout @@ -61,6 +62,7 @@ if MAIL_SERVER and mail_server_not_installed : app.register_blueprint(inscription) app.register_blueprint(blog) app.register_blueprint(filesupload) +app.register_blueprint(mymailbox) app.register_blueprint(profil) app.register_blueprint(logs) app.register_blueprint(loginlogout) diff --git a/views/mymailbox.py b/views/mymailbox.py new file mode 100644 index 0000000..6f1d9fd --- /dev/null +++ b/views/mymailbox.py @@ -0,0 +1,129 @@ +from flask import Blueprint, Flask, request, flash, render_template, url_for, session, redirect, abort, make_response, send_file, flash, abort, send_from_directory +from werkzeug.utils import secure_filename +from PIL import Image +from markupsafe import escape +import time +import sqlite3 +import os +from shutil import copy +from socket import gethostname +from tools.utils import email_disp, append_to_log, gen_token, valid_passwd + + + +mymailbox = Blueprint('mymailbox', __name__, template_folder='templates') + +app = Flask( 'pywallter' ) +app.config.from_pyfile('config.py') + + +#### Variables #################################################################################### +DOSSIER_PERSO = app.config['DOSSIER_APP'] + +extensionimg = app.config['EXT_IMG'] + +DATABASE = app.config['DATABASE'] +DATAS_USER = app.config['DOSSIER_APP'] +MAIL_SERVER = app.config['MAIL_SERVER'] +XMPP_SERVER = app.config['XMPP_SERVER'] +SETUID = app.config['SETUID'] +BASE_URL = app.config['BASE_URL'] +BACKUP_TIME = app.config['BACKUP_TIME'] + +################################################################################################## + + + +@mymailbox.route('/mymailbox/alias', methods=['GET', 'POST'] ) +def myalias(): + hostname=gethostname() + UTILISATEUR='%s' % escape(session['username']) + conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée + cursor = conn.cursor() # Création de l'objet "curseur" + if request.method == 'POST' and MAIL_SERVER: + if request.form['alias']: + alias = request.form['alias'].lower()+'@'+hostname + else: + flash(u'Addresse invalide') + + if email_disp(alias): + cursor.execute("""SELECT Mail, alias FROM users where name=?""", (UTILISATEUR,)) + tmp = cursor.fetchone() + mail = tmp[0] + if tmp[1]: + alias_list = tmp[1] + aliases = alias_list + "," +alias + else: + aliases = alias + cmd = SETUID+ " set_mail_alias " + "'"+mail+"'"+" add "+"'"+alias+"'" + res = os.system(cmd) + if res == 0: + cursor.execute("UPDATE users SET alias=? WHERE name=?", + (aliases, UTILISATEUR)) + conn.commit() + TIME=time.strftime("%A %d %B %Y %H:%M:%S") + IP=request.environ['REMOTE_ADDR'] + CLIENT_PLATFORM=request.headers.get('User-Agent') + + log=TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + "Ajout de l'alias "+ alias + '\n' + append_to_log(log, UTILISATEUR) + flash(u'Votre alias a été ajouté', 'succes') + else: + flash(u'Adresse indisponible', 'error') + else: + flash(u'Adresse indisponible', 'error') + + cursor.execute("""SELECT Mail, alias FROM users WHERE name=?""", + (UTILISATEUR,)) + tmp = cursor.fetchone() + mailbox = dict() + mailbox['Mail'] = tmp[0] + if tmp[1]: + mailbox['alias'] = tmp[1].split(',') + else: + mailbox['alias'] = list() + + conn.close() + return render_template('myalias.html', + section="mailbox", + email=mailbox['Mail'], + aliases=mailbox['alias'], + hostname=hostname, + MAIL_SERVER=MAIL_SERVER, + username=UTILISATEUR ) + + +@mymailbox.route('/mymailbox/rmalias/') +def remove_alias(aliasrm): + if MAIL_SERVER: + UTILISATEUR='%s' % escape(session['username']) + conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée + cursor = conn.cursor() # Création de l'objet "curseur" + cursor.execute("""SELECT Mail, alias FROM users WHERE name=?""", (UTILISATEUR,)) + tmp = cursor.fetchone() + mail = tmp[0] + alias_list = tmp[1].split(',') + aliases = "" + for alias in alias_list: + if alias != aliasrm: + if aliases: + aliases = aliases + "," + alias + else: + aliases = alias + cmd = SETUID + " set_mail_alias " + "'"+mail+"'"+" del "+"'"+alias+"'" + res = os.system(cmd) + if res == 0: + cursor.execute("UPDATE users SET alias=? WHERE name=?", + (aliases, UTILISATEUR)) + conn.commit() + TIME=time.strftime("%A %d %B %Y %H:%M:%S") + IP=request.environ['REMOTE_ADDR'] + CLIENT_PLATFORM=request.headers.get('User-Agent') + log = TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + "Suppression de l'alias "+ alias + '\n' + append_to_log(log, UTILISATEUR) + flash(u'Votre alias a été supprimé', 'succes') + else: + flash(u'Il y a eu une erreur', 'error') + + return redirect(url_for('mymailbox.myalias', _external=True)) + diff --git a/views/profil.py b/views/profil.py index 8f1c6c5..d27e900 100644 --- a/views/profil.py +++ b/views/profil.py @@ -355,105 +355,6 @@ def deltoken_passwd_lost(token) : flash(u'Votre jeton est invalide', 'succes') return redirect(url_for('loginlogout.login', _external=True)) - -@profil.route('/mymailbox/alias', methods=['GET', 'POST'] ) -def myalias(): - hostname=gethostname() - if 'username' in session: - UTILISATEUR='%s' % escape(session['username']) - conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée - cursor = conn.cursor() # Création de l'objet "curseur" - if request.method == 'POST' and MAIL_SERVER: - if request.form['alias']: - alias = request.form['alias'].lower()+'@'+hostname - else: - flash(u'Addresse invalide') - - if email_disp(alias): - cursor.execute("""SELECT Mail, alias FROM users where name=?""", (UTILISATEUR,)) - tmp = cursor.fetchone() - mail = tmp[0] - if tmp[1]: - alias_list = tmp[1] - aliases = alias_list + "," +alias - else: - aliases = alias - cmd = SETUID+ " set_mail_alias " + "'"+mail+"'"+" add "+"'"+alias+"'" - res = os.system(cmd) - if res == 0: - cursor.execute("UPDATE users SET alias=? WHERE name=?", - (aliases, UTILISATEUR)) - conn.commit() - TIME=time.strftime("%A %d %B %Y %H:%M:%S") - IP=request.environ['REMOTE_ADDR'] - CLIENT_PLATFORM=request.headers.get('User-Agent') - - log=TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + "Ajout de l'alias "+ alias + '\n' - append_to_log(log, UTILISATEUR) - flash(u'Votre alias a été ajouté', 'succes') - else: - flash(u'Adresse indisponible', 'error') - else: - flash(u'Adresse indisponible', 'error') - - cursor.execute("""SELECT Mail, alias FROM users WHERE name=?""", - (UTILISATEUR,)) - tmp = cursor.fetchone() - mailbox = dict() - mailbox['Mail'] = tmp[0] - if tmp[1]: - mailbox['alias'] = tmp[1].split(',') - else: - mailbox['alias'] = list() - conn.close() - return render_template('myalias.html', - section="mailbox", - email=mailbox['Mail'], - aliases=mailbox['alias'], - hostname=hostname, - MAIL_SERVER=MAIL_SERVER, - username=UTILISATEUR ) - - else: - return redirect(BASE_URL, code=401) - -@profil.route('/mymailbox/rmalias/') -def remove_alias(aliasrm): - if 'username' in session: - if MAIL_SERVER: - UTILISATEUR='%s' % escape(session['username']) - conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée - cursor = conn.cursor() # Création de l'objet "curseur" - cursor.execute("""SELECT Mail, alias FROM users WHERE name=?""", (UTILISATEUR,)) - tmp = cursor.fetchone() - mail = tmp[0] - alias_list = tmp[1].split(',') - aliases = "" - for alias in alias_list: - if alias != aliasrm: - if aliases: - aliases = aliases + "," + alias - else: - aliases = alias - cmd = SETUID + " set_mail_alias " + "'"+mail+"'"+" del "+"'"+alias+"'" - res = os.system(cmd) - if res == 0: - cursor.execute("UPDATE users SET alias=? WHERE name=?", - (aliases, UTILISATEUR)) - conn.commit() - TIME=time.strftime("%A %d %B %Y %H:%M:%S") - IP=request.environ['REMOTE_ADDR'] - CLIENT_PLATFORM=request.headers.get('User-Agent') - log = TIME + ' - ' + IP + ' - ' + UTILISATEUR + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + "Suppression de l'alias "+ alias + '\n' - append_to_log(log, UTILISATEUR) - flash(u'Votre alias a été supprimé', 'succes') - else: - flash(u'Il y a eu une erreur', 'error') - - return redirect(url_for('profil.myalias', _external=True)) - else: - return redirect(BASE_URL, code=401) - @profil.route('/invitation/', methods=['GET'])