From 96f863d5d8ffa2a326a889eb6b0f8c4c11efb200 Mon Sep 17 00:00:00 2001 From: Michael Manfre Date: Tue, 22 Nov 2022 23:07:22 -0500 Subject: [PATCH] Allow authenticated users to remote search/fetch by exact identity --- activities/views/search.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/activities/views/search.py b/activities/views/search.py index cf62410..b175052 100644 --- a/activities/views/search.py +++ b/activities/views/search.py @@ -1,7 +1,7 @@ from django import forms from django.views.generic import FormView -from users.models import Identity +from users.models import Domain, Identity class Search(FormView): @@ -15,12 +15,28 @@ class Search(FormView): query = form.cleaned_data["query"].lstrip("@").lower() results = {"identities": set()} # Search identities + if "@" in query: username, domain = query.split("@", 1) - for identity in Identity.objects.filter( - domain_id=domain, username=username - )[:20]: + + # Resolve the domain to the display domain + domain_instance = Domain.get_domain(domain) + try: + if domain_instance is None: + raise Identity.DoesNotExist() + identity = Identity.objects.get( + domain=domain_instance, username=username + ) + except Identity.DoesNotExist: + if self.request.identity is not None: + # Allow authenticated users to fetch remote + identity = Identity.by_username_and_domain( + username, domain, fetch=True + ) + identity = None + if identity: results["identities"].add(identity) + else: for identity in Identity.objects.filter(username=query)[:20]: results["identities"].add(identity)