예제 #1
0
def link_account(request):
    data = JSONParser().parse(request)
    # Validate that plugin is enabled for community
    _ = get_plugin_instance(
        data["platform_type"],
        Community.objects.get(slug=data["community_slug"]),
        community_platform_id=data.get("community_platform_id", None),
    )
    try:
        params = {
            "external_id": data["external_id"],
            "community": Community.objects.get(slug=data["community_slug"]),
            "platform_type": data["platform_type"],
            "platform_identifier": data["platform_identifier"],
            "community_platform_id": data.get("community_platform_id", None),
            "custom_data": data.get("custom_data", None),
            "link_type": data.get("link_type", None),
            "link_quality": data.get("link_quality", None),
        }
        account = identity.link_account(
            **identity.strip_null_values_from_dict(params))
        return JsonResponse(account.serialize(),
                            status=status.HTTP_200_OK,
                            safe=False)
    except Exception as error:
        return JsonResponse(error, status=status.HTTP_400_BAD_REQUEST)
예제 #2
0
def filter_users_by_account(request):
    community = Community.objects.get(slug=request.GET.get("community"))
    if request.GET.__contains__("platform_type"):
        # Validate that plugin is enabled for community
        _ = get_plugin_instance(
            request.GET.get("platform_type"),
            community,
            community_platform_id=request.GET.get("community_platform_id",
                                                  None),
        )
    try:
        params = {
            "external_id_list": request.GET.get("external_id_list"),
            "community": community,
            "platform_type": request.GET.get("platform_type", None),
            "community_platform_id": request.GET.get("community_platform_id",
                                                     None),
            "link_type": request.GET.get("link_type", None),
            "link_quality": request.GET.get("link_quality", None),
        }
        user_data = identity.filter_users_by_account(
            **identity.strip_null_values_from_dict(params))
        return JsonResponse(user_data, status=status.HTTP_200_OK, safe=False)
    except Exception as error:
        return JsonResponse(error, status=status.HTTP_400_BAD_REQUEST)
예제 #3
0
def create_id(request):
    data = JSONParser().parse(request)
    try:
        params = {
            "community": Community.objects.get(slug=data["community_slug"]),
            "count": data.get("count", None)
        }
        new_id = identity.create_id(
            **identity.strip_null_values_from_dict(params))
        return JsonResponse(new_id, status=status.HTTP_201_CREATED, safe=False)
    except Exception as error:
        return JsonResponse(error, status=status.HTTP_400_BAD_REQUEST)
예제 #4
0
def get_linked_account(request):
    try:
        params = {
            "external_id":
            request.GET.get("external_id"),
            "platform_type":
            request.GET.get("platform_type"),
            "community_platform_id":
            request.GET.get("community_platform_id", None),
        }
        user_data = identity.get_linked_account(
            **identity.strip_null_values_from_dict(params))
        return JsonResponse(user_data, status=status.HTTP_200_OK, safe=False)
    except Exception as error:
        return JsonResponse(error, status=status.HTTP_400_BAD_REQUEST)
예제 #5
0
    def add_linked_account(self,
                           *,
                           platform_identifier,
                           external_id=None,
                           custom_data=None,
                           link_type=None,
                           link_quality=None):
        """Given a platform identifier, creates or updates a linked account. Also creates a metagov
        id for the user if no external_id is passed in.
        """
        from metagov.core import identity

        optional_params = {
            "community_platform_id": self.community_platform_id,
            "custom_data": custom_data,
            "link_type": link_type,
            "link_quality": link_quality,
        }
        optional_params = identity.strip_null_values_from_dict(optional_params)

        try:
            # if linked account exists, update if new data is higher quality
            result = identity.retrieve_account(self.community, self.name,
                                               platform_identifier,
                                               self.community_platform_id)
            if link_quality and quality_is_greater(link_quality,
                                                   result.link_quality):
                result = identity.update_linked_account(
                    self.community, self.name, platform_identifier,
                    self.community_platform_id, **optional_params)

        except ValueError as error:
            # otherwise create linked account
            if not external_id:
                external_id = identity.create_id(self.community)[0]
            result = identity.link_account(external_id, self.community,
                                           self.name, platform_identifier,
                                           **optional_params)

        return result