Example #1
0
    def put(self, request):

        user_settings = self.get_object(request.user)
        serializer = UserSettingsSerializer(user_settings, data=request.data)

        if serializer.is_valid():
            try:
                code = serializer.validated_data['code']
            except:
                return Response('Code is empty',
                                status=status.HTTP_400_BAD_REQUEST)
            try:
                flow = OAuth2WebServerFlow(
                    **Mobileclient._session_class.oauth._asdict())
                credential = flow.step2_exchange(code)
                credential_picked = codecs.encode(pickle.dumps(credential),
                                                  "base64").decode()

                gm = Mobileclient()
                current_device = gm.get_device_ids(credential)[0]
            except:
                # TODO change response and connect it to frontend
                return Response(
                    'Please enter the correct code or try again later',
                    status=status.HTTP_500_INTERNAL_SERVER_ERROR)

            user_settings.credential = credential_picked
            user_settings.current_device = current_device
            user_settings.credential_is_valid = True
            serializer.save()

            update_stats(request.user.pk)

            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)