Le repo des sources pour le site web des JM2L
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

94 lines
4.0 KiB

  1. # -*- coding: utf8 -*-
  2. from pyramid.view import view_config
  3. from pyramid.security import remember, forget
  4. from pyramid.httpexceptions import HTTPFound
  5. from .models import User, DBSession
  6. from mako.template import Template
  7. from pyramid_mailer import get_mailer
  8. from pyramid_mailer.message import Attachment, Message
  9. import datetime
  10. import re
  11. @view_config(route_name='auth', match_param="action=login", renderer="jm2l:templates/login.mako")
  12. def login(request):
  13. return {}
  14. @view_config(route_name='auth', match_param="action=forgot", renderer="jm2l:templates/login.mako")
  15. def forgot(request):
  16. if request.method == 'POST' and request.POST:
  17. request.POST.get('mail')
  18. Found = re.match(r'^.+@([^.@][^@]+)$', request.POST.get('mail'), re.IGNORECASE)
  19. if not Found:
  20. request.session.flash(('error',u"Vous n'avez pas entré un e-mail valide !"))
  21. return { 'forgot': True }
  22. else:
  23. UserFound = User.by_mail( Found.group(0) )
  24. if not UserFound:
  25. request.session.flash(('error',u"Nous n'avons pas d'interlocuteur avec cette adresse e-mail !"))
  26. return { 'forgot': True }
  27. else:
  28. # Send the Forgot Mail
  29. mailer = request.registry['mailer']
  30. # Prepare Plain Text Message :
  31. Mail_template = Template(filename='jm2l/templates/mail_plain.mako')
  32. mail_plain = Mail_template.render(request=request, User=UserFound, action="Forgot")
  33. body = Attachment(data=mail_plain, transfer_encoding="quoted-printable")
  34. # Prepare HTML Message :
  35. Mail_template = Template(filename='jm2l/templates/mail_html.mako')
  36. mail_html = Mail_template.render(request=request, User=UserFound, action="Forgot")
  37. html = Attachment(data=mail_html, transfer_encoding="quoted-printable")
  38. # Prepare Message
  39. message = Message(subject="[JM2L] Mes identifiants du site web JM2L",
  40. sender="contact@jm2l.linux-azur.org",
  41. recipients=[UserFound.mail],
  42. body=body, html=html)
  43. message.add_bcc("spam@style-python.fr")
  44. mailer.send(message)
  45. request.session.flash(('info',u"Vos informations de connection vous ont été renvoyé par e-mail"))
  46. return { 'forgot': True }
  47. @view_config(route_name='bymail', renderer="string")
  48. def bymail(request):
  49. myhash = request.matchdict.get('hash', "")
  50. user = User.by_hash(myhash)
  51. if user:
  52. user.last_logged=datetime.datetime.now()
  53. DBSession.merge(user)
  54. headers = remember(request, user.uid)
  55. return HTTPFound(location=request.route_url('jm2l'),
  56. headers=headers)
  57. else:
  58. headers = forget(request)
  59. return HTTPFound(location=request.route_url('auth', action='login'),
  60. headers=headers)
  61. @view_config(route_name='auth', match_param="action=in", renderer="string",
  62. request_method="POST")
  63. @view_config(route_name='auth', match_param="action=out", renderer="string")
  64. def sign_in_out(request):
  65. username = request.POST.get('username')
  66. if username:
  67. user = User.by_slug(username)
  68. if user and user.verify_password(request.POST.get('password')):
  69. user.last_logged=datetime.datetime.now()
  70. DBSession.merge(user)
  71. headers = remember(request, user.uid)
  72. return HTTPFound(location=request.route_url('jm2l'),
  73. headers=headers)
  74. else:
  75. headers = forget(request)
  76. else:
  77. headers = forget(request)
  78. if request.matchdict.get('action')=='in':
  79. request.session.flash(('error',u'Vous avez entré un mauvais couple identifiant/password !'))
  80. return HTTPFound(location="/sign/login",
  81. headers=headers)
  82. return HTTPFound(location=request.route_url('home', year=''),
  83. headers=headers)