| @@ -6,6 +6,9 @@ from .models import User, DBSession | |||||
| from mako.template import Template | from mako.template import Template | ||||
| from pyramid_mailer import get_mailer | from pyramid_mailer import get_mailer | ||||
| from pyramid_mailer.message import Attachment, Message | from pyramid_mailer.message import Attachment, Message | ||||
| from .forms import UserPasswordForm | |||||
| from passlib.hash import argon2 | |||||
| from security import check_logged | |||||
| import datetime | import datetime | ||||
| import re | import re | ||||
| @@ -52,13 +55,18 @@ def forgot(request): | |||||
| @view_config(route_name='bymail', renderer="string") | @view_config(route_name='bymail', renderer="string") | ||||
| def bymail(request): | def bymail(request): | ||||
| myhash = request.matchdict.get('hash', "") | myhash = request.matchdict.get('hash', "") | ||||
| reset = request.GET.get('reset', False) | |||||
| user = User.by_hash(myhash) | user = User.by_hash(myhash) | ||||
| if user: | if user: | ||||
| user.last_logged=datetime.datetime.now() | user.last_logged=datetime.datetime.now() | ||||
| DBSession.merge(user) | DBSession.merge(user) | ||||
| headers = remember(request, user.uid) | 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: | else: | ||||
| headers = forget(request) | headers = forget(request) | ||||
| return HTTPFound(location=request.route_url('auth', action='login'), | return HTTPFound(location=request.route_url('auth', action='login'), | ||||
| @@ -92,3 +100,14 @@ def sign_in_out(request): | |||||
| headers=headers) | 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] | filters=[strip_filter] | ||||
| ) | ) | ||||
| confirm = PasswordField('Confirmez') | confirm = PasswordField('Confirmez') | ||||
| class UserRegisterForm(MyBaseForm): | class UserRegisterForm(MyBaseForm): | ||||
| nom = StringField(u'Nom', [ | nom = StringField(u'Nom', [ | ||||
| @@ -33,7 +33,8 @@ L'équipe des <b>JM2L</b> | |||||
| <br> | <br> | ||||
| </%def> \ | </%def> \ | ||||
| <%def name="Forgot(request, User)"> | <%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> | Bonjour ${User.prenom},<br> | ||||
| <br> | <br> | ||||
| Vous venez de demander le renvoi de vos identifiants sur le site des JM2L.<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> | <a href="${request.route_url('bymail', hash=User.my_hash)}">Votre lien !</a> | ||||
| <br> | <br> | ||||
| N'hésitez pas à l'ajouter à vos liens favoris. | N'hésitez pas à l'ajouter à vos liens favoris. | ||||
| <br> | |||||
| <br><br> | |||||
| Vos identifiants de connexion sont les suivants: | Vos identifiants de connexion sont les suivants: | ||||
| <br> | <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> | <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. | toujours nous téléphoner au +33 6 52 42 31 37. | ||||
| </p> | </p> | ||||
| <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. | 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 : | 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. | N'hésitez pas à l'ajouter à vos liens favoris. | ||||
| Vos identifiants de connexion : | Vos identifiants de connexion : | ||||
| Login: ${User.slug} | 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 ». | 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. | 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> | |||||