From df7de3ad9a51b04a9126664cf1872e4214934b42 Mon Sep 17 00:00:00 2001 From: Carlos Quintana Date: Tue, 8 Oct 2024 16:05:53 +0200 Subject: [PATCH 1/2] feat(admin): show better info for alias mailboxes --- app/admin_model.py | 4 + templates/admin/email_search.html | 382 +++++++++++++++--------------- 2 files changed, 195 insertions(+), 191 deletions(-) diff --git a/app/admin_model.py b/app/admin_model.py index 7b53cd42d..65cd0bac8 100644 --- a/app/admin_model.py +++ b/app/admin_model.py @@ -785,6 +785,10 @@ def mailbox_list(user: User) -> list[Mailbox]: def mailbox_count(user: User) -> int: return Mailbox.filter_by(user_id=user.id).order_by(Mailbox.id.desc()).count() + @staticmethod + def alias_mailbox_count(alias: Alias) -> int: + return len(alias.mailboxes) + @staticmethod def alias_list(user: User) -> list[Alias]: return ( diff --git a/templates/admin/email_search.html b/templates/admin/email_search.html index 49eef26d6..bc88b00f8 100644 --- a/templates/admin/email_search.html +++ b/templates/admin/email_search.html @@ -1,220 +1,220 @@ {% extends 'admin/master.html' %} {% macro show_user(user) -%} -

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

- {% set pu = helper.partner_user(user) %} - - - - - - - - - - - - - - - - - - {% if user.disabled %} +

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

+ {% set pu = helper.partner_user(user) %} +
User IDEmailStatusPaidSubscriptionCreated AtUpdated AtConnected with Proton account
{{ user.id }}{{ user.email }}
+ + + + + + + + + + + + + + + + + {% if user.disabled %} - - {% else %} - - {% endif %} - - - - - {% if pu %} + + {% else %} + + {% endif %} + + + + + {% if pu %} - - {% else %} - - {% endif %} - - -
User IDEmailStatusPaidSubscriptionCreated AtUpdated AtConnected with Proton account
{{ user.id }}{{ user.email }}DisabledEnabled{{ "yes" if user.is_paid() else "No" }}{{ user.get_active_subscription() }}{{ user.created_at }}{{ user.updated_at }}DisabledEnabled{{ "yes" if user.is_paid() else "No" }}{{ user.get_active_subscription() }}{{ user.created_at }}{{ user.updated_at }}{{ pu.partner_email }}No
+ {{ pu.partner_email }} + {% else %} + No + {% endif %} + + + {%- endmacro %} -{% macro list_mailboxes(mbox_count, mboxes) %} -

- {{ mbox_count }} Mailboxes found. - {% if mbox_count>10 %}Showing only the last 10.{% endif %} -

- - - - - - - - - - - {% for mailbox in mboxes %} - +{% macro list_mailboxes(message, mbox_count, mboxes) %} +

+ {{ mbox_count }} {{ message }}. + {% if mbox_count>10 %}Showing only the last 10.{% endif %} +

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

- {{ alias_count }} Aliases found. - {% if alias_count>10 %}Showing only the last 10.{% endif %} -

- - - - - - - - - - - {% for alias in aliases %} +

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

+
- Alias ID - - Email - - Verified - - Created At -
+ - - - - + + + + - {% endfor %} - -
{{ alias.id }}{{alias.email}}{{ "Yes" if alias.verified else "No" }}{{ alias.created_at }} + Alias ID + + Email + + Verified + + Created At +
+ + + {% for alias in aliases %} + + {{ alias.id }} + {{ alias.email }} + {{ "Yes" if alias.verified else "No" }} + {{ alias.created_at }} + + {% endfor %} + + {% endmacro %} {% macro show_deleted_alias(deleted_alias) -%} -

Deleted Alias {{ deleted_alias.email }} with ID {{ deleted_alias.id }}.

- - - - - - - - - - - - - - - - - -
Deleted Alias IDEmailDeleted AtReason
{{ deleted_alias.id }}{{ deleted_alias.email }}{{ deleted_alias.created_at }}{{ deleted_alias.reason }}
+

Deleted Alias {{ deleted_alias.email }} with ID {{ deleted_alias.id }}.

+ + + + + + + + + + + + + + + + + +
Deleted Alias IDEmailDeleted AtReason
{{ deleted_alias.id }}{{ deleted_alias.email }}{{ deleted_alias.created_at }}{{ deleted_alias.reason }}
{%- endmacro %} {% macro show_domain_deleted_alias(dom_deleted_alias) -%} -

- Domain Deleted Alias {{ dom_deleted_alias.email }} with ID {{ dom_deleted_alias.id }} for domain {{ dom_deleted_alias.domain.domain }} -

- - - - - - - - - - - - - - - - - - - - - - -
Deleted Alias IDEmailDomainDomain IDDomain owner user IDDomain owner user emailDeleted At
{{ dom_deleted_alias.id }}{{ dom_deleted_alias.email }}{{ dom_deleted_alias.domain.domain }}{{ dom_deleted_alias.domain.id }}{{ dom_deleted_alias.domain.user_id }}{{ dom_deleted_alias.created_at }}
- {{ show_user(data.domain_deleted_alias.domain.user) }} +

+ Domain Deleted Alias {{ dom_deleted_alias.email }} with ID {{ dom_deleted_alias.id }} for + domain {{ dom_deleted_alias.domain.domain }} +

+ + + + + + + + + + + + + + + + + + + + + + +
Deleted Alias IDEmailDomainDomain IDDomain owner user IDDomain owner user emailDeleted At
{{ dom_deleted_alias.id }}{{ dom_deleted_alias.email }}{{ dom_deleted_alias.domain.domain }}{{ dom_deleted_alias.domain.id }}{{ dom_deleted_alias.domain.user_id }}{{ dom_deleted_alias.created_at }}
+ {{ show_user(data.domain_deleted_alias.domain.user) }} {%- endmacro %} {% block body %} -
-
-
- - -
- -
-
- {% if data.no_match and email %} - - - {% endif %} - {% if data.alias %} -
-

Found Alias {{ data.alias.email }}

- {{ list_alias(1,[data.alias]) }} - {{ show_user(data.alias.user) }} - {{ list_mailboxes(helper.mailbox_count(data.alias.user) , helper.mailbox_list(data.alias.user) ) }} +
+
+ + +
+ +
- {% endif %} - {% if data.user %} + {% if data.no_match and email %} + + {% endif %} -
-

Found User {{ data.user.email }}

- {{ show_user(data.user) }} - {{ list_mailboxes(helper.mailbox_count(data.user) , helper.mailbox_list(data.user) ) }} - {{ list_alias(helper.alias_count(data.user) ,helper.alias_list(data.user)) }} -
- {% endif %} + {% if data.alias %} +
+

Found Alias {{ data.alias.email }}

+ {{ list_alias(1,[data.alias]) }} + {{ list_mailboxes("Mailboxes for alias", helper.alias_mailbox_count(data.alias), data.alias.mailboxes) }} + {{ show_user(data.alias.user) }} +
+ {% endif %} + + {% if data.user %} +
+

Found User {{ data.user.email }}

+ {{ show_user(data.user) }} + {{ list_mailboxes("Mailboxes for user", helper.mailbox_count(data.user) , helper.mailbox_list(data.user) ) }} + {{ list_alias(helper.alias_count(data.user) ,helper.alias_list(data.user)) }} +
+ {% endif %} {% if data.mailbox_count > 10 %} -

Found more than 10 mailboxes for {{ email }}. Showing the last 10

+

Found more than 10 mailboxes for {{ email }}. Showing the last 10

{% elif data.mailbox_count > 0 %} -

Found {{ data.mailbox_count }} mailbox(es) for {{ email }}

+

Found {{ data.mailbox_count }} mailbox(es) for {{ email }}

{% endif %} - {% for mailbox in data.mailbox %} + {% for mailbox in data.mailbox %} -
-

Found Mailbox {{ mailbox.email }}

- {{ list_mailboxes(1, [mailbox]) }} - {{ show_user(mailbox.user) }} -
- {% endfor %} - {% if data.deleted_alias %} +
+

Found Mailbox {{ mailbox.email }}

+ {{ list_mailboxes("Mailbox found", 1, [mailbox]) }} + {{ show_user(mailbox.user) }} +
+ {% endfor %} + {% if data.deleted_alias %} -
-

Found DeletedAlias {{ data.deleted_alias.email }}

- {{ show_deleted_alias(data.deleted_alias) }} -
- {% endif %} - {% if data.domain_deleted_alias %} +
+

Found DeletedAlias {{ data.deleted_alias.email }}

+ {{ show_deleted_alias(data.deleted_alias) }} +
+ {% endif %} + {% if data.domain_deleted_alias %} -
-

Found DomainDeletedAlias {{ data.domain_deleted_alias.email }}

- {{ show_domain_deleted_alias(data.domain_deleted_alias) }} -
- {% endif %} +
+

Found DomainDeletedAlias {{ data.domain_deleted_alias.email }}

+ {{ show_domain_deleted_alias(data.domain_deleted_alias) }} +
+ {% endif %} {% endblock %} From e4734274b4a1bf25f52123d07b7cd19460364a0c Mon Sep 17 00:00:00 2001 From: Carlos Quintana Date: Tue, 8 Oct 2024 16:35:14 +0200 Subject: [PATCH 2/2] fix: limit the amount of alias mailboxes shown --- app/admin_model.py | 16 ++++++++++++++++ templates/admin/email_search.html | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/app/admin_model.py b/app/admin_model.py index 65cd0bac8..03830a391 100644 --- a/app/admin_model.py +++ b/app/admin_model.py @@ -34,6 +34,7 @@ DeletedAlias, DomainDeletedAlias, PartnerUser, + AliasMailbox, ) from app.newsletter_utils import send_newsletter_to_user, send_newsletter_to_address @@ -785,6 +786,21 @@ def mailbox_list(user: User) -> list[Mailbox]: def mailbox_count(user: User) -> int: return Mailbox.filter_by(user_id=user.id).order_by(Mailbox.id.desc()).count() + @staticmethod + def alias_mailboxes(alias: Alias) -> list[Mailbox]: + return ( + Session.query(Mailbox) + .filter(Mailbox.id == Alias.mailbox_id, Alias.id == alias.id) + .union( + Session.query(Mailbox) + .join(AliasMailbox, Mailbox.id == AliasMailbox.mailbox_id) + .filter(AliasMailbox.alias_id == alias.id) + ) + .order_by(Mailbox.id) + .limit(10) + .all() + ) + @staticmethod def alias_mailbox_count(alias: Alias) -> int: return len(alias.mailboxes) diff --git a/templates/admin/email_search.html b/templates/admin/email_search.html index bc88b00f8..291ec4ee6 100644 --- a/templates/admin/email_search.html +++ b/templates/admin/email_search.html @@ -177,7 +177,7 @@

Found Alias {{ data.alias.email }}

{{ list_alias(1,[data.alias]) }} - {{ list_mailboxes("Mailboxes for alias", helper.alias_mailbox_count(data.alias), data.alias.mailboxes) }} + {{ list_mailboxes("Mailboxes for alias", helper.alias_mailbox_count(data.alias), helper.alias_mailboxes(data.alias)) }} {{ show_user(data.alias.user) }}
{% endif %}