diff --git a/app/app/alias_utils.py b/app/app/alias_utils.py index 7b1305b..3034ee8 100644 --- a/app/app/alias_utils.py +++ b/app/app/alias_utils.py @@ -57,6 +57,8 @@ def get_user_if_alias_would_auto_create( domain_and_rule = check_if_alias_can_be_auto_created_for_custom_domain( address, notify_user=notify_user ) + if DomainDeletedAlias.get_by(email=address): + return None if domain_and_rule: return domain_and_rule[0].user directory = check_if_alias_can_be_auto_created_for_a_directory( diff --git a/app/app/models.py b/app/app/models.py index 4b4d625..0c252f7 100644 --- a/app/app/models.py +++ b/app/app/models.py @@ -1016,6 +1016,10 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle): if not self.is_premium(): conditions.append(SLDomain.premium_only == False) # noqa: E712 partner_domain_cond = [] # noqa:E711 + if self.default_alias_public_domain_id is not None: + partner_domain_cond.append( + SLDomain.id == self.default_alias_public_domain_id + ) if alias_options.show_partner_domains is not None: partner_user = PartnerUser.filter_by( user_id=self.id, partner_id=alias_options.show_partner_domains.id diff --git a/app/tests/dashboard/test_custom_alias.py b/app/tests/dashboard/test_custom_alias.py index 306175c..636e609 100644 --- a/app/tests/dashboard/test_custom_alias.py +++ b/app/tests/dashboard/test_custom_alias.py @@ -316,6 +316,10 @@ def test_add_alias_in_global_trash(flask_client): def test_add_alias_in_custom_domain_trash(flask_client): user = login(flask_client) + for deleted_domain in DomainDeletedAlias.all(): + Session.delete(deleted_domain) + Session.flush() + domain = random_domain() custom_domain = CustomDomain.create( user_id=user.id, domain=domain, ownership_verified=True, commit=True diff --git a/app/tests/test_alias_utils.py b/app/tests/test_alias_utils.py index 9795d35..2499e5f 100644 --- a/app/tests/test_alias_utils.py +++ b/app/tests/test_alias_utils.py @@ -16,6 +16,7 @@ from app.models import ( Directory, DirectoryMailbox, User, + DomainDeletedAlias, ) from tests.utils import create_new_user, random_domain, random_token @@ -83,6 +84,11 @@ def get_auto_create_alias_tests(user: User) -> List: regex="ok-.*", flush=True, ) + deleted_alias = f"deletedalias@{catchall.domain}" + Session.add( + DomainDeletedAlias(email=deleted_alias, domain_id=catchall.id, user_id=user.id) + ) + Session.flush() dir_name = random_token() directory = Directory.create(name=dir_name, user_id=user.id, flush=True) DirectoryMailbox.create( @@ -101,6 +107,7 @@ def get_auto_create_alias_tests(user: User) -> List: (f"{dir_name}+something@{ALIAS_DOMAINS[0]}", True), (f"{dir_name}#something@{ALIAS_DOMAINS[0]}", True), (f"{dir_name}/something@{ALIAS_DOMAINS[0]}", True), + (deleted_alias, False), ] diff --git a/app/tests/test_domains.py b/app/tests/test_domains.py index 124b355..298363a 100644 --- a/app/tests/test_domains.py +++ b/app/tests/test_domains.py @@ -128,3 +128,74 @@ def test_get_premium_with_partner_domains(): assert [d.domain for d in domains] == user.available_sl_domains( alias_options=options ) + + +def test_get_partner_and_free_default_domain(): + user = create_new_user() + PartnerUser.create( + partner_id=get_proton_partner().id, + user_id=user.id, + external_user_id=random_token(10), + flush=True, + ) + user.default_alias_public_domain_id = ( + SLDomain.filter_by(partner_id=None, hidden=False).first().id + ) + Session.flush() + options = AliasOptions( + show_sl_domains=False, show_partner_domains=get_proton_partner() + ) + domains = user.get_sl_domains(alias_options=options) + assert len(domains) == 3 + assert domains[0].domain == "premium_partner" + assert domains[1].domain == "free_partner" + assert domains[2].domain == "free_non_partner" + assert [d.domain for d in domains] == user.available_sl_domains( + alias_options=options + ) + + +def test_get_free_partner_and_premium_default_domain(): + user = create_new_user() + user.trial_end = None + PartnerUser.create( + partner_id=get_proton_partner().id, + user_id=user.id, + external_user_id=random_token(10), + flush=True, + ) + user.default_alias_public_domain_id = ( + SLDomain.filter_by(partner_id=None, hidden=False, premium_only=True).first().id + ) + Session.flush() + options = AliasOptions( + show_sl_domains=False, show_partner_domains=get_proton_partner() + ) + domains = user.get_sl_domains(alias_options=options) + assert len(domains) == 1 + assert domains[0].domain == "free_partner" + assert [d.domain for d in domains] == user.available_sl_domains( + alias_options=options + ) + + +def test_get_free_partner_and_hidden_default_domain(): + user = create_new_user() + user.trial_end = None + PartnerUser.create( + partner_id=get_proton_partner().id, + user_id=user.id, + external_user_id=random_token(10), + flush=True, + ) + user.default_alias_public_domain_id = SLDomain.filter_by(hidden=True).first().id + Session.flush() + options = AliasOptions( + show_sl_domains=False, show_partner_domains=get_proton_partner() + ) + domains = user.get_sl_domains(alias_options=options) + assert len(domains) == 1 + assert domains[0].domain == "free_partner" + assert [d.domain for d in domains] == user.available_sl_domains( + alias_options=options + )