"Procédure réinitialisation mot de passe"

This commit is contained in:
Doug Le Tough 2018-04-06 11:01:39 +02:00
parent 0d221e6cc3
commit 14d801372f
3 changed files with 85 additions and 2 deletions

View File

@ -327,6 +327,39 @@ def update_user_by_id(user_id, login, password, confirm, name, phone, diet):
return False return False
return True return True
def reset_password(login, password, confirm):
if password != confirm:
# Password does not match confirmation
print "[+] [Reset password] Password mismatch confirmation"
return False
check_user = Tetawebapp_users.query.filter_by(mail=login).count()
if check_user == 0:
# User does not exist
print "[+] [Reset password] User does not exist"
return False
user = Tetawebapp_users.query.filter_by(mail=login).first()
if len(password) > 0:
# User requested password modification
hashed_password = bcrypt.hashpw(password, bcrypt.gensalt())
setattr(user, 'password', hashed_password)
# We also ask for a new account confirmation
link_id = gen_token(20)
setattr(user, 'link_id', link_id)
try:
db.session.add(user)
commit = db.session.commit()
send_reset_mail(login, link_id)
except Exception as e:
db.session.rollback()
print "[+] Error at reset_password:"
print "------------------------------"
print "%s" % e.message
print "------------------------------"
return False
if commit != None:
return False
return True
def delete_user(user_id): def delete_user(user_id):
""" Delete user """ """ Delete user """
try: try:
@ -599,7 +632,7 @@ def get_roles():
######################################################################## ########################################################################
def send_mail(email, link_id): def send_mail(email, link_id):
msg = Message("Confirmation d'inscription au staff THSF", msg = Message("[THSF] Confirmation d'inscription au staff THSF",
sender="dave.null@tetalab.org", sender="dave.null@tetalab.org",
recipients=[email]) recipients=[email])
msg.body = "Bonjour,\nVous recevez ce courriel car vous avez souhaité faire partie de l'équipe du staff du THSF.\n\n" msg.body = "Bonjour,\nVous recevez ce courriel car vous avez souhaité faire partie de l'équipe du staff du THSF.\n\n"
@ -615,6 +648,19 @@ def send_mail(email, link_id):
msg.body += "(Ce mail vous est envoyé par un robot qui n' a pas réussi le test de Turing, inutile de lui répondre)" msg.body += "(Ce mail vous est envoyé par un robot qui n' a pas réussi le test de Turing, inutile de lui répondre)"
mail.send(msg) mail.send(msg)
def send_reset_mail(email, link_id):
msg = Message("[THSF] Confirmation de réinitialisation de votre mot de passe",
sender="dave.null@tetalab.org",
recipients=[email])
msg.body = "Bonjour,\nVous recevez ce courriel car vous avez demandé la réinitialisation de votre mot de passe.\n\n"
msg.body += "Pour confirmer votre noueau mot de passe, rendez vous à la page suivante:\n"
msg.body += "%s/confirm/%s\n\n" % (str(app.config['DOMAIN_URL']), str(link_id))
msg.body += "Si vous n'êtes pas à l'origine de cette demande de réinitialisation, envoyez un email à contact@tetalab.org afin que soient prises les dispositions nécessaires.\n"
msg.body += "-- \n"
msg.body += "L'équipe d'organisation du THSF\n"
msg.body += "(Ce mail vous est envoyé par un robot qui n' a pas réussi le test de Turing, inutile de lui répondre)"
mail.send(msg)
######################################################################## ########################################################################
# Routes: # Routes:
# ------- # -------
@ -765,6 +811,26 @@ def update_account():
except AttributeError: except AttributeError:
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide") return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
@app.route("/account/reset/ask", methods=['GET', 'POST'])
def ask_reset():
""" Ask for password reset page """
return render_template('reset_password.html')
@app.route("/account/reset", methods=['GET', 'POST'])
def reset_account():
""" Password reset """
try:
login = request.form.get('login').encode('utf-8')
password = request.form.get('password').encode('utf-8')
confirm = request.form.get('confirm').encode('utf-8')
if reset_password(login, password, confirm):
message = "Une confirmation de la réinitialisation de votre mot de passe vous a été envoyé par email"
return render_template('login_or_register.html', message=message.decode('utf-8'))
message="Erreur lors de la réinitialisation du mot de passe"
return render_template('login_or_register.html', message=message.decode('utf-8'))
except AttributeError:
return render_template('login_or_register.html', message="Utilisateur ou mot de passe invalide")
@app.route("/logout", methods=['GET', 'POST']) @app.route("/logout", methods=['GET', 'POST'])
@check_session @check_session
def logout(): def logout():

View File

@ -52,7 +52,7 @@
<input type='submit' value='Connexion'> <input type='submit' value='Connexion'>
</form> </form>
<p class='note'> <p class='note'>
Mot de passe oublié ? Envoyez une <a href='https://bofh.tetalab.org/?do=newtask&project=2'>demande de réinitialisation de votre mot de passe</a>. Mot de passe oublié ? <a href='/account/reset/ask'>Réinitialisation de votre mot de passe</a>.
</p> </p>
</article> </article>
<hr/> <hr/>

View File

@ -0,0 +1,17 @@
{% extends "index.html" %}
{% block title %}Login{% endblock %}
{% block nav %}{% endblock %}
{% block main %}
<article class='login'>
<h3>Réinitialisation de votre mot de passe</h3>
<p>Merci de renseigner l'adresse email avec laquelle vous vous êtes enregistré et de saisir votre nouveau mot de passe</p>
</article>
<article class='left'>
<form method='POST' action='/account/reset' onsubmit='return register();'>
<label>Adresse mail: </label><input id='reg_mail' name='login' type='text' /><br/>
<label>Nouveau mot de passe (8 char min.): </label><input id='reg_password' name='password' type='password' required /><br/>
<label>Confirmation mot de passe: </label><input id='reg_confirm' name='confirm' type='password' required /><br/>
<input type='submit' value='Réinitialiser mon mot de passe'>
</form>
</article>
{% endblock %}