https://dpaste.de/bz1N

Are you sure to delete this snippet? No, don't delete
  1. class AgentLoginView(LoginView):
  2. serializer_class = LoginSerializer
  3. """
  4. Login Agent
  5. ---
  6. authentication:
  7. token of agent user
  8. input:
  9. email - string
  10. device - string ['android', 'iphone', 'web']
  11. password - string
  12. firebase_api_key - string
  13. parameters:
  14. none
  15. response codes:
  16. 200 - Success
  17. returns:
  18. Response Model - See below
  19. error conditions:
  20. 400 - Bad Request
  21. 412 - Email not confirmed
  22. ---
  23. """
  24. def post(self, request, *args, **kwargs):
  25. self.serializer = self.get_serializer(data=request.data)
  26. self.serializer.is_valid(raise_exception=True)
  27. self.login()
  28. if hasattr(self.user, 'agent_profile'):
  29. if not self.user.agent_profile.is_email_confirmed:
  30. raise EmailPermissionDeniedNotConfirmed()
  31. login_history = AgentLoginHistory(agent=self.user.agent_profile)
  32. login_history.save()
  33. try:
  34. firebase_token = self.request.data['firebase_api_key']
  35. device = self.request.data['device']
  36. self.user.agent_profile.firebase_api_key = firebase_token
  37. agent_firebase_token, created = AgentFirebaseToken.objects.get_or_create(
  38. token=firebase_token,
  39. device=device)
  40. agent_firebase_token.agent = self.user.agent_profile
  41. agent_firebase_token.save()
  42. except KeyError:
  43. pass
  44. # clean the firebase expired tokens
  45. tokens = AgentFirebaseToken.objects.filter(agent=self.user.agent_profile, device='android').values_list(
  46. "token",
  47. flat=True)
  48. if len(tokens) > 0:
  49. test_firebase_tokens_async.apply_async(kwargs={
  50. "tokens": list(tokens),
  51. "firebase_auth": settings.FIREBASE_AUTH_ANDROID
  52. })
  53. # filter ios tokens
  54. tokens = AgentFirebaseToken.objects.filter(agent=self.user.agent_profile, device='iphone').values_list(
  55. "token",
  56. flat=True)
  57. if len(tokens) > 0:
  58. test_firebase_tokens_async.apply_async(kwargs={
  59. "tokens": list(tokens),
  60. "firebase_auth": settings.FIREBASE_AUTH_IOS
  61. })
  62. self.user.agent_profile.last_login = login_history.date
  63. self.user.agent_profile.save()
  64. return self.get_response()
  65. else:
  66. raise PermissionDenied()

Edit this Snippet