PageRenderTime 54ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/auth_systems/password.py

https://github.com/benadida/auth-django-app
Python | 116 lines | 88 code | 17 blank | 11 comment | 10 complexity | d748ecfe15be4c2b76397f6bf102e829 MD5 | raw file
  1. """
  2. Username/Password Authentication
  3. """
  4. from django.core.urlresolvers import reverse
  5. from django import forms
  6. from django.core.mail import send_mail
  7. from django.conf import settings
  8. from django.http import HttpResponseRedirect
  9. import logging
  10. # some parameters to indicate that status updating is possible
  11. STATUS_UPDATES = False
  12. def create_user(username, password, name = None):
  13. from auth.models import User
  14. user = User.get_by_type_and_id('password', username)
  15. if user:
  16. raise Exception('user exists')
  17. info = {'password' : password, 'name': name}
  18. user = User.update_or_create(user_type='password', user_id=username, info = info)
  19. user.save()
  20. class LoginForm(forms.Form):
  21. username = forms.CharField(max_length=50)
  22. password = forms.CharField(widget=forms.PasswordInput(), max_length=100)
  23. def password_check(user, password):
  24. return (user and user.info['password'] == password)
  25. # the view for logging in
  26. def password_login_view(request):
  27. from auth.view_utils import render_template
  28. from auth.views import after
  29. from auth.models import User
  30. error = None
  31. if request.method == "GET":
  32. form = LoginForm()
  33. else:
  34. form = LoginForm(request.POST)
  35. if form.is_valid():
  36. username = form.cleaned_data['username'].strip()
  37. password = form.cleaned_data['password'].strip()
  38. try:
  39. user = User.get_by_type_and_id('password', username)
  40. if password_check(user, password):
  41. # set this in case we came here from another location than
  42. # the normal login process
  43. request.session['auth_system_name'] = 'password'
  44. if request.POST.has_key('return_url'):
  45. request.session['auth_return_url'] = request.POST.get('return_url')
  46. request.session['user'] = user
  47. return HttpResponseRedirect(reverse(after))
  48. except User.DoesNotExist:
  49. pass
  50. error = 'Bad Username or Password'
  51. return render_template(request, 'password/login', {'form': form, 'error': error})
  52. def password_forgotten_view(request):
  53. """
  54. forgotten password view and submit.
  55. includes return_url
  56. """
  57. from auth.view_utils import render_template
  58. from auth.models import User
  59. if request.method == "GET":
  60. return render_template(request, 'password/forgot', {'return_url': request.GET.get('return_url', '')})
  61. else:
  62. username = request.POST['username']
  63. return_url = request.POST['return_url']
  64. user = User.get_by_type_and_id('password', username)
  65. body = """
  66. This is a password reminder:
  67. Your username: %s
  68. Your password: %s
  69. --
  70. %s
  71. """ % (user.user_id, user.info['password'], settings.SITE_TITLE)
  72. # FIXME: make this a task
  73. send_mail('password reminder', body, settings.SERVER_EMAIL, ["%s <%s>" % (user.info['name'], user.info['email'])], fail_silently=False)
  74. return HttpResponseRedirect(return_url)
  75. def get_auth_url(request, redirect_url = None):
  76. return reverse(password_login_view)
  77. def get_user_info_after_auth(request):
  78. user = request.session['user']
  79. user_info = user.info
  80. return {'type': 'password', 'user_id' : user.user_id, 'name': user.name, 'info': user.info, 'token': None}
  81. def update_status(token, message):
  82. pass
  83. def send_message(user_id, user_name, user_info, subject, body):
  84. if user_info.has_key('email'):
  85. email = user_info['email']
  86. name = user_info.get('name', email)
  87. send_mail(subject, body, settings.SERVER_EMAIL, ["%s <%s>" % (name, email)], fail_silently=False)