From 26d043700942ec1d936ca32b4ddd15cde8f7512d Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Fri, 9 Oct 2020 22:54:13 +0200 Subject: [PATCH] Make prefix generation configurable per domain --- .../dashboard/domain_detail/info.html | 30 +++++++++++++++++-- app/dashboard/views/custom_alias.py | 8 +++-- app/dashboard/views/domain_detail.py | 17 +++++++++++ app/models.py | 3 ++ .../versions/2020_100922_a90e423c6763_.py | 29 ++++++++++++++++++ 5 files changed, 82 insertions(+), 5 deletions(-) create mode 100644 migrations/versions/2020_100922_a90e423c6763_.py diff --git a/app/dashboard/templates/dashboard/domain_detail/info.html b/app/dashboard/templates/dashboard/domain_detail/info.html index 6274e85f..f279e91e 100644 --- a/app/dashboard/templates/dashboard/domain_detail/info.html +++ b/app/dashboard/templates/dashboard/domain_detail/info.html @@ -57,7 +57,7 @@
-
Default Alias name
+
Default Alias Name
This name will be used as the default alias name when you send or reply from an alias, unless overwritten by the alias specific name. @@ -76,6 +76,32 @@
+
+
Random Prefix Generation
+
+ A random prefix can be generated for this domain for usage in the New Alias + feature. +
+ +
+
+ + +
+
+

Delete Domain

Please note that this operation is irreversible. @@ -119,4 +145,4 @@ }) }); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/app/dashboard/views/custom_alias.py b/app/dashboard/views/custom_alias.py index 0d82cc25..a6cb8ef7 100644 --- a/app/dashboard/views/custom_alias.py +++ b/app/dashboard/views/custom_alias.py @@ -26,7 +26,7 @@ signer = TimestampSigner(CUSTOM_ALIAS_SECRET) def available_suffixes(user: User) -> [bool, str, str]: """Return (is_custom_domain, alias-suffix, time-signed alias-suffix)""" - user_custom_domains = [cd.domain for cd in user.verified_custom_domains()] + user_custom_domains = user.verified_custom_domains() # List of (is_custom_domain, alias-suffix, time-signed alias-suffix) suffixes = [] @@ -34,8 +34,10 @@ def available_suffixes(user: User) -> [bool, str, str]: # put custom domain first # for each user domain, generate both the domain and a random suffix version for alias_domain in user_custom_domains: - domain_suffixes = ["@" + alias_domain, "." + random_word() + "@" + alias_domain] - for suffix in domain_suffixes: + suffix = "@" + alias_domain.domain + suffixes.append((True, suffix, signer.sign(suffix).decode())) + if alias_domain.random_prefix_generation: + suffix = "." + random_word() + "@" + alias_domain.domain suffixes.append((True, suffix, signer.sign(suffix).decode())) # then default domain diff --git a/app/dashboard/views/domain_detail.py b/app/dashboard/views/domain_detail.py index 4d539175..f1327650 100644 --- a/app/dashboard/views/domain_detail.py +++ b/app/dashboard/views/domain_detail.py @@ -160,6 +160,23 @@ def domain_detail(custom_domain_id): return redirect( url_for("dashboard.domain_detail", custom_domain_id=custom_domain.id) ) + elif request.form.get("form-name") == "switch-random-prefix-generation": + custom_domain.random_prefix_generation = not custom_domain.random_prefix_generation + db.session.commit() + + if custom_domain.random_prefix_generation: + flash( + f"Random prefix generation has been enabled for {custom_domain.domain}", + "success", + ) + else: + flash( + f"Random prefix generation has been disabled for {custom_domain.domain}", + "warning", + ) + return redirect( + url_for("dashboard.domain_detail", custom_domain_id=custom_domain.id) + ) elif request.form.get("form-name") == "delete": name = custom_domain.domain CustomDomain.delete(custom_domain_id) diff --git a/app/models.py b/app/models.py index bbddd73d..242cea88 100644 --- a/app/models.py +++ b/app/models.py @@ -1449,6 +1449,9 @@ class CustomDomain(db.Model, ModelMixin): # an alias is created automatically the first time it receives an email catch_all = db.Column(db.Boolean, nullable=False, default=False, server_default="0") + # option to generate random prefix version automatically + random_prefix_generation = db.Column(db.Boolean, nullable=False, default=False, server_default="0") + user = db.relationship(User, foreign_keys=[user_id]) @property diff --git a/migrations/versions/2020_100922_a90e423c6763_.py b/migrations/versions/2020_100922_a90e423c6763_.py new file mode 100644 index 00000000..1014020c --- /dev/null +++ b/migrations/versions/2020_100922_a90e423c6763_.py @@ -0,0 +1,29 @@ +"""empty message + +Revision ID: a90e423c6763 +Revises: 1abfc9e14d7e +Create Date: 2020-10-09 22:35:11.359186 + +""" +import sqlalchemy_utils +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'a90e423c6763' +down_revision = '1abfc9e14d7e' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('custom_domain', sa.Column('random_prefix_generation', sa.Boolean(), server_default='0', nullable=False)) + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('custom_domain', 'random_prefix_generation') + # ### end Alembic commands ###