display whether a domain is premium
This commit is contained in:
parent
03521b5a84
commit
8482a55df6
|
@ -43,12 +43,22 @@
|
||||||
|
|
||||||
<div class="col-sm-6 p-1">
|
<div class="col-sm-6 p-1">
|
||||||
<select class="form-control" name="suffix">
|
<select class="form-control" name="suffix">
|
||||||
{% for suffix in suffixes %}
|
{% for suffix_info in suffixes %}
|
||||||
<option value="{{ suffix[2] }}">
|
<option value="{{ suffix_info.signed_suffix }}"
|
||||||
{% if suffix[0] %}
|
{% if suffix_info.is_premium %}
|
||||||
{{ suffix[1] }} (your domain)
|
title="Only available to Premium accounts"
|
||||||
|
{% elif not suffix_info.is_custom and at_least_a_premium_domain %}
|
||||||
|
title="Available to all accounts"
|
||||||
|
{% endif %}
|
||||||
|
>
|
||||||
|
{% if suffix_info.is_custom %}
|
||||||
|
{{ suffix_info.suffix }} (your domain)
|
||||||
{% else %}
|
{% else %}
|
||||||
{{ suffix[1] }}
|
{% if suffix_info.is_premium %}
|
||||||
|
{{ suffix_info.suffix }} (Premium domain)
|
||||||
|
{% else %}
|
||||||
|
{{ suffix_info.suffix }} (Public domain)
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</option>
|
</option>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
|
||||||
from flask import render_template, redirect, url_for, flash, request
|
from flask import render_template, redirect, url_for, flash, request
|
||||||
from flask_login import login_required, current_user
|
from flask_login import login_required, current_user
|
||||||
from itsdangerous import TimestampSigner, SignatureExpired
|
from itsdangerous import TimestampSigner, SignatureExpired
|
||||||
|
@ -47,6 +49,50 @@ def available_suffixes(user: User) -> [bool, str, str]:
|
||||||
return suffixes
|
return suffixes
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class SuffixInfo:
|
||||||
|
is_custom: bool
|
||||||
|
suffix: str
|
||||||
|
signed_suffix: str
|
||||||
|
is_premium: bool
|
||||||
|
|
||||||
|
|
||||||
|
def available_suffixes_more_info(user: User) -> [SuffixInfo]:
|
||||||
|
"""
|
||||||
|
Similar to as available_suffixes() but also return whether the suffix comes from a premium domain
|
||||||
|
Note that is-premium-domain is only relevant for SL domain
|
||||||
|
"""
|
||||||
|
user_custom_domains = user.verified_custom_domains()
|
||||||
|
|
||||||
|
suffixes: [SuffixInfo] = []
|
||||||
|
|
||||||
|
# put custom domain first
|
||||||
|
# for each user domain, generate both the domain and a random suffix version
|
||||||
|
for alias_domain in user_custom_domains:
|
||||||
|
suffix = "@" + alias_domain.domain
|
||||||
|
suffixes.append(SuffixInfo(True, suffix, signer.sign(suffix).decode(), False))
|
||||||
|
if alias_domain.random_prefix_generation:
|
||||||
|
suffix = "." + random_word() + "@" + alias_domain.domain
|
||||||
|
suffixes.append(
|
||||||
|
SuffixInfo(True, suffix, signer.sign(suffix).decode(), False)
|
||||||
|
)
|
||||||
|
|
||||||
|
# then SimpleLogin domain
|
||||||
|
for sl_domain in user.get_sl_domains():
|
||||||
|
suffix = (
|
||||||
|
("" if DISABLE_ALIAS_SUFFIX else "." + random_word())
|
||||||
|
+ "@"
|
||||||
|
+ sl_domain.domain
|
||||||
|
)
|
||||||
|
suffixes.append(
|
||||||
|
SuffixInfo(
|
||||||
|
False, suffix, signer.sign(suffix).decode(), sl_domain.premium_only
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return suffixes
|
||||||
|
|
||||||
|
|
||||||
@dashboard_bp.route("/custom_alias", methods=["GET", "POST"])
|
@dashboard_bp.route("/custom_alias", methods=["GET", "POST"])
|
||||||
@login_required
|
@login_required
|
||||||
def custom_alias():
|
def custom_alias():
|
||||||
|
@ -60,8 +106,12 @@ def custom_alias():
|
||||||
return redirect(url_for("dashboard.index"))
|
return redirect(url_for("dashboard.index"))
|
||||||
|
|
||||||
user_custom_domains = [cd.domain for cd in current_user.verified_custom_domains()]
|
user_custom_domains = [cd.domain for cd in current_user.verified_custom_domains()]
|
||||||
# List of (is_custom_domain, alias-suffix, time-signed alias-suffix)
|
suffixes = available_suffixes_more_info(current_user)
|
||||||
suffixes = available_suffixes(current_user)
|
at_least_a_premium_domain = False
|
||||||
|
for suffix in suffixes:
|
||||||
|
if not suffix.is_custom and suffix.is_premium:
|
||||||
|
at_least_a_premium_domain = True
|
||||||
|
break
|
||||||
|
|
||||||
mailboxes = current_user.mailboxes()
|
mailboxes = current_user.mailboxes()
|
||||||
|
|
||||||
|
@ -180,6 +230,7 @@ def custom_alias():
|
||||||
"dashboard/custom_alias.html",
|
"dashboard/custom_alias.html",
|
||||||
user_custom_domains=user_custom_domains,
|
user_custom_domains=user_custom_domains,
|
||||||
suffixes=suffixes,
|
suffixes=suffixes,
|
||||||
|
at_least_a_premium_domain=at_least_a_premium_domain,
|
||||||
mailboxes=mailboxes,
|
mailboxes=mailboxes,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -560,14 +560,15 @@ class User(db.Model, ModelMixin, UserMixin):
|
||||||
- SimpleLogin public domains, available for all users (ALIAS_DOMAIN)
|
- SimpleLogin public domains, available for all users (ALIAS_DOMAIN)
|
||||||
- SimpleLogin premium domains, only available for Premium accounts (PREMIUM_ALIAS_DOMAIN)
|
- SimpleLogin premium domains, only available for Premium accounts (PREMIUM_ALIAS_DOMAIN)
|
||||||
"""
|
"""
|
||||||
|
return [sl_domain.domain for sl_domain in self.get_sl_domains()]
|
||||||
|
|
||||||
|
def get_sl_domains(self) -> ["SLDomain"]:
|
||||||
if self.is_premium():
|
if self.is_premium():
|
||||||
query = SLDomain.query.all()
|
query = SLDomain.query
|
||||||
else:
|
else:
|
||||||
query = SLDomain.filter_by(premium_only=False)
|
query = SLDomain.filter_by(premium_only=False)
|
||||||
|
|
||||||
domains = [sl_domain.domain for sl_domain in query]
|
return query.all()
|
||||||
|
|
||||||
return domains
|
|
||||||
|
|
||||||
def available_alias_domains(self) -> [str]:
|
def available_alias_domains(self) -> [str]:
|
||||||
"""return all domains that user can use when creating a new alias, including:
|
"""return all domains that user can use when creating a new alias, including:
|
||||||
|
|
Loading…
Reference in a new issue