Source code for deux.authtoken.views

from __future__ import absolute_import, unicode_literals

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response

from deux.authtoken.serializers import MFAAuthTokenSerializer


[docs]class ObtainMFAAuthToken(ObtainAuthToken): """ class::ObtainMFAAuthToken() View for authenticating which extends the ``ObtainAuthToken`` from Django Rest Framework's Token Authentication. """ serializer_class = MFAAuthTokenSerializer
[docs] def post(self, request, *args, **kwargs): """ function::post(self, request) Override ObtainAuthToken's post method for multifactor authentication. (1) When MFA is required, send the user a response indicating which challenge is required. (2) When authentication is successful return the auth token. :param request: Request object from the client. """ serializer = self.serializer_class(data=request.data) serializer.is_valid(raise_exception=True) data = serializer.validated_data if "mfa_required" in data and data["mfa_required"]: return Response({ "mfa_required": True, "mfa_type": serializer.validated_data["mfa_type"] }) else: user = serializer.validated_data['user'] token, created = Token.objects.get_or_create(user=user) return Response({"token": token.key})