/myewb/apps/account_extra/views.py

https://github.com/sboots/myewb2 · Python · 142 lines · 124 code · 15 blank · 3 comment · 25 complexity · 93417bebc89243ead2d3e9f2ae8a7a76 MD5 · raw file

  1. import re
  2. from django.conf import settings
  3. from django.shortcuts import render_to_response, get_object_or_404
  4. from django.http import HttpResponseRedirect, HttpResponseForbidden, HttpResponseNotFound, HttpResponse
  5. from django.contrib.auth import authenticate
  6. from django.contrib.auth import login as auth_login
  7. from django.contrib.auth.views import logout as pinaxlogout
  8. from django.contrib.auth.decorators import login_required
  9. from django.contrib.auth.models import User
  10. from django.core.urlresolvers import reverse
  11. from django.forms import fields
  12. from django.template import RequestContext
  13. from django.utils.translation import ugettext, ugettext_lazy as _
  14. from account.utils import get_default_redirect
  15. from emailconfirmation.models import EmailAddress, EmailConfirmation
  16. from account_extra.forms import EmailLoginForm, EmailSignupForm
  17. from account.views import login as pinaxlogin
  18. from account.views import signup as pinaxsignup
  19. from account.forms import AddEmailForm
  20. from base_groups.models import LogisticalGroup
  21. from siteutils import online_middleware
  22. def login(request, form_class=EmailLoginForm,
  23. template_name="account/login.html", success_url=None,
  24. associate_openid=False, openid_success_url=None, url_required=False):
  25. if not success_url:
  26. success_url = request.GET.get("url", None)
  27. return pinaxlogin(request, form_class, template_name, success_url,
  28. associate_openid, openid_success_url, url_required)
  29. def signup(request, form_class=EmailSignupForm,
  30. template_name="account/signup.html", success_url=None,
  31. chapter_slug=None):
  32. if success_url is None:
  33. success_url = get_default_redirect(request)
  34. if request.method == "POST":
  35. form = form_class(request.POST,
  36. chapter=chapter_slug)
  37. if form.is_valid():
  38. username, password = form.save()
  39. if settings.ACCOUNT_EMAIL_VERIFICATION:
  40. return render_to_response("account/verification_sent.html", {
  41. "email": form.cleaned_data["email"],
  42. }, context_instance=RequestContext(request))
  43. else:
  44. user = authenticate(username=username, password=password)
  45. auth_login(request, user)
  46. login_message=ugettext(u"Welcome back, %(name)s") % {
  47. 'name': user.visible_name
  48. }
  49. request.user.message_set.create(message=login_message)
  50. return HttpResponseRedirect(success_url)
  51. else:
  52. form = form_class(chapter=chapter_slug)
  53. return render_to_response(template_name, {
  54. "form": form,
  55. }, context_instance=RequestContext(request))
  56. def logout(request):
  57. online_middleware.remove_user(request)
  58. # TODO: leave a message saying "you've been logged out".
  59. # currently not possible (can't set messages for guest user) but will be
  60. # possible in django 1.2
  61. return pinaxlogout(request, next_page=reverse('home'))
  62. @login_required
  63. def email(request, form_class=AddEmailForm, template_name="account/email.html",
  64. username=None):
  65. if username:
  66. if not request.user.has_module_perms("profiles"):
  67. return HttpResponseForbidden()
  68. else:
  69. user = get_object_or_404(User, username=username)
  70. else:
  71. user = request.user
  72. if request.method == "POST" and request.user.is_authenticated():
  73. if request.POST["action"] == "add":
  74. add_email_form = form_class(user, request.POST)
  75. if add_email_form.is_valid():
  76. add_email_form.save()
  77. add_email_form = form_class() # @@@
  78. else:
  79. add_email_form = form_class(user)
  80. if request.POST["action"] == "send":
  81. email = request.POST["email"]
  82. try:
  83. email_address = EmailAddress.objects.get(
  84. user=user,
  85. email=email,
  86. )
  87. request.user.message_set.create(
  88. message=_("Confirmation email sent to %(email)s") % {
  89. 'email': email,
  90. })
  91. EmailConfirmation.objects.send_confirmation(email_address)
  92. except EmailAddress.DoesNotExist:
  93. pass
  94. elif request.POST["action"] == "remove":
  95. email = request.POST["email"]
  96. try:
  97. email_address = EmailAddress.objects.get(
  98. user=user,
  99. email=email
  100. )
  101. email_address.delete()
  102. request.user.message_set.create(
  103. message=_("Removed email address %(email)s") % {
  104. 'email': email,
  105. })
  106. except EmailAddress.DoesNotExist:
  107. pass
  108. elif request.POST["action"] == "primary":
  109. email = request.POST["email"]
  110. email_address = EmailAddress.objects.get(
  111. user=user,
  112. email=email,
  113. )
  114. email_address.set_as_primary()
  115. else:
  116. add_email_form = form_class()
  117. return render_to_response(template_name, {
  118. "add_email_form": add_email_form,
  119. "other_user": user,
  120. }, context_instance=RequestContext(request))
  121. def silent_signup(request, email):
  122. regex = re.compile(fields.email_re)
  123. if not regex.search(email):
  124. return HttpResponseNotFound() # invalid email
  125. group = get_object_or_404(LogisticalGroup, slug="silent_signup_api")
  126. group.add_email(email)
  127. return HttpResponse("success")