From 376818b918f39d968ea2ef373a34c590366b36cb Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Tue, 27 Sep 2022 12:54:55 +0200 Subject: [PATCH 1/3] manager: search journal by uuid of deleted accounts (#69591) Search by a queryset of DeletedUser is extracted from search_by_email() to be shared with search_by_uuid(). --- src/authentic2/manager/journal_views.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/authentic2/manager/journal_views.py b/src/authentic2/manager/journal_views.py index ed87f237..55baae52 100644 --- a/src/authentic2/manager/journal_views.py +++ b/src/authentic2/manager/journal_views.py @@ -47,8 +47,14 @@ class JournalSearchEngine(BaseJournalSearchEngine): user_uuid = uuid.UUID(lexem) except ValueError: yield self.q_false - else: + return + # check if uuid exists to go on the fast path + # searching in DeletedUser is expensive + if User.objects.filter(user__uuid=user_uuid.hex).exists(): yield Q(user__uuid=user_uuid.hex) + else: + deleted_user_qs = DeletedUser.objects.filter(old_uuid=user_uuid.hex) + yield from self._search_by_deleted_user(deleted_user_qs) @classmethod def search_by_uuid_documentation(cls): @@ -78,14 +84,18 @@ class JournalSearchEngine(BaseJournalSearchEngine): users = User.objects.find_duplicates(fullname=fullname, threshold=app_settings.A2_FTS_THRESHOLD) return self.query_for_users(users) - def search_by_email(self, email): - yield from super().search_by_email(email) - pks = list(DeletedUser.objects.filter(old_email=email).values_list('old_user_id', flat=True)) + def _search_by_deleted_user(self, deleted_user_qs): + pks = list(qs.values_list('old_user_id', flat=True)) if pks: yield Q(user_id__in=pks) user_ct = ContentType.objects.get_for_model(User) yield Q(reference_ids__contains=[n_2_pairing(user_ct.id, pk) for pk in pks]) + def search_by_email(self, email): + yield from super().search_by_email(email) + deleted_user_qs = DeletedUser.objects.filter(old_email=email) + yield from self._search_by_deleted_user(deleted_user_qs) + @classmethod def search_by_event_documentation(cls): return '%s %s' % ( -- 2.37.2