From a8988cb8f6c9c9b4a282b83f736261532fbeb6bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A0=20Casaj=C3=BAs?= Date: Thu, 8 Aug 2024 12:49:00 +0200 Subject: [PATCH] Limit email search to only 10 aliases to avoid timing out (#2183) --- app/admin_model.py | 29 ++- scripts/reset_local_db.sh | 4 +- scripts/reset_test_db.sh | 2 +- templates/admin/alias_search.html | 300 ------------------------------ templates/admin/email_search.html | 139 ++++++++++++++ 5 files changed, 169 insertions(+), 305 deletions(-) delete mode 100644 templates/admin/alias_search.html create mode 100644 templates/admin/email_search.html diff --git a/app/admin_model.py b/app/admin_model.py index 565e4b6b..e9336bc8 100644 --- a/app/admin_model.py +++ b/app/admin_model.py @@ -753,12 +753,37 @@ class EmailSearchAdmin(BaseView): if not alias and not user and not mailbox: no_match = True + def user_mailboxes(user_id: int) -> list[Mailbox]: + return ( + Mailbox.filter_by(user_id=user_id) + .order_by(Mailbox.id.asc()) + .limit(10) + .all() + ) + + def user_mailboxes_count(user_id: int) -> int: + return Mailbox.filter_by(user_id=user_id).order_by(Mailbox.id.asc()).count() + + def user_aliases(user_id: int) -> list[Alias]: + return ( + Alias.filter_by(user_id=user_id) + .order_by(Alias.id.asc()) + .limit(10) + .all() + ) + + def user_aliases_count(user_id: int) -> int: + return Alias.filter_by(user_id=user_id).count() + return self.render( - "admin/alias_search.html", + "admin/email_search.html", email=email, no_match=no_match, alias=alias, mailbox=mailbox, user=user, - user_aliases=lambda user_id: Alias.filter_by(user_id=user_id).all(), + user_aliases=user_aliases, + user_aliases_count=user_aliases_count, + user_mailboxes=user_mailboxes, + user_mailboxes_count=user_mailboxes_count, ) diff --git a/scripts/reset_local_db.sh b/scripts/reset_local_db.sh index 42dae950..422c2a8b 100755 --- a/scripts/reset_local_db.sh +++ b/scripts/reset_local_db.sh @@ -3,5 +3,5 @@ export DB_URI=postgresql://myuser:mypassword@localhost:15432/simplelogin echo 'drop schema public cascade; create schema public;' | psql $DB_URI -rye run alembic upgrade head -rye run flask dummy-data +poetry run alembic upgrade head +poetry run flask dummy-data diff --git a/scripts/reset_test_db.sh b/scripts/reset_test_db.sh index 234cef36..25466010 100755 --- a/scripts/reset_test_db.sh +++ b/scripts/reset_test_db.sh @@ -3,4 +3,4 @@ export DB_URI=postgresql://myuser:mypassword@localhost:15432/test echo 'drop schema public cascade; create schema public;' | psql $DB_URI -rye run alembic upgrade head +poetry run alembic upgrade head diff --git a/templates/admin/alias_search.html b/templates/admin/alias_search.html deleted file mode 100644 index 159d7331..00000000 --- a/templates/admin/alias_search.html +++ /dev/null @@ -1,300 +0,0 @@ -{% extends 'admin/master.html' %} - -{% block body %} - -
-
-
- - -
- -
-
- {% if no_match %} - - - {% endif %} - {% if alias %} - -
-

Alias {{ alias.email }} found

-
-
- Alias id -
-
- {{ alias.id }} -
-
- Email -
-
- {{ alias.email }} -
-
- Created at -
-
- {{ alias.created_at }} -
-
- User -
-
-
-
- User id -
-
- {{ alias.user.id }} -
-
- Email -
-
- {{ alias.user.email }} -
-
- Premium -
-
- {{ alias.user.is_premium() }} -
-
- Disabled -
-
- {{ alias.user.disabled }} -
-
- Crated At -
-
- {{ alias.user.created_at }} -
-
- Mailboxes -
-
- {% for mailbox in alias.mailboxes %} - -
-
- Mailbox id -
-
- {{ mailbox.id }} -
-
- Email -
-
- {{ mailbox.email }} -
-
- Verified -
-
- {{ mailbox.verified }} -
-
- Created At -
-
- {{ mailbox.created_at }} -
-
- {% endfor %} -
-
-
-
-
- {% endif %} - {% if user %} - -
-

User {{ user.email }} found

-
-
- User id -
-
- {{ user.id }} -
-
- Email -
-
- {{ user.email }} -
- {% if user.is_paid() %} - -
- Paid -
-
- Yes -
-
- Subscription -
-
- {{ user.get_active_subscription() }} -
- {% else %} -
- Paid -
-
- No -
- {% endif %} -
- Created at -
-
- {{ user.created_at }} -
-
- Mailboxes -
-
- {% for mailbox in user.mailboxes() %} - -
-
- Mailbox id -
-
- {{ mailbox.id }} -
-
- Email -
-
- {{ mailbox.email }} -
-
- Verified -
-
- {{ mailbox.verified }} -
-
- Created At -
-
- {{ mailbox.created_at }} -
-
- {% endfor %} -
-
- Aliases -
-
- {% for mailbox in user_aliases(user.id) %} - -
-
- Mailbox id -
-
- {{ mailbox.id }} -
-
- Email -
-
- {{ mailbox.email }} -
-
- Verified -
-
- {{ mailbox.verified }} -
-
- Created At -
-
- {{ mailbox.created_at }} -
-
- {% endfor %} -
-
-
- {% endif %} - {% if mailbox %} - -
-

Mailbox {{ mailbox.email }} found

-
-
- Mailbox id -
-
- {{ mailbox.id }} -
-
- Email -
-
- {{ mailbox.email }} -
-
- Created at -
-
- {{ mailbox.created_at }} -
-
- User -
-
-
-
- User id -
-
- {{ mailbox.user.id }} -
-
- Email -
-
- {{ mailbox.user.email }} -
-
- Premium -
-
- {{ mailbox.user.is_premium() }} -
-
- Disabled -
-
- {{ mailbox.user.disabled }} -
-
- Crated At -
-
- {{ mailbox.user.created_at }} -
-
-
-
-
- {% endif %} -{% endblock %} diff --git a/templates/admin/email_search.html b/templates/admin/email_search.html new file mode 100644 index 00000000..97a77955 --- /dev/null +++ b/templates/admin/email_search.html @@ -0,0 +1,139 @@ +{% extends 'admin/master.html' %} + +{% macro show_user(user) -%} +

User {{ user.email }} with ID {{ user.id }}.

+ + + + + + + + + + + + + + + + + + + +
User IDEmailPaidSubscriptionCreated At
{{ user.id }}{{ user.email }}{{ "yes" if user.is_paid() else No }}{{ user.get_active_subscription() }}{{ user.created_at }}
+{%- endmacro %} +{% macro list_mailboxes(mbox_count, mboxes) %} +

+ {{ mbox_count }} Mailboxes found. + {% if mbox_count>10 %}Showing only the first 10.{% endif %} +

+ + + + + + + + + + + {% for mailbox in mboxes %} + + + + + + + + {% endfor %} + +
Mailbox IDEmailVerifiedCreated At
{{ mailbox.id }}{{ mailbox.email }}{{ "Yes" if mailbox.verified else "No" }}{{ mailbox.created_at }}
+{% endmacro %} +{% macro list_alias(alias_count, aliases) %} +

+ {{ alias_count }} Aliases found. + {% if alias_count>10 %}Showing only the first 10.{% endif %} +

+ + + + + + + + + + + {% for alias in aliases %} + + + + + + + + {% endfor %} + +
Alias IDEmailVerifiedCreated At
{{ alias.id }}{{ alias.email }}{{ "Yes" if alias.verified else "No" }} + {{ alias.created_at }} +
+{% endmacro %} +{% block body %} + +
+
+
+ + +
+ +
+
+ {% if no_match %} + + + {% endif %} + {% if alias %} + +
+

+ Found Alias {{ alias.email }} +

+ {{ list_alias(1,[alias]) }} + {{ show_user(alias.user) }} + {{ list_mailboxes(user_mailboxes_count(alias.user.id), user_mailboxes(alias.user.id) ) }} +
+ {% endif %} + {% if user %} + +
+

+ Found User {{ user.email }} +

+ {{ show_user(user) }} + {{ list_mailboxes(user_mailboxes_count(user.id), user_mailboxes(user.id) ) }} + {{ list_alias(user_aliases_count(user.id),user_aliases(user.id)) }} +
+ {% endif %} + {% if mailbox %} + +
+

+ Found Mailbox {{ mailbox.email }} +

+ {{ list_mailboxes(1, [mailbox] ) }} + {{ show_user(mailbox.user) }} +
+ {% endif %} +{% endblock %}