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)
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)
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)
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)
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