From f97b18e60a9588743a5fb31d2b61d27cb618dbe6 Mon Sep 17 00:00:00 2001 From: Son Nguyen Kim Date: Sun, 11 Jul 2021 12:28:23 +0200 Subject: [PATCH] fill up EmailLog.alias_id when creating new EmailLog --- email_handler.py | 13 +++++++++++-- server.py | 3 ++- tests/api/test_alias.py | 33 ++++++++++++++++++++++++++++----- tests/email/test_rate_limit.py | 24 ++++++++++++++++++++---- tests/test_email_utils.py | 15 +++++++++++++-- 5 files changed, 74 insertions(+), 14 deletions(-) diff --git a/email_handler.py b/email_handler.py index bd154b04..7f689327 100644 --- a/email_handler.py +++ b/email_handler.py @@ -519,7 +519,11 @@ def handle_forward(envelope, msg: Message, rcpt_to: str) -> List[Tuple[bool, str if not alias.enabled: LOG.d("%s is disabled, do not forward", alias) EmailLog.create( - contact_id=contact.id, user_id=contact.user_id, blocked=True, commit=True + contact_id=contact.id, + user_id=contact.user_id, + blocked=True, + alias_id=contact.alias_id, + commit=True, ) db.session.commit() # do not return 5** to allow user to receive emails later when alias is enabled @@ -601,7 +605,11 @@ def forward_email_to_mailbox( return False, status.E405 email_log = EmailLog.create( - contact_id=contact.id, user_id=user.id, mailbox_id=mailbox.id, commit=True + contact_id=contact.id, + user_id=user.id, + mailbox_id=mailbox.id, + alias_id=contact.alias_id, + commit=True, ) LOG.d("Create %s for %s, %s, %s", email_log, contact, user, mailbox) @@ -828,6 +836,7 @@ def handle_reply(envelope, msg: Message, rcpt_to: str) -> (bool, str): email_log = EmailLog.create( contact_id=contact.id, + alias_id=contact.alias_id, is_reply=True, user_id=contact.user_id, mailbox_id=mailbox.id, diff --git a/server.py b/server.py index 841a3f57..f41651f6 100644 --- a/server.py +++ b/server.py @@ -259,6 +259,7 @@ def fake_data(): EmailLog.create( user_id=user.id, contact_id=contact.id, + alias_id=contact.alias_id, refused_email_id=refused_email.id, bounced=True, commit=True, @@ -331,7 +332,7 @@ def fake_data(): # ) # db.session.commit() # for _ in range(3): - # EmailLog.create(user_id=user.id, contact_id=contact.id) + # EmailLog.create(user_id=user.id, contact_id=contact.id, alias_id=contact.alias_id) # db.session.commit() # have some disabled alias diff --git a/tests/api/test_alias.py b/tests/api/test_alias.py index 2349abf1..e736c02c 100644 --- a/tests/api/test_alias.py +++ b/tests/api/test_alias.py @@ -155,7 +155,11 @@ def test_get_aliases_v2(flask_client): reply_email="re0@SL", ) db.session.commit() - EmailLog.create(contact_id=c0.id, user_id=user.id) + EmailLog.create( + contact_id=c0.id, + user_id=user.id, + alias_id=contact.alias_id, + ) db.session.commit() # a1 has more recent activity @@ -166,7 +170,11 @@ def test_get_aliases_v2(flask_client): reply_email="re1@SL", ) db.session.commit() - EmailLog.create(contact_id=c1.id, user_id=user.id) + EmailLog.create( + contact_id=c1.id, + user_id=user.id, + alias_id=contact.alias_id, + ) db.session.commit() # get aliases v2 @@ -254,10 +262,20 @@ def test_alias_activities(flask_client): db.session.commit() for _ in range(int(PAGE_LIMIT / 2)): - EmailLog.create(contact_id=contact.id, is_reply=True, user_id=contact.user_id) + EmailLog.create( + contact_id=contact.id, + is_reply=True, + user_id=contact.user_id, + alias_id=contact.alias_id, + ) for _ in range(int(PAGE_LIMIT / 2) + 2): - EmailLog.create(contact_id=contact.id, blocked=True, user_id=contact.user_id) + EmailLog.create( + contact_id=contact.id, + blocked=True, + user_id=contact.user_id, + alias_id=contact.alias_id, + ) r = flask_client.get( url_for("api.get_alias_activities", alias_id=alias.id, page_id=0), @@ -469,7 +487,12 @@ def test_alias_contacts(flask_client): ) db.session.commit() - EmailLog.create(contact_id=contact.id, is_reply=True, user_id=contact.user_id) + EmailLog.create( + contact_id=contact.id, + is_reply=True, + user_id=contact.user_id, + alias_id=contact.alias_id, + ) db.session.commit() r = flask_client.get( diff --git a/tests/email/test_rate_limit.py b/tests/email/test_rate_limit.py index 34c58a0b..851c2d40 100644 --- a/tests/email/test_rate_limit.py +++ b/tests/email/test_rate_limit.py @@ -32,7 +32,11 @@ def test_rate_limited_forward_phase_for_alias(flask_client): ) db.session.commit() for _ in range(MAX_ACTIVITY_DURING_MINUTE_PER_ALIAS + 1): - EmailLog.create(user_id=user.id, contact_id=contact.id) + EmailLog.create( + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + ) db.session.commit() assert rate_limited_for_alias(alias) @@ -55,10 +59,18 @@ def test_rate_limited_forward_phase_for_mailbox(flask_client): ) db.session.commit() for _ in range(MAX_ACTIVITY_DURING_MINUTE_PER_MAILBOX + 1): - EmailLog.create(user_id=user.id, contact_id=contact.id) + EmailLog.create( + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + ) db.session.commit() - EmailLog.create(user_id=user.id, contact_id=contact.id) + EmailLog.create( + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + ) # Create another alias with the same mailbox # will be rate limited as there's a previous activity on mailbox @@ -92,7 +104,11 @@ def test_rate_limited_reply_phase(flask_client): ) db.session.commit() for _ in range(MAX_ACTIVITY_DURING_MINUTE_PER_ALIAS + 1): - EmailLog.create(user_id=user.id, contact_id=contact.id) + EmailLog.create( + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + ) db.session.commit() assert rate_limited_reply_phase("rep@sl.local") diff --git a/tests/test_email_utils.py b/tests/test_email_utils.py index 1cea140a..036ea7bd 100644 --- a/tests/test_email_utils.py +++ b/tests/test_email_utils.py @@ -616,7 +616,11 @@ def test_should_disable(flask_client): ) for _ in range(20): EmailLog.create( - user_id=user.id, contact_id=contact.id, commit=True, bounced=True + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + commit=True, + bounced=True, ) assert should_disable(alias) @@ -647,6 +651,7 @@ def test_should_disable_bounces_every_day(flask_client): EmailLog.create( user_id=user.id, contact_id=contact.id, + alias_id=contact.alias_id, commit=True, bounced=True, created_at=arrow.now().shift(days=-i), @@ -676,6 +681,7 @@ def test_should_disable_bounces_account(flask_client): EmailLog.create( user_id=user.id, contact_id=contact.id, + alias_id=contact.alias_id, commit=True, bounced=True, created_at=arrow.now().shift(days=-day), @@ -701,7 +707,11 @@ def test_should_disable_bounce_consecutive_days(flask_client): # create 6 bounce on this alias in the last 24h: alias is not disabled for _ in range(6): EmailLog.create( - user_id=user.id, contact_id=contact.id, commit=True, bounced=True + user_id=user.id, + contact_id=contact.id, + alias_id=contact.alias_id, + commit=True, + bounced=True, ) assert not should_disable(alias) @@ -710,6 +720,7 @@ def test_should_disable_bounce_consecutive_days(flask_client): EmailLog.create( user_id=user.id, contact_id=contact.id, + alias_id=contact.alias_id, commit=True, bounced=True, created_at=arrow.now().shift(days=-3),