@@ -6,6 +6,9 @@ from .models import User, DBSession | |||
from mako.template import Template | |||
from pyramid_mailer import get_mailer | |||
from pyramid_mailer.message import Attachment, Message | |||
from .forms import UserPasswordForm | |||
from passlib.hash import argon2 | |||
from security import check_logged | |||
import datetime | |||
import re | |||
@@ -52,13 +55,18 @@ def forgot(request): | |||
@view_config(route_name='bymail', renderer="string") | |||
def bymail(request): | |||
myhash = request.matchdict.get('hash', "") | |||
reset = request.GET.get('reset', False) | |||
user = User.by_hash(myhash) | |||
if user: | |||
user.last_logged=datetime.datetime.now() | |||
DBSession.merge(user) | |||
headers = remember(request, user.uid) | |||
return HTTPFound(location=request.route_url('jm2l'), | |||
headers=headers) | |||
if reset: | |||
return HTTPFound(location=request.route_url('auth', action='reset'), | |||
headers=headers) | |||
else: | |||
return HTTPFound(location=request.route_url('jm2l'), | |||
headers=headers) | |||
else: | |||
headers = forget(request) | |||
return HTTPFound(location=request.route_url('auth', action='login'), | |||
@@ -92,3 +100,14 @@ def sign_in_out(request): | |||
headers=headers) | |||
@view_config(route_name='auth', match_param="action=reset", renderer="jm2l:templates/reset_password.mako") | |||
def reset_password(request): | |||
check_logged(request) | |||
form = UserPasswordForm(request.POST, request.user, meta={'csrf_context': request.session}) | |||
if request.method == 'POST' and form.validate(): | |||
request.user.password = argon2.using(rounds=4).hash(form.password.data) | |||
DBSession.merge(request.user) | |||
headers = remember(request, request.user.uid) | |||
return HTTPFound(location=request.route_url('jm2l'), | |||
headers=headers) | |||
return { 'password_form': form } |
@@ -222,6 +222,7 @@ class UserPasswordForm(MyBaseForm): | |||
filters=[strip_filter] | |||
) | |||
confirm = PasswordField('Confirmez') | |||
class UserRegisterForm(MyBaseForm): | |||
nom = StringField(u'Nom', [ | |||
@@ -33,7 +33,8 @@ L'équipe des <b>JM2L</b> | |||
<br> | |||
</%def> \ | |||
<%def name="Forgot(request, User)"> | |||
<H4>JM2L</H4> | |||
<img src="https://jm2l.linux-azur.org/${request.Year}/logo.png" alt="JM2L" /> | |||
<H4>JM2L</H4> | |||
Bonjour ${User.prenom},<br> | |||
<br> | |||
Vous venez de demander le renvoi de vos identifiants sur le site des JM2L.<br> | |||
@@ -42,15 +43,14 @@ Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le | |||
<a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a> | |||
<br> | |||
N'hésitez pas à l'ajouter à vos liens favoris. | |||
<br> | |||
<br><br> | |||
Vos identifiants de connexion sont les suivants: | |||
<br> | |||
<b>Login</b>:${User.slug}<br> | |||
<b>Password</b>:${User.password}<br> | |||
Une fois connecté vous pouvez changer votre mot de passe sur votre fiche. | |||
<br> | |||
<b>Login</b>:${User.slug}<br /><br /> | |||
Nous vous proposons de <a href="${request.route_url('bymail', hash=User.my_hash, _query={'reset':'1'})}">changer votre mot de passe !</a> | |||
<br /> | |||
<p> | |||
Pour plus d'information vous pouvez nous envoyer un mail à « contact at jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez | |||
Pour plus d'information vous pouvez nous envoyer un mail à « contact@jm2l.linux-azur.org ». Et si vous êtes vraiment perdu vous pouvez | |||
toujours nous téléphoner au +33 6 52 42 31 37. | |||
</p> | |||
<p> | |||
@@ -32,15 +32,15 @@ Bonjour ${User.pseudo or User.prenom}, | |||
Vous venez de demander le renvoi de vos identifiants sur le site des JM2L. | |||
Pour accéder à votre espace il vous suffit dorénavant de cliquer sur le lien suivant : | |||
${request.route_url('bymail', hash=User.my_hash)}. | |||
<URL:${request.route_url('bymail', hash=User.my_hash)}>. | |||
N'hésitez pas à l'ajouter à vos liens favoris. | |||
Vos identifiants de connexion : | |||
Login: ${User.slug} | |||
Password: ${User.password} | |||
Vous êtes connecté : changez votre mot de passe sur votre fiche pour assurer votre sécurité :-) | |||
Nous vous proposons de changer votre mot de passe via le lien : | |||
<URL:${request.route_url('bymail', hash=User.my_hash, _query={'reset':'1'})}>. | |||
Pour plus d'information vous pouvez nous envoyer un message à « contact at jm2l.linux-azur.org ». | |||
Et si vous êtes vraiment perdu vous pouvez toujours nous téléphoner au +33 6 52 42 31 37. | |||
@@ -0,0 +1,24 @@ | |||
<%inherit file="jm2l:templates/layout.mako"/> | |||
<%namespace name="helpers" file="jm2l:templates/helpers.mako"/> | |||
<br /> | |||
<div class="container"> | |||
<form class="form-signin" action="/sign/reset" method="post"> | |||
<h3 class="form-signin-heading">Mot de passe</h3> | |||
<hr /> | |||
<p>Bonjour ${request.user.prenom},</p> | |||
<p> Afin de pouvoir maintenir l'accès au site, nous vous proposons de :</p> | |||
<strong>Changer votre mot de passe :</strong> | |||
<hr /> | |||
<% | |||
DicForm ={ | |||
'password': {'PlaceHolder':u"Nouveau mot de passe", 'class': "input-block-level"}, | |||
'confirm': {'PlaceHolder':u"Confirmez", 'class': "input-block-level"} | |||
} | |||
%> | |||
${helpers.DisplayForm(password_form, DicForm)} | |||
<div class="center"> | |||
<button class="btn btn-large btn-primary btn-block" type="submit">Mettre à jour !</button> | |||
</div><hr /> | |||
</form> | |||
<a href="${request.route_url('bymail', hash='plp', _query={'reset':'1'})}">changer votre mot de passe !</a> | |||
</div> |