- class AgentLoginView(LoginView):
-
- serializer_class = LoginSerializer
- """
- Login Agent
- ---
- authentication:
- token of agent user
-
- input:
- email - string
- device - string ['android', 'iphone', 'web']
- password - string
- firebase_api_key - string
-
- parameters:
- none
-
- response codes:
- 200 - Success
-
- returns:
- Response Model - See below
-
- error conditions:
- 400 - Bad Request
- 412 - Email not confirmed
- ---
- """
- def post(self, request, *args, **kwargs):
- self.serializer = self.get_serializer(data=request.data)
- self.serializer.is_valid(raise_exception=True)
- self.login()
- if hasattr(self.user, 'agent_profile'):
- if not self.user.agent_profile.is_email_confirmed:
- raise EmailPermissionDeniedNotConfirmed()
-
- login_history = AgentLoginHistory(agent=self.user.agent_profile)
- login_history.save()
-
- try:
- firebase_token = self.request.data['firebase_api_key']
- device = self.request.data['device']
- self.user.agent_profile.firebase_api_key = firebase_token
- agent_firebase_token, created = AgentFirebaseToken.objects.get_or_create(
- token=firebase_token,
- device=device)
- agent_firebase_token.agent = self.user.agent_profile
- agent_firebase_token.save()
- except KeyError:
- pass
-
- # clean the firebase expired tokens
- tokens = AgentFirebaseToken.objects.filter(agent=self.user.agent_profile, device='android').values_list(
- "token",
- flat=True)
- if len(tokens) > 0:
- test_firebase_tokens_async.apply_async(kwargs={
- "tokens": list(tokens),
- "firebase_auth": settings.FIREBASE_AUTH_ANDROID
- })
-
- # filter ios tokens
- tokens = AgentFirebaseToken.objects.filter(agent=self.user.agent_profile, device='iphone').values_list(
- "token",
- flat=True)
-
- if len(tokens) > 0:
- test_firebase_tokens_async.apply_async(kwargs={
- "tokens": list(tokens),
- "firebase_auth": settings.FIREBASE_AUTH_IOS
- })
-
- self.user.agent_profile.last_login = login_history.date
-
- self.user.agent_profile.save()
- return self.get_response()
- else:
- raise PermissionDenied()