Skip to content

Commit

Permalink
Update render function to receive user always as a param (#2141)
Browse files Browse the repository at this point in the history
* Update render function to receive user always as a param

(cherry picked from commit fb53632)

* Add user to the kwargs
  • Loading branch information
acasajus committed Jul 3, 2024
1 parent e71d626 commit 2d841e9
Show file tree
Hide file tree
Showing 14 changed files with 94 additions and 30 deletions.
2 changes: 2 additions & 0 deletions app/alias_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -453,10 +453,12 @@ def transfer_alias(alias, new_user, new_mailboxes: [Mailbox]):
f"Alias {alias.email} has been received",
render(
"transactional/alias-transferred.txt",
user=old_user,
alias=alias,
),
render(
"transactional/alias-transferred.html",
user=old_user,
alias=alias,
),
)
Expand Down
8 changes: 4 additions & 4 deletions app/api/views/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -129,8 +129,8 @@ def auth_register():
send_email(
email,
"Just one more step to join SimpleLogin",
render("transactional/code-activation.txt.jinja2", code=code),
render("transactional/code-activation.html", code=code),
render("transactional/code-activation.txt.jinja2", user=user, code=code),
render("transactional/code-activation.html", user=user, code=code),
)

RegisterEvent(RegisterEvent.ActionType.success, RegisterEvent.Source.api).send()
Expand Down Expand Up @@ -226,8 +226,8 @@ def auth_reactivate():
send_email(
email,
"Just one more step to join SimpleLogin",
render("transactional/code-activation.txt.jinja2", code=code),
render("transactional/code-activation.html", code=code),
render("transactional/code-activation.txt.jinja2", user=user, code=code),
render("transactional/code-activation.html", user=user, code=code),
)

return jsonify(msg="User needs to confirm their account"), 200
Expand Down
2 changes: 1 addition & 1 deletion app/auth/views/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,4 @@ def send_activation_email(user, next_url):
LOG.d("redirect user to %s after activation", next_url)
activation_link = activation_link + "&next=" + encode_url(next_url)

email_utils.send_activation_email(user.email, activation_link)
email_utils.send_activation_email(user, activation_link)
4 changes: 2 additions & 2 deletions app/dashboard/views/account_setting.py
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ def send_reset_password_email(user):

reset_password_link = f"{URL}/auth/reset_password?code={reset_password_code.code}"

email_utils.send_reset_password_email(user.email, reset_password_link)
email_utils.send_reset_password_email(user, reset_password_link)


def send_change_email_confirmation(user: User, email_change: EmailChange):
Expand All @@ -179,7 +179,7 @@ def send_change_email_confirmation(user: User, email_change: EmailChange):

link = f"{URL}/auth/change_email?code={email_change.code}"

email_utils.send_change_email(email_change.new_email, user.email, link)
email_utils.send_change_email(user, email_change.new_email, link)


@dashboard_bp.route("/resend_email_change", methods=["GET", "POST"])
Expand Down
53 changes: 38 additions & 15 deletions app/email_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,20 @@
VERP_HMAC_ALGO = "sha3-224"


def render(template_name, **kwargs) -> str:
def render(template_name: str, user: Optional[User], **kwargs) -> str:
templates_dir = os.path.join(config.ROOT_DIR, "templates", "emails")
env = Environment(loader=FileSystemLoader(templates_dir))

template = env.get_template(template_name)

if user is None:
if current_user and current_user.is_authenticated:
user = current_user

use_partner_template = False
if current_user and current_user.is_authenticated:
use_partner_template = current_user.has_used_alias_from_partner()
if user:
use_partner_template = user.has_used_alias_from_partner()
kwargs["user"] = user

return template.render(
MAX_NB_EMAIL_FREE_PLAN=config.MAX_NB_EMAIL_FREE_PLAN,
Expand Down Expand Up @@ -117,53 +122,59 @@ def send_trial_end_soon_email(user):
)


def send_activation_email(email, activation_link):
def send_activation_email(user: User, activation_link):
send_email(
email,
user.email,
"Just one more step to join SimpleLogin",
render(
"transactional/activation.txt",
user=user,
activation_link=activation_link,
email=email,
email=user.email,
),
render(
"transactional/activation.html",
user=user,
activation_link=activation_link,
email=email,
email=user.email,
),
)


