Add lost password recovery
This commit is contained in:
@@ -4,6 +4,8 @@ from markupsafe import escape
|
||||
from flask_bcrypt import Bcrypt
|
||||
from socket import gethostname
|
||||
from os import remove, system
|
||||
from tools.utils import email_disp, valid_token_register, valid_passwd, valid_username, gen_token
|
||||
from tools.mailer import Mailer
|
||||
|
||||
app = Flask( 'pywallter' )
|
||||
app.config.from_pyfile('config.py')
|
||||
@@ -35,19 +37,25 @@ def login() :
|
||||
else :
|
||||
resp = redirect(url_for('loginlogout.login', _external=True))
|
||||
if request.method == 'POST' :
|
||||
user = request.form['user']
|
||||
password = request.form['passwd']
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT name, passwd FROM users""")
|
||||
users = cursor.fetchall()
|
||||
cursor.execute("""SELECT name, passwd FROM users WHERE name=?""", (user,))
|
||||
user_exist = cursor.fetchone()
|
||||
conn.close()
|
||||
password = request.form['passwd']
|
||||
for user in users:
|
||||
passwd = str(user[1] )
|
||||
if user[0] == request.form['user'] and bcrypt.check_password_hash(user[1], password) is True:
|
||||
|
||||
if user_exist:
|
||||
user = user_exist[0]
|
||||
passwd_bcrypt = user_exist[1].decode()
|
||||
|
||||
if user == request.form['user'] and bcrypt.check_password_hash(passwd_bcrypt, password) is True:
|
||||
session['username'] = request.form['user']
|
||||
resp = redirect(url_for('profil.profile', _external=True))
|
||||
else:
|
||||
flash(u'Mauvais nom d\'utilisateur ou mot de passe', 'error')
|
||||
flash(u'Mauvais mot de passe', 'error')
|
||||
else:
|
||||
flash(u"L'utilisateur n'existe pas", 'error')
|
||||
else:
|
||||
resp = render_template('accueil.html', signin_enable=app.config['SIGNIN_ENABLE'])
|
||||
return resp
|
||||
@@ -58,22 +66,23 @@ def logout():
|
||||
session.pop('username', None) # Supprimer username de la session s'il s'y trouve
|
||||
return redirect(url_for('loginlogout.index'))
|
||||
|
||||
|
||||
@loginlogout.route( '/delete_me/', methods=['GET','POST'])
|
||||
def delete_account():
|
||||
if 'username' in session :
|
||||
UTILISATEUR='%s'% escape(session['username'])
|
||||
user='%s'% escape(session['username'])
|
||||
resp = render_template('delete_account.html', time_backup=BACKUP_TIME)
|
||||
if request.method == 'POST' :
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT passwd FROM users WHERE name=?""", (UTILISATEUR,))
|
||||
passwd = cursor.fetchone()[0]
|
||||
cursor.execute("""SELECT passwd FROM users WHERE name=?""", (user,))
|
||||
passwd = cursor.fetchone()[0].decode()
|
||||
conn.close()
|
||||
password = request.form['passwd']
|
||||
if bcrypt.check_password_hash(passwd, password) is True:
|
||||
not_error = True
|
||||
try:
|
||||
cmd = 'rm -r ' + DATAS_USER + '/' + UTILISATEUR
|
||||
cmd = 'rm -r ' + DATAS_USER + '/' + user
|
||||
if system(cmd) != 0:
|
||||
raise TypeError("Remove directory error")
|
||||
except:
|
||||
@@ -101,7 +110,7 @@ def delete_account():
|
||||
try:
|
||||
conn = sqlite3.connect(DATABASE)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute("""DELETE FROM users WHERE name=?""", (UTILISATEUR,))
|
||||
cursor.execute("""DELETE FROM users WHERE name=?""", (user,))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
except:
|
||||
@@ -114,6 +123,42 @@ def delete_account():
|
||||
return resp
|
||||
|
||||
|
||||
@loginlogout.route( '/lost_password/', methods=['GET', 'POST'])
|
||||
def lost_password():
|
||||
if request.method == 'POST' :
|
||||
user = request.form['user']
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
cursor = conn.cursor() # Création de l'objet "curseur"
|
||||
cursor.execute("""SELECT name, Mail_rescue FROM users WHERE name=?""", (user,))
|
||||
find_user = cursor.fetchone()
|
||||
|
||||
if find_user:
|
||||
token = gen_token("Lost password")
|
||||
cursor.execute("UPDATE users SET Lost_password_token=? WHERE name=?",
|
||||
(token, user))
|
||||
conn.commit()
|
||||
mail_lost_password=Mailer()
|
||||
message = """
|
||||
"Vous avez fait une demande pour changer votre mot de passe, cliquez sur le liens en
|
||||
dessous pour changer votre mot de passe :
|
||||
"""+ BASE_URL + url_for('profil.change_passwd_lost', token=token) + """
|
||||
|
||||
Si ce n'est pas vous qui avez fait cette demande vous pouvez détruire le lien de changement
|
||||
de mot de passe en cliquant sur le lien en dessous \n
|
||||
"""+ BASE_URL + url_for('profil.deltoken_passwd_lost', token=token) + """
|
||||
|
||||
|
||||
Au plaisir de vous revoir sur pywallter """
|
||||
|
||||
if find_user[1]:
|
||||
flash(u"Un lien pour changer votre mot de passe a été envoyer à votre adresse email de secour ", 'succes')
|
||||
mail_lost_password.send_email(find_user[1], "Récupération de votre mot de passe", message )
|
||||
else:
|
||||
flash(u"L'utilisateur "+ user + " n'existe pas.", 'error')
|
||||
|
||||
|
||||
return render_template('lost_password.html')
|
||||
|
||||
@loginlogout.route( '/' )
|
||||
def index():
|
||||
conn = sqlite3.connect(DATABASE) # Connexion à la base de donnée
|
||||
|
||||
Reference in New Issue
Block a user