You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mastodon/app/views
ThibG 5524258da9
Fix “Email changed” notification sometimes having wrong e-mail (#13475)
* Fix “Email changed” notification sometimes having wrong e-mail

Fixes #6778

The root of the issue is that `send_devise_notification` was called before
the changes were properly commited to the database, causing the mailer to
pick previous values if running too early.

Devise's documentation provides guidance on how to handle that[1][2], however,
I have found it to not be working, as the following happens, in that order:
- `send_devise_notification` is called for the `email_changed` notification.
  In that case, `changed?` is false and `saved_changes?` is true, so
  if we use the former, we have the same issue.
- the `after_commit` hook is called
- `send_devise_notification` is called for the `confirmation_instructions`
  notification.
  In that case, `changed?` is still false, and `saved_changes?` still true,
  so if we use the latter, that second notification email is simply not
  going to be sent (as we would be queuing the notification *after*
  executing the after_commit hook).

This is because it may be called from either an `after_update` or
`after_commit` hook, the difference not being a call to `save` but the
transaction actually being committed to the database. This may arguably
be a bug in Devise, or Devise's notification.

The proposed workaround is inspired by Devise's documentation but checks
whether a transaction is open to make the call whether to immediately
send the notification or defer it to the `after_commit` hook.

[1]: https://www.rubydoc.info/github/plataformatec/devise/Devise%2FModels%2FAuthenticatable:send_devise_notification
[2]: 406915cb78/lib/devise/models/authenticatable.rb (L133-L194)

* Fix cases when sending notifications without changing the model

* Defer sending if and only if in transaction including current record
5 years ago
..
about Fix blur behind closed registration message (#12442) 5 years ago
accounts Fix punycode being rendered instead of unicode in some places (#13030) 5 years ago
admin Add ability to filter audit log in admin UI (#13381) 5 years ago
admin_mailer Fixed not being able to display review pending hashtags in the admin UI. (#11875) 6 years ago
application Add noopener and/or noreferrer (#12202) 6 years ago
auth Fix invite request input not being shown on sign-up error if left empty (#13089) 5 years ago
authorize_interactions Fix misleading error when attempting to re-send a pending follow request (#13133) 5 years ago
directories Change last_status_at to be a date, not datetime (#12966) 5 years ago
errors Add specific rate limits for posting and following (#13172) 5 years ago
filters Various fixes and improvements (#12878) 5 years ago
follower_accounts Improve blocked view of profiles (#10491) 6 years ago
following_accounts Improve blocked view of profiles (#10491) 6 years ago
home Fix blurhash and autoplay not working on public pages (#11585) 6 years ago
invites Remove invite comments from UI (#12068) 6 years ago
kaminari Pagination improvements (#1445) 8 years ago
layouts Fix API footer link in Web UI (#13441) 5 years ago
media Save video metadata and improve video OpenGraph tags (#6481) 7 years ago
notification_mailer Fix NotificationMailer failing when receiving mention with media from remote instance (#11765) 6 years ago
oauth Add noopener and/or noreferrer (#12202) 6 years ago
public_timelines Change message of public timeline for local only (#12224) 6 years ago
relationships Change last_status_at to be a date, not datetime (#12966) 5 years ago
remote_follow Admission-based registrations mode (#10250) 6 years ago
remote_interaction Remove Atom feeds and old URLs in the form of `GET /:username/updates/:id` (#11247) 6 years ago
settings Fix account aliases page (#13452) 5 years ago
shared Remove fallback to long description on sidebar and meta description (#12119) 6 years ago
shares Fix blurhash and autoplay not working on public pages (#11585) 6 years ago
statuses Fix styling of polls in JS-less fallback on public pages (#13436) 5 years ago
tags Fix blurhash and autoplay not working on public pages (#11585) 6 years ago
user_mailer Fix “Email changed” notification sometimes having wrong e-mail (#13475) 5 years ago
well_known/host_meta Remove XML version of Webfinger and remove links to Atom feeds (#11460) 6 years ago