Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion app/dashboard/views/alias_transfer.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,24 @@ def alias_transfer_receive_route():
flash("You must select at least 1 mailbox", "warning")
return redirect(request.url)

Alias.lock_for_update(alias.id)
Session.refresh(alias)

if alias.transfer_token != token and alias.transfer_token != hashed_token:
flash("Invalid link", "error")
return redirect(url_for("dashboard.index"))

if (
alias.transfer_token_expiration is not None
and alias.transfer_token_expiration < arrow.utcnow()
):
flash("Expired link, please request a new one", "error")
return redirect(url_for("dashboard.index"))

if alias.user_id == current_user.id:
flash("You already own this alias", "warning")
return redirect(url_for("dashboard.index"))

LOG.d(
"transfer alias %s from %s to %s with %s with token %s",
alias,
Expand All @@ -174,7 +192,6 @@ def alias_transfer_receive_route():
)
transfer_alias(alias, current_user, mailboxes)

# reset transfer token
alias.transfer_token = None
alias.transfer_token_expiration = None
Session.commit()
Expand Down
Loading