api.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from django.contrib.auth import get_user_model
  2. from django.core.exceptions import ValidationError
  3. from django.http import JsonResponse
  4. from django.shortcuts import get_object_or_404
  5. from django.utils.translation import ugettext as _
  6. from django.views.decorators.debug import sensitive_post_parameters
  7. from misago.core.decorators import ajax_only, require_POST
  8. from misago.users import validators
  9. def api(f):
  10. @sensitive_post_parameters("email", "password")
  11. @ajax_only
  12. @require_POST
  13. def decorator(request, *args, **kwargs):
  14. if kwargs.get('user_id'):
  15. User = get_user_model()
  16. kwargs['user'] = get_object_or_404(User, pk=kwargs.pop('user_id'))
  17. try:
  18. return JsonResponse({
  19. 'has_error': 0,
  20. 'message': f(request, *args, **kwargs),
  21. })
  22. except ValidationError as e:
  23. return JsonResponse({
  24. 'has_error': 1,
  25. 'message': unicode(e.message)
  26. })
  27. return decorator
  28. @api
  29. def validate_username(request, user=None):
  30. try:
  31. validators.validate_username(request.POST['username'],
  32. exclude=user)
  33. return _("Entered username is valid.")
  34. except KeyError:
  35. raise ValidationError(_('Enter username.'))
  36. @api
  37. def validate_email(request, user=None):
  38. try:
  39. validators.validate_email(request.POST['email'],
  40. exclude=user)
  41. return _("Entered e-mail is valid.")
  42. except KeyError:
  43. raise ValidationError(_('Enter e-mail address.'))
  44. @api
  45. def validate_password(request):
  46. try:
  47. validators.validate_password(request.POST['password'])
  48. return _("Entered password is valid.")
  49. except KeyError:
  50. raise ValidationError(_('Enter password.'))