4.23.0
This commit is contained in:
parent
822855d584
commit
8ee4f9462e
@ -357,6 +357,7 @@ ALERT_COMPLAINT_TRANSACTIONAL_PHASE = "alert_complaint_transactional_phase"
|
||||
ALERT_QUARANTINE_DMARC = "alert_quarantine_dmarc"
|
||||
|
||||
ALERT_DUAL_SUBSCRIPTION_WITH_PARTNER = "alert_dual_sub_with_partner"
|
||||
ALERT_WARN_MULTIPLE_SUBSCRIPTIONS = "alert_multiple_subscription"
|
||||
|
||||
# <<<<< END ALERT EMAIL >>>>
|
||||
|
||||
|
@ -215,6 +215,12 @@ def alias_transfer_receive_route():
|
||||
token,
|
||||
)
|
||||
transfer(alias, current_user, mailboxes)
|
||||
|
||||
# reset transfer token
|
||||
alias.transfer_token = None
|
||||
alias.transfer_token_expiration = None
|
||||
Session.commit()
|
||||
|
||||
flash(f"You are now owner of {alias.email}", "success")
|
||||
return redirect(url_for("dashboard.index", highlight_alias_id=alias.id))
|
||||
|
||||
|
@ -120,18 +120,11 @@ def custom_alias():
|
||||
email=full_alias
|
||||
)
|
||||
custom_domain = domain_deleted_alias.domain
|
||||
if domain_deleted_alias.user_id == current_user.id:
|
||||
flash(
|
||||
f"You have deleted this alias before. You can restore it on "
|
||||
f"{custom_domain.domain} 'Deleted Alias' page",
|
||||
"error",
|
||||
)
|
||||
else:
|
||||
# should never happen as user can only choose their domains
|
||||
LOG.e(
|
||||
"Deleted Alias %s does not belong to user %s",
|
||||
domain_deleted_alias,
|
||||
)
|
||||
flash(
|
||||
f"You have deleted this alias before. You can restore it on "
|
||||
f"{custom_domain.domain} 'Deleted Alias' page",
|
||||
"error",
|
||||
)
|
||||
|
||||
elif DeletedAlias.get_by(email=full_alias):
|
||||
flash(general_error_msg, "error")
|
||||
|
@ -80,8 +80,9 @@ def pricing():
|
||||
@dashboard_bp.route("/subscription_success")
|
||||
@login_required
|
||||
def subscription_success():
|
||||
flash("Thanks so much for supporting SimpleLogin!", "success")
|
||||
return redirect(url_for("dashboard.index"))
|
||||
return render_template(
|
||||
"dashboard/thank-you.html",
|
||||
)
|
||||
|
||||
|
||||
@dashboard_bp.route("/coinbase_checkout")
|
||||
|
@ -170,7 +170,8 @@ class MailSender:
|
||||
LOG.e(
|
||||
f"Could not send message to smtp server {config.POSTFIX_SERVER}:{config.POSTFIX_PORT}"
|
||||
)
|
||||
self._save_request_to_unsent_dir(send_request)
|
||||
if config.SAVE_UNSENT_DIR:
|
||||
self._save_request_to_unsent_dir(send_request)
|
||||
return False
|
||||
|
||||
def _save_request_to_unsent_dir(
|
||||
|
@ -44,7 +44,6 @@ from app.utils import (
|
||||
random_string,
|
||||
random_words,
|
||||
sanitize_email,
|
||||
random_word,
|
||||
)
|
||||
|
||||
Base = declarative_base()
|
||||
@ -519,7 +518,7 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle):
|
||||
# Keep original unsub behaviour
|
||||
unsub_behaviour = sa.Column(
|
||||
IntEnumType(UnsubscribeBehaviourEnum),
|
||||
default=UnsubscribeBehaviourEnum.DisableAlias,
|
||||
default=UnsubscribeBehaviourEnum.PreserveOriginal,
|
||||
server_default=str(UnsubscribeBehaviourEnum.DisableAlias.value),
|
||||
nullable=False,
|
||||
)
|
||||
@ -1010,7 +1009,7 @@ class User(Base, ModelMixin, UserMixin, PasswordOracle):
|
||||
"""
|
||||
if self.random_alias_suffix == AliasSuffixEnum.random_string.value:
|
||||
return random_string(config.ALIAS_RANDOM_SUFFIX_LENGTH, include_digits=True)
|
||||
return random_word()
|
||||
return random_words(1, 3)
|
||||
|
||||
def __repr__(self):
|
||||
return f"<User {self.id} {self.name} {self.email}>"
|
||||
@ -1269,7 +1268,7 @@ def generate_email(
|
||||
name = uuid.uuid4().hex if in_hex else uuid.uuid4().__str__()
|
||||
random_email = name + "@" + alias_domain
|
||||
else:
|
||||
random_email = random_words() + "@" + alias_domain
|
||||
random_email = random_words(2, 3) + "@" + alias_domain
|
||||
|
||||
random_email = random_email.lower().strip()
|
||||
|
||||
|
@ -1,3 +1,4 @@
|
||||
import random
|
||||
import re
|
||||
import secrets
|
||||
import string
|
||||
@ -25,11 +26,16 @@ def word_exist(word):
|
||||
return word in _words
|
||||
|
||||
|
||||
def random_words():
|
||||
def random_words(words: int = 2, numbers: int = 0):
|
||||
"""Generate a random words. Used to generate user-facing string, for ex email addresses"""
|
||||
# nb_words = random.randint(2, 3)
|
||||
nb_words = 2
|
||||
return "_".join([secrets.choice(_words) for i in range(nb_words)])
|
||||
fields = [secrets.choice(_words) for i in range(words)]
|
||||
|
||||
if numbers > 0:
|
||||
fields.append("".join([str(random.randint(0, 9)) for i in range(numbers)]))
|
||||
return "".join(fields)
|
||||
else:
|
||||
return "_".join(fields)
|
||||
|
||||
|
||||
def random_string(length=10, include_digits=False):
|
||||
|
329422
app/local_data/words.txt
329422
app/local_data/words.txt
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
"""
|
||||
This is an example on how to integrate SimpleLogin
|
||||
with Requests-OAuthlib, a popular library to work with OAuth in Python.
|
||||
The step-to-step guide can be found on https://docs.simplelogin.io
|
||||
The step-to-step guide can be found on https://simplelogin.io/docs/siwsl/app/
|
||||
This example is based on
|
||||
https://requests-oauthlib.readthedocs.io/en/latest/examples/real_world_example.html
|
||||
"""
|
||||
|
@ -210,5 +210,6 @@ to apply the coupon code.
|
||||
});
|
||||
}
|
||||
|
||||
plausible("visit pricing");
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
19
app/templates/dashboard/thank-you.html
Normal file
19
app/templates/dashboard/thank-you.html
Normal file
@ -0,0 +1,19 @@
|
||||
{% extends "single.html" %}
|
||||
|
||||
{% set active_page = "dashboard" %}
|
||||
{% block title %}Thank you{% endblock %}
|
||||
{% block single_content %}
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h1 class="h3">Thanks so much for supporting SimpleLogin!</h1>
|
||||
<p>
|
||||
SimpleLogin is 100% funded by the community.
|
||||
We do not use your data, track you or show you ads.
|
||||
</p>
|
||||
<p>Thanks to your support, we can keep the service running and develop new features.</p>
|
||||
<a class="btn btn-primary" href="/">Close</a>
|
||||
</div>
|
||||
</div>
|
||||
<script>plausible("upgraded")</script>
|
||||
{% endblock %}
|
@ -31,7 +31,7 @@
|
||||
<span class="icon mr-3"><i class="fe fe-alert-octagon"></i></span>Danger
|
||||
</a>
|
||||
</div>
|
||||
<a href="https://docs.simplelogin.io"
|
||||
<a href="https://simplelogin.io/docs/siwsl/app/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="btn btn-block btn-secondary mt-4">
|
||||
|
@ -10,7 +10,7 @@
|
||||
<h4 class="alert-heading">Well done!</h4>
|
||||
<p>
|
||||
Please head to our
|
||||
<a href="https://docs.simplelogin.io"
|
||||
<a href="https://simplelogin.io/docs/siwsl/app/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer">
|
||||
documentation <i class="fe fe-external-link"></i>
|
||||
|
@ -47,7 +47,7 @@
|
||||
<div class="col">
|
||||
<div class="btn-group" role="group" aria-label="Basic example">
|
||||
<a href="{{ url_for('developer.new_client') }}" class="btn btn-primary">New website</a>
|
||||
<a href="https://docs.simplelogin.io"
|
||||
<a href="https://simplelogin.io/docs/siwsl/app/"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
class="ml-2 btn btn-secondary">
|
||||
|
@ -0,0 +1,17 @@
|
||||
{% extends "base.html" %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% call text() %}
|
||||
Hello,
|
||||
{% endcall %}
|
||||
|
||||
{% call text() %}
|
||||
Your have tried to register multiple times to {{ service }}, and this is against the terms of service of SimpleLogin. Please don't do that anymore.
|
||||
{% endcall %}
|
||||
|
||||
{% call text() %}
|
||||
If you continue registering multiple accounts to a single service we will have to disable your account.
|
||||
{% endcall %}
|
||||
|
||||
{% endblock %}
|
@ -0,0 +1,9 @@
|
||||
{% extends "base.txt.jinja2" %}
|
||||
|
||||
{% block content %}
|
||||
Hello,
|
||||
|
||||
Your have tried to register multiple times to {{service}}, and this is against the terms of service of SimpleLogin. Please don't do that anymore.
|
||||
|
||||
If you continue registering multiple accounts to a single service we will have to disable your account.
|
||||
{% endblock %}
|
@ -9,7 +9,12 @@ from app.utils import random_string, random_words, sanitize_next_url, canonicali
|
||||
|
||||
def test_random_words():
|
||||
s = random_words()
|
||||
assert len(s) > 0
|
||||
assert s.find("_") > 0
|
||||
assert s.count("_") == 1
|
||||
assert len(s) > 3
|
||||
s = random_words(2, 3)
|
||||
assert s.count("_") == 0
|
||||
assert s[-1] in (str(i) for i in range(10))
|
||||
|
||||
|
||||
def test_random_string():
|
||||
|
Loading…
x
Reference in New Issue
Block a user