diff options
-rw-r--r-- | activities/views/search.py | 24 |
1 files 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) |