예제 #1
0
    def get(self, request, activation_key):
        """
        View for confirm email.

        Receive an activation key as parameter and confirm email.
        """
        user = get_object_or_404(User, activation_key=str(activation_key))
        if user.confirm_email():
            return Response(status=status.HTTP_200_OK)

        log.warning(message='Email confirmation key not found.',
                    details={'http_status_code': status.HTTP_404_NOT_FOUND})
        return Response(status=status.HTTP_404_NOT_FOUND)
예제 #2
0
    def get(self, request, activation_key):
        """
        View for confirm email.

        Receive an activation key as parameter and confirm email.
        """
        user = get_object_or_404(User, activation_key=str(activation_key))
        if user.confirm_email():
            return Response(status=status.HTTP_200_OK)

        log.warning(message='Email confirmation key not found.',
                    details={'http_status_code': status.HTTP_404_NOT_FOUND})
        return Response(status=status.HTTP_404_NOT_FOUND)
예제 #3
0
    def post(self, request):
        """
        User login view.

        Based on JSONWebTokenAPIView from rest_framework_jwt.
        """
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            user = serializer.object.get('user') or request.user
            token = serializer.object.get('token')
            response_data = jwt_response_payload_handler(token, user, request)

            return Response(response_data)

        log.warning(message='Authentication failed.', details={'http_status_code': status.HTTP_401_UNAUTHORIZED})
        return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)
예제 #4
0
    def post(self, request):
        """
        User login view.

        Based on JSONWebTokenAPIView from rest_framework_jwt.
        """
        serializer = self.serializer_class(data=request.data)

        if serializer.is_valid():
            user = serializer.object.get('user') or request.user
            token = serializer.object.get('token')
            response_data = jwt_response_payload_handler(token, user, request)

            return Response(response_data)

        log.warning(message='Authentication failed.',
                    details={'http_status_code': status.HTTP_401_UNAUTHORIZED})
        return Response(serializer.errors, status=status.HTTP_401_UNAUTHORIZED)
예제 #5
0
    def post(self, request):
        """User login view."""
        log.info('UserLoginRegisterView::post::data: {}'.format(
            json.dumps(request.data)))
        try:
            access_token = request.data['access_token']
            graph_api = facebook.GraphAPI(
                access_token=access_token,
                version=settings.FACEBOOK_GRAPH_API_VERSION)
            facebook_user = accounts.v1.utils.get_facebook_user(graph_api)
            long_lived_fb_token = accounts.v1.utils.generate_long_lived_fb_token(
                access_token, graph_api)
        except KeyError:
            log.warning(
                message='Authentication failed.',
                details={'http_status_code': status.HTTP_400_BAD_REQUEST})
            return Response({'access_token': ['This field is required.']},
                            status=status.HTTP_400_BAD_REQUEST)
        except FacebookInvalidTokenException as error:
            log.warning(
                message='Authentication failed.',
                details={'http_status_code': status.HTTP_400_BAD_REQUEST})
            return Response({'access_token': [str(error)]},
                            status=status.HTTP_400_BAD_REQUEST)

        facebook_user['facebook_uid'] = facebook_user.pop('id')
        facebook_user['facebook_access_token'] = long_lived_fb_token
        facebook_user.update(request.data)

        temporary_email = False
        if 'email' not in facebook_user:
            temporary_email = True
            facebook_user['email'] = 'temporary_{}@temporary.com'.format(
                facebook_user['facebook_uid'])

        serializer = self.get_serializer(data=facebook_user)
        serializer.is_valid(raise_exception=True)
        user = serializer.create(serializer.validated_data)
        update_last_login(None, user)

        outdated = ('app_version' in request.data and float(
            request.data['app_version']) < settings.CURRENT_APP_VERSION)

        # create token
        token = AuthToken.objects.create(user)

        email = '' if temporary_email else user.email

        response_data = {
            'token': token,
            'outdated': outdated,
            'user': {
                'id': user.id,
                'one_signal_id': user.one_signal_id,
                'facebook_access_token': user.facebook_access_token,
                'facebook_uid': user.facebook_uid,
                'first_name': user.first_name,
                'last_name': user.last_name,
                'email': email,
                'phone_number': str(user.phone_number)
            }
        }
        return Response(response_data, status=status.HTTP_200_OK)