def send_reset_password_email(email, reset_password_link):
def send_reset_password_email(user: User, reset_password_link):
send_email(
email,
user.email,
"Reset your password on SimpleLogin",
render(
"transactional/reset-password.txt",
user=user,
reset_password_link=reset_password_link,
),
render(
"transactional/reset-password.html",
user=user,
reset_password_link=reset_password_link,
),
)


def send_change_email(new_email, current_email, link):
def send_change_email(user: User, new_email, link):
send_email(
new_email,
"Confirm email update on SimpleLogin",
render(
"transactional/change-email.txt",
user=user,
link=link,
new_email=new_email,
current_email=current_email,
current_email=user.email,
),
render(
"transactional/change-email.html",
user=user,
link=link,
new_email=new_email,
current_email=current_email,
current_email=user.email,
),
)

Expand All @@ -176,28 +187,32 @@ def send_invalid_totp_login_email(user, totp_type):
"Unsuccessful attempt to login to your SimpleLogin account",
render(
"transactional/invalid-totp-login.txt",
user=user,
type=totp_type,
),
render(
"transactional/invalid-totp-login.html",
user=user,
type=totp_type,
),
1,
)


def send_test_email_alias(email, name):
def send_test_email_alias(user: User, email: str):
send_email(
email,
f"This email is sent to {email}",
render(
"transactional/test-email.txt",
name=name,
user=user,
name=user.name,
alias=email,
),
render(
"transactional/test-email.html",
name=name,
user=user,
name=user.name,
alias=email,
),
)
Expand All @@ -212,11 +227,13 @@ def send_cannot_create_directory_alias(user, alias_address, directory_name):
f"Alias {alias_address} cannot be created",
render(
"transactional/cannot-create-alias-directory.txt",
user=user,
alias=alias_address,
directory=directory_name,
),
render(
"transactional/cannot-create-alias-directory.html",
user=user,
alias=alias_address,
directory=directory_name,
),
Expand All @@ -234,11 +251,13 @@ def send_cannot_create_directory_alias_disabled(user, alias_address, directory_n
f"Alias {alias_address} cannot be created",
render(
"transactional/cannot-create-alias-directory-disabled.txt",
user=user,
alias=alias_address,
directory=directory_name,
),
render(
"transactional/cannot-create-alias-directory-disabled.html",
user=user,
alias=alias_address,
directory=directory_name,
),
Expand All @@ -254,11 +273,13 @@ def send_cannot_create_domain_alias(user, alias, domain):
f"Alias {alias} cannot be created",
render(
"transactional/cannot-create-alias-domain.txt",
user=user,
alias=alias,
domain=domain,
),
render(
"transactional/cannot-create-alias-domain.html",
user=user,
alias=alias,
domain=domain,
),
Expand Down Expand Up @@ -1269,6 +1290,7 @@ def spf_pass(
f"SimpleLogin Alert: attempt to send emails from your alias {alias.email} from unknown IP Address",
render(
"transactional/spf-fail.txt",
user=user,
alias=alias.email,
ip=ip,
mailbox_url=config.URL + f"/dashboard/mailbox/{mailbox.id}#spf",
Expand All @@ -1278,6 +1300,7 @@ def spf_pass(
),
render(
"transactional/spf-fail.html",
user=user,
ip=ip,
mailbox_url=config.URL + f"/dashboard/mailbox/{mailbox.id}#spf",
to_email=contact_email,
Expand Down
4 changes: 4 additions & 0 deletions app/handler/dmarc.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,12 +106,14 @@ def apply_dmarc_policy_for_forward_phase(
f"An email sent to {alias.email} has been quarantined",
render(
"transactional/message-quarantine-dmarc.txt.jinja2",
user=user,
from_header=from_header,
alias=alias,
refused_email_url=email_log.get_dashboard_url(),
),
render(
"transactional/message-quarantine-dmarc.html",
user=user,
from_header=from_header,
alias=alias,
refused_email_url=email_log.get_dashboard_url(),
Expand Down Expand Up @@ -176,12 +178,14 @@ def apply_dmarc_policy_for_reply_phase(
f"Attempt to send an email to your contact {contact_recipient.email} from {envelope.mail_from}",
render(
"transactional/spoof-reply.txt.jinja2",
user=alias_from.user,
contact=contact_recipient,
alias=alias_from,
sender=envelope.mail_from,
),
render(
"transactional/spoof-reply.html",
user=alias_from.user,
contact=contact_recipient,
alias=alias_from,
sender=envelope.mail_from,
Expand Down
2 changes: 2 additions & 0 deletions app/handler/provider_complaint.py
Original file line number Diff line number Diff line change
Expand Up @@ -319,11 +319,13 @@ def report_complaint_to_user_in_forward_phase(
f"Abuse report from {capitalized_name}",
render(
"transactional/provider-complaint-forward-phase.txt.jinja2",
user=user,
email=mailbox_email,
provider=capitalized_name,
),
render(
"transactional/provider-complaint-forward-phase.html",
user=user,
email=mailbox_email,
provider=capitalized_name,
),
Expand Down
4 changes: 3 additions & 1 deletion app/jobs/export_user_data_job.py
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,9 @@ def run(self):
msg[headers.SUBJECT] = "Your SimpleLogin data"
msg[headers.FROM] = f'"SimpleLogin (noreply)" <{config.NOREPLY}>'
msg[headers.TO] = to_email
msg.attach(MIMEText(render("transactional/user-report.html"), "html"))
msg.attach(
MIMEText(render("transactional/user-report.html", user=self._user), "html")
)
attachment = MIMEApplication(zipped_contents.read())
attachment.add_header(
"Content-Disposition", "attachment", filename="user_report.zip"
Expand Down
2 changes: 1 addition & 1 deletion app/onboarding/views/final.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def final():
if form.validate_on_submit():
alias = Alias.get_by(email=form.email.data)
if alias and alias.user_id == current_user.id:
send_test_email_alias(alias.email, current_user.name)
send_test_email_alias(current_user, alias.email)
flash("An email is sent to your alias", "success")

return render_template(
Expand Down
1 change: 1 addition & 0 deletions app/paddle_callback.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def failed_payment(sub: Subscription, subscription_id: str):
"SimpleLogin - your subscription has failed to be renewed",
render(
"transactional/subscription-cancel.txt",
user=user,
end_date=arrow.arrow.datetime.utcnow(),
),
)
6 changes: 6 additions & 0 deletions cron.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,11 +266,13 @@ def notify_manual_sub_end():
"Your SimpleLogin subscription will end soon",
render(
"transactional/coinbase/reminder-subscription.txt",
user=user,
coinbase_subscription=coinbase_subscription,
extend_subscription_url=extend_subscription_url,
),
render(
"transactional/coinbase/reminder-subscription.html",
user=user,
coinbase_subscription=coinbase_subscription,
extend_subscription_url=extend_subscription_url,
),
Expand Down Expand Up @@ -826,10 +828,12 @@ def check_mailbox_valid_domain():
f"Mailbox {mailbox.email} is disabled",
render(
"transactional/disable-mailbox-warning.txt.jinja2",
user=mailbox.user,
mailbox=mailbox,
),
render(
"transactional/disable-mailbox-warning.html",
user=mailbox.user,
mailbox=mailbox,
),
retries=3,
Expand Down Expand Up @@ -884,6 +888,7 @@ def check_mailbox_valid_pgp_keys():
f"Mailbox {mailbox.email}'s PGP Key is invalid",
render(
"transactional/invalid-mailbox-pgp-key.txt.jinja2",
user=mailbox.user,
mailbox=mailbox,
),
retries=3,
Expand Down Expand Up @@ -924,6 +929,7 @@ def check_single_custom_domain(custom_domain):
f"Please update {custom_domain.domain} DNS on SimpleLogin",
render(
"transactional/custom-domain-dns-issue.txt.jinja2",
user=user,
custom_domain=custom_domain,
domain_dns_url=domain_dns_url,
),
Expand Down
Loading

0 comments on commit 2d841e9

Please sign in to comment.