Add lost password recovery
This commit is contained in:
110
views/profil.py
110
views/profil.py
@@ -7,7 +7,7 @@ import sqlite3
|
||||
import os
|
||||
from socket import gethostname
|
||||
from flask_bcrypt import Bcrypt
|
||||
from tools.utils import email_disp, append_to_log, gen_token, valid_passwd
|
||||
from tools.utils import email_disp, append_to_log, gen_token, valid_passwd, valid_token_register, get_user_by_token
|
||||
|
||||
profil = Blueprint('profil', __name__, template_folder='templates')
|
||||
|
||||
@@ -49,7 +49,7 @@ def profile() :
|
||||
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 avatar, nom, prenom, age, mail_rescue FROM users WHERE name=?""", (UTILISATEUR,))
|
||||
cursor.execute("""SELECT avatar, nom, prenom, age, Mail_rescue FROM users WHERE name=?""", (UTILISATEUR,))
|
||||
tmp = (cursor.fetchone())
|
||||
profil_user = dict()
|
||||
profil_user['avatar'] = tmp[0]
|
||||
@@ -133,7 +133,7 @@ def change_passwd() :
|
||||
|
||||
if password == password_confirm and valid_passwd(password):
|
||||
mail_passwd_change = 0
|
||||
xmmp_passwd_change = 0
|
||||
xmpp_passwd_change = 0
|
||||
passwd = request.form['password']
|
||||
|
||||
if MAIL_SERVER:
|
||||
@@ -144,8 +144,8 @@ def change_passwd() :
|
||||
if XMPP_SERVER:
|
||||
tmp = mailbox['Mail'].split('@')
|
||||
cmd = SETUID+ " prosodyctl register '"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+passwd+"'"
|
||||
res = os.system(cmd)
|
||||
if res != 0:
|
||||
xmpp_passwd_change = os.system(cmd)
|
||||
if xmpp_passwd_change != 0:
|
||||
flash(u'Il y a eu un problème pour le changement du mot de passe du compte XMPP !', 'error')
|
||||
|
||||
|
||||
@@ -177,6 +177,100 @@ def change_passwd() :
|
||||
return redirect(BASE_URL, code=401)
|
||||
|
||||
|
||||
@profil.route('/change-password-lost/<token>', methods=['GET','POST'] )
|
||||
def change_passwd_lost(token) :
|
||||
|
||||
if valid_token_register(token, "Lost password"):
|
||||
|
||||
user = get_user_by_token(token, "Lost password")
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT Mail, alias, xmpp FROM users WHERE name=?""", (user,))
|
||||
tmp = cursor.fetchone()
|
||||
mailbox = dict()
|
||||
mailbox['Mail'] = tmp[0]
|
||||
mailbox['alias'] = tmp[1]
|
||||
mailbox['xmpp'] = tmp[2]
|
||||
|
||||
|
||||
if request.method == 'GET' :
|
||||
return render_template('mailbox.html',
|
||||
section="Profil",
|
||||
address=mailbox['Mail'],
|
||||
username=user)
|
||||
else:
|
||||
|
||||
password = request.form['password']
|
||||
password_confirm = request.form['passwd_confirm']
|
||||
|
||||
if password == password_confirm and valid_passwd(password):
|
||||
mail_passwd_change = 0
|
||||
xmpp_passwd_change = 0
|
||||
|
||||
|
||||
if MAIL_SERVER:
|
||||
cmd = SETUID+ ' set_mail_passwd ' + '"'+mailbox['Mail']+'" '+ '"'+password+'"'
|
||||
mail_passwd_change = os.system(cmd)
|
||||
|
||||
if XMPP_SERVER:
|
||||
tmp = mailbox['Mail'].split('@')
|
||||
cmd = SETUID+ " prosodyctl register '"+tmp[0]+"' " + "'"+tmp[1]+"' " + "'"+password+"'"
|
||||
xmpp_change_passwd = os.system(cmd)
|
||||
if xmpp_passwd_change != 0:
|
||||
flash(u'Il y a eu un problème pour le changement du mot de passe du compte XMPP !', 'error')
|
||||
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
|
||||
if mail_passwd_change == 0:
|
||||
passwd_bcrypt = bcrypt.generate_password_hash(password)
|
||||
cursor.execute("UPDATE users SET passwd=? WHERE name=?",
|
||||
(passwd_bcrypt, user))
|
||||
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 + ' - ' + user + ' - ' + CLIENT_PLATFORM + '\n' + '---> ' + "Changement du mot de passe" + '\n'
|
||||
append_to_log(log, user)
|
||||
flash(u'Votre mot de passe a été changé', 'succes')
|
||||
cursor.execute("""UPDATE users set Lost_password_token='' where name=?""", (user,))
|
||||
conn.close()
|
||||
resp = redirect(url_for('loginlogout.login'))
|
||||
|
||||
else:
|
||||
if not( valid_passwd(password) ):
|
||||
flash(u'Le mot de passe ne peut pas contenir les caractères " et &', 'error')
|
||||
else:
|
||||
flash(u'Les mot de passes ne sont pas identique :/ ', 'error')
|
||||
|
||||
resp = render_template('mailbox.html',
|
||||
section="Profil",
|
||||
address=mailbox['Mail'],
|
||||
username=user)
|
||||
|
||||
return resp
|
||||
else:
|
||||
|
||||
return redirect(BASE_URL, code=401)
|
||||
|
||||
|
||||
@profil.route('/deltoken-password-lost/<token>', methods=['GET','POST'] )
|
||||
def deltoken_passwd_lost(token) :
|
||||
|
||||
if valid_token_register(token, "Lost password"):
|
||||
user = get_user_by_token(token, "Lost password")
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
|
||||
cursor.execute("""UPDATE users set Lost_password_token='' where name=?""", (user,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
flash(u'Votre jeton pour changer votre mot de passe a été supprimé', 'succes')
|
||||
else:
|
||||
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()
|
||||
@@ -271,12 +365,12 @@ def remove_alias(aliasrm):
|
||||
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'])
|
||||
def invitation():
|
||||
if 'username' in session:
|
||||
@@ -307,7 +401,7 @@ def generate_token():
|
||||
UTILISATEUR='%s' % escape(session['username'])
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
token = gen_token()
|
||||
token = gen_token("Invitation")
|
||||
cursor.execute("UPDATE users SET Token=? WHERE name=?",
|
||||
(token, UTILISATEUR))
|
||||
conn.commit()
|
||||
|
||||
Reference in New Issue
Block a user