mirror of
https://github.com/simple-login/app.git
synced 2024-09-27 20:31:30 +02:00
add filter by mailbox
This commit is contained in:
parent
00b3d716b7
commit
51578ce934
@ -129,7 +129,7 @@ def get_alias_infos_with_pagination(user, page_id=0, query=None) -> [AliasInfo]:
|
|||||||
|
|
||||||
|
|
||||||
def get_alias_infos_with_pagination_v3(
|
def get_alias_infos_with_pagination_v3(
|
||||||
user, page_id=0, query=None, sort=None, alias_filter=None
|
user, page_id=0, query=None, sort=None, alias_filter=None, mailbox_id=None
|
||||||
) -> [AliasInfo]:
|
) -> [AliasInfo]:
|
||||||
# subquery on alias annotated with nb_reply, nb_blocked, nb_forward, max_created_at, latest_email_log_created_at
|
# subquery on alias annotated with nb_reply, nb_blocked, nb_forward, max_created_at, latest_email_log_created_at
|
||||||
alias_activity_subquery = (
|
alias_activity_subquery = (
|
||||||
@ -214,29 +214,24 @@ def get_alias_infos_with_pagination_v3(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if query:
|
if query:
|
||||||
q = (
|
q = q.filter(
|
||||||
# to find mailbox whose email match the query
|
or_(
|
||||||
q.join(AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True)
|
Alias.email.ilike(f"%{query}%"),
|
||||||
.join(
|
Alias.note.ilike(f"%{query}%"),
|
||||||
Mailbox,
|
# can't use match() here as it uses to_tsquery that expected a tsquery input
|
||||||
or_(
|
# Alias.ts_vector.match(query),
|
||||||
Mailbox.id == Alias.mailbox_id,
|
Alias.ts_vector.op("@@")(func.plainto_tsquery("english", query)),
|
||||||
Mailbox.id == AliasMailbox.mailbox_id,
|
Alias.name.ilike(f"%{query}%"),
|
||||||
),
|
|
||||||
)
|
|
||||||
.filter(
|
|
||||||
or_(
|
|
||||||
Alias.email.ilike(f"%{query}%"),
|
|
||||||
Alias.note.ilike(f"%{query}%"),
|
|
||||||
# can't use match() here as it uses to_tsquery that expected a tsquery input
|
|
||||||
# Alias.ts_vector.match(query),
|
|
||||||
Alias.ts_vector.op("@@")(func.plainto_tsquery("english", query)),
|
|
||||||
Alias.name.ilike(f"%{query}%"),
|
|
||||||
Mailbox.email.ilike(f"%{query}%"),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if mailbox_id:
|
||||||
|
q = q.join(
|
||||||
|
AliasMailbox, Alias.id == AliasMailbox.alias_id, isouter=True
|
||||||
|
).filter(
|
||||||
|
or_(Alias.mailbox_id == mailbox_id, AliasMailbox.mailbox_id == mailbox_id)
|
||||||
|
)
|
||||||
|
|
||||||
if alias_filter == "enabled":
|
if alias_filter == "enabled":
|
||||||
q = q.filter(Alias.enabled)
|
q = q.filter(Alias.enabled)
|
||||||
elif alias_filter == "disabled":
|
elif alias_filter == "disabled":
|
||||||
|
@ -177,6 +177,12 @@
|
|||||||
<option value="hibp" {% if filter == "hibp" %} selected {% endif %}>
|
<option value="hibp" {% if filter == "hibp" %} selected {% endif %}>
|
||||||
Only Aliases Found In Data Breaches
|
Only Aliases Found In Data Breaches
|
||||||
</option>
|
</option>
|
||||||
|
{% for mailbox in current_user.mailboxes() %}
|
||||||
|
<option value="mailbox:{{ mailbox.id }}" {% if filter == "mailbox:" ~ mailbox.id %}
|
||||||
|
selected {% endif %}>
|
||||||
|
{{ mailbox.email }}'s aliases
|
||||||
|
</option>
|
||||||
|
{% endfor %}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<input type="search" name="query" placeholder="Enter to search for alias"
|
<input type="search" name="query" placeholder="Enter to search for alias"
|
||||||
|
@ -150,8 +150,12 @@ def index():
|
|||||||
|
|
||||||
stats = get_stats(current_user)
|
stats = get_stats(current_user)
|
||||||
|
|
||||||
|
mailbox_id = None
|
||||||
|
if alias_filter and alias_filter.startswith("mailbox:"):
|
||||||
|
mailbox_id = int(alias_filter[len("mailbox:") :])
|
||||||
|
|
||||||
alias_infos = get_alias_infos_with_pagination_v3(
|
alias_infos = get_alias_infos_with_pagination_v3(
|
||||||
current_user, page, query, sort, alias_filter
|
current_user, page, query, sort, alias_filter, mailbox_id
|
||||||
)
|
)
|
||||||
last_page = len(alias_infos) < PAGE_LIMIT
|
last_page = len(alias_infos) < PAGE_LIMIT
|
||||||
|
|
||||||
|
@ -1137,9 +1137,12 @@ class Alias(db.Model, ModelMixin):
|
|||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
Index("ix_video___ts_vector__", ts_vector, postgresql_using="gin"),
|
Index("ix_video___ts_vector__", ts_vector, postgresql_using="gin"),
|
||||||
# index on note column using pg_trgm
|
# index on note column using pg_trgm
|
||||||
Index('note_pg_trgm_index', "note",
|
Index(
|
||||||
postgresql_ops={"note": "gin_trgm_ops"},
|
"note_pg_trgm_index",
|
||||||
postgresql_using='gin'),
|
"note",
|
||||||
|
postgresql_ops={"note": "gin_trgm_ops"},
|
||||||
|
postgresql_using="gin",
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
user = db.relationship(User, foreign_keys=[user_id])
|
user = db.relationship(User, foreign_keys=[user_id])
|
||||||
|
@ -59,7 +59,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailbox(flask_client):
|
|||||||
commit=True,
|
commit=True,
|
||||||
)
|
)
|
||||||
alias = Alias.first()
|
alias = Alias.first()
|
||||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.mailbox.email)
|
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=alias.mailbox_id)
|
||||||
assert len(alias_infos) == 1
|
assert len(alias_infos) == 1
|
||||||
|
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ def test_get_alias_infos_with_pagination_v3_query_alias_mailboxes(flask_client):
|
|||||||
alias._mailboxes.append(mb)
|
alias._mailboxes.append(mb)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=mb.email)
|
alias_infos = get_alias_infos_with_pagination_v3(user, mailbox_id=mb.id)
|
||||||
assert len(alias_infos) == 1
|
assert len(alias_infos) == 1
|
||||||
|
|
||||||
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.email)
|
alias_infos = get_alias_infos_with_pagination_v3(user, query=alias.email)
|
||||||
|
Loading…
Reference in New Issue
Block a user