pywallter/views/mymailbox.py

162 lines
6.1 KiB
Python

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, login_required, set_mail_domain
mymailbox = Blueprint('mymailbox', __name__, template_folder='templates')
app = Flask( 'pywallter' )
app.config.from_pyfile('config.py')
#### Variables ###################################################################################
DOSSIER_PERSO = app.config.get('DOSSIER_APP')
extensionimg = app.config.get('EXT_IMG')
DATABASE = app.config.get('DATABASE')
DATAS_USER = app.config.get('DOSSIER_APP')
MAIL_SERVER = app.config.get('MAIL_SERVER')
XMPP_SERVER = app.config.get('XMPP_SERVER')
SETUID = app.config.get('SETUID')
BASE_URL = app.config.get('BASE_URL')
MAIL_WEBSERVICE = app.config.get('MAIL_WEBSERVICE')
XMPP_WEBSERVICE = app.config.get('XMPP_WEBSERVICE')
##################################################################################################
@mymailbox.route('/mymailbox/', methods=['GET'] )
@login_required
def mymessaging():
hostname=set_mail_domain()
user='%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 FROM users where name=?""", (user,))
tmp = cursor.fetchone()
myemail = tmp[0]
return render_template('mymessaging.html',
section="mymessaging",
hostname=hostname,
myemail=myemail,
imap_address=app.config.get('IMAP_ADDRESS'),
smtp_address=app.config.get('SMTP_ADDRESS'),
mail_server=MAIL_SERVER,
mail_webservice=MAIL_WEBSERVICE,
xmpp_server=XMPP_SERVER,
xmpp_webservice=XMPP_WEBSERVICE,
username=user )
@mymailbox.route('/mymailbox/alias', methods=['GET', 'POST'] )
@login_required
def myalias():
hostname = set_mail_domain()
user='%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', 'error')
if email_disp(alias):
cursor.execute("""SELECT Mail, alias FROM users where name=?""", (user,))
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, user))
conn.commit()
time_create_alias = time.strftime("%A %d %B %Y %H:%M:%S")
ip_address=request.environ['REMOTE_ADDR']
client_plateform=request.headers.get('User-Agent')
log=time_create_alias + ' - ' + ip_address + ' - ' + user + ' - ' + client_plateform + '\n' + '---> ' + "Ajout de l'alias "+ alias + '\n'
append_to_log(log, user)
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=?""",
(user,))
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=user )
@mymailbox.route('/mymailbox/rmalias/<aliasrm>')
@login_required
def remove_alias(aliasrm):
aliasrm = escape(aliasrm)
if MAIL_SERVER:
user='%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=?""", (user,))
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, user))
conn.commit()
time_del_alias=time.strftime("%A %d %B %Y %H:%M:%S")
ip_address=request.environ['REMOTE_ADDR']
client_platform=request.headers.get('User-Agent')
log = time_del_alias + ' - ' + ip_address + ' - ' + user + ' - ' + client_platform + '\n' + '---> ' + "Suppression de l'alias "+ alias + '\n'
append_to_log(log, user)
flash(u'Votre alias a été supprimé', 'succes')
else:
flash(u'Il y a eu une erreur', 'error')
return redirect(url_for('mymailbox.myalias'))