Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
2c7cb1c
make 24 hour configuration a config variable
jmdembe Jan 11, 2024
4bf8692
add config in `identity_config`
jmdembe Jan 11, 2024
75dec18
add `account_deletion_period_hours` to config
jmdembe Jan 16, 2024
a618d4d
change from 24 hour wait period text to be a variable
jmdembe Jan 16, 2024
c53408f
use interval for account deletion period
jmdembe Jan 16, 2024
dfbf0af
use interval for pending period
jmdembe Jan 16, 2024
ee4402a
refactor for account reset, standardize identity config value
jmdembe Jan 16, 2024
3d2b4b6
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 16, 2024
f8c0aab
reinstate changes
jmdembe Jan 16, 2024
1a1446f
fix everything
jmdembe Jan 16, 2024
7c78298
make changes in yml files
jmdembe Jan 16, 2024
61e0290
refactor in account resete cancel link and account_reset_request
jmdembe Jan 16, 2024
6d2e60d
fix devise setting, add test
jmdembe Jan 16, 2024
e3038dc
update test, fix test in yml file
jmdembe Jan 17, 2024
229e34c
remove hours/horas/hours
jmdembe Jan 17, 2024
017b981
lint
jmdembe Jan 17, 2024
feeff24
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 17, 2024
2918b58
add `DateHelper`
jmdembe Jan 17, 2024
0ad9588
restore `Devise.confirm_within`
jmdembe Jan 17, 2024
a204ddf
spelling error
jmdembe Jan 17, 2024
76fad01
fix interpolation
jmdembe Jan 17, 2024
b0d6297
remove unused config
jmdembe Jan 17, 2024
80ec5ca
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 17, 2024
f973b91
fix test, remove config from application.yml
jmdembe Jan 17, 2024
2764b20
fix test, lintfix
jmdembe Jan 18, 2024
1b09539
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 18, 2024
33ef382
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 18, 2024
32a2544
address code review comment about interpolation not working
jmdembe Jan 18, 2024
ec32011
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 19, 2024
a50ab6e
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 22, 2024
71e195b
interpolate '24' in '24 hour'
jmdembe Jan 23, 2024
a3b92aa
fix interpolation value
jmdembe Jan 23, 2024
876a7d5
add values to interpolate, update tests
jmdembe Jan 23, 2024
4d3ebca
lintfix
jmdembe Jan 24, 2024
e018af3
remove interpolation
jmdembe Jan 24, 2024
f39bf63
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 24, 2024
2f8e596
Update config/locales/two_factor_authentication/fr.yml
jmdembe Jan 24, 2024
4e60c86
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 24, 2024
31cd619
normalize yaml
jmdembe Jan 24, 2024
de3c9d6
change `interval` -> `hours`
jmdembe Jan 24, 2024
958d825
refactor name and variable
jmdembe Jan 24, 2024
c32423b
change `confirmation_period` what it actually means
jmdembe Jan 24, 2024
e10205a
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 24, 2024
529c9f0
fix missing interpolation error
jmdembe Jan 25, 2024
25479b6
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 25, 2024
32f1d3e
lint yml
jmdembe Jan 25, 2024
9f3d457
clean up test
jmdembe Jan 25, 2024
c592717
change test variable
jmdembe Jan 25, 2024
af1055b
make sure correct variable is in place
jmdembe Jan 25, 2024
eaa8372
fix `confirmation period` interpolation
jmdembe Jan 26, 2024
e737250
reset `confirmation_period`
jmdembe Jan 26, 2024
728b707
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 29, 2024
c49369d
normalize yaml
jmdembe Jan 29, 2024
002dc06
code review comments: change link expiration period notice and interv…
jmdembe Jan 29, 2024
9e900f2
use `account_reset_token_valid_for_days` for link validity
jmdembe Jan 31, 2024
3fab322
add test for footer
jmdembe Jan 31, 2024
d208f5e
change to `confirmation_period`
jmdembe Jan 31, 2024
42403f5
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Jan 31, 2024
8c9a115
clean up
jmdembe Feb 1, 2024
b3a67d8
use `account_reset_deletion_period_interval`
jmdembe Feb 1, 2024
360f674
change 24 hours to pending confirmation text
jmdembe Feb 2, 2024
de1e6da
Merge branch 'main' into jd-LG-12018-account-deletion-variable
jmdembe Feb 2, 2024
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
16 changes: 15 additions & 1 deletion app/controllers/account_reset/pending_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
module AccountReset
class PendingController < ApplicationController
include UserAuthenticator
include ActionView::Helpers::DateHelper

before_action :authenticate_user
before_action :confirm_account_reset_request_exists
Expand All @@ -10,7 +11,9 @@ def show
@pending_presenter = AccountReset::PendingPresenter.new(pending_account_reset_request)
end

def confirm; end
def confirm
@account_reset_deletion_period_interval = account_reset_deletion_period_interval
end

def cancel
analytics.pending_account_reset_cancelled
Expand All @@ -29,5 +32,16 @@ def pending_account_reset_request
current_user,
).call
end

def account_reset_deletion_period_interval
current_time = Time.zone.now

distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_wait_period_days.days,
true,
accumulate_on: :hours,
)
end
end
end
13 changes: 13 additions & 0 deletions app/controllers/account_reset/request_controller.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
module AccountReset
class RequestController < ApplicationController
include TwoFactorAuthenticatable
include ActionView::Helpers::DateHelper

before_action :confirm_two_factor_enabled

def show
analytics.account_reset_visit
@account_reset_deletion_period_interval = account_reset_deletion_period_interval
end

def create
Expand Down Expand Up @@ -39,5 +41,16 @@ def analytics_attributes
email_addresses: current_user.email_addresses.count,
}
end

def account_reset_deletion_period_interval
current_time = Time.zone.now

distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_wait_period_days.days,
true,
accumulate_on: :hours,
)
end
end
end
35 changes: 34 additions & 1 deletion app/mailers/user_mailer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
class UserMailer < ActionMailer::Base
include Mailable
include LocaleHelper
include ActionView::Helpers::DateHelper

class UserEmailAddressMismatchError < StandardError; end

Expand Down Expand Up @@ -149,7 +150,11 @@ def personal_key_regenerated
def account_reset_request(account_reset)
with_user_locale(user) do
@token = account_reset&.request_token
@header = t('user_mailer.account_reset_request.header')
@account_reset_deletion_period_hours = account_reset_deletion_period_hours
@header = t(
'user_mailer.account_reset_request.header',
interval: account_reset_deletion_period_interval,
)
mail(
to: email_address.email,
subject: t('user_mailer.account_reset_request.subject', app_name: APP_NAME),
Expand All @@ -161,6 +166,8 @@ def account_reset_granted(account_reset)
with_user_locale(user) do
@token = account_reset&.request_token
@granted_token = account_reset&.granted_token
@account_reset_deletion_period_hours = account_reset_deletion_period_hours
@account_reset_token_valid_period = account_reset_token_valid_period
mail(
to: email_address.email,
subject: t('user_mailer.account_reset_granted.subject', app_name: APP_NAME),
Expand Down Expand Up @@ -430,4 +437,30 @@ def email_should_receive_nonessential_notifications?(email)
modified_email = email.gsub(/\+[^@]+@/, '@')
!banlist.include?(modified_email)
end

def account_reset_deletion_period_interval
current_time = Time.zone.now

distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_wait_period_days.days,
true,
accumulate_on: :hours,
)
end

def account_reset_deletion_period_hours
IdentityConfig.store.account_reset_wait_period_days.days.in_hours.to_i
end

def account_reset_token_valid_period
current_time = Time.zone.now

distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_token_valid_for_days.days,
true,
accumulate_on: :hours,
)
end
end
4 changes: 4 additions & 0 deletions app/presenters/account_reset/pending_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,9 @@ def time_remaining_until_granted(now: Time.zone.now)
highest_measures: 2,
)
end

def account_reset_deletion_period_hours
IdentityConfig.store.account_reset_wait_period_days.days.in_hours.to_i
end
end
end
16 changes: 15 additions & 1 deletion app/presenters/two_factor_login_options_presenter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,10 @@ def account_reset_url(locale:)
def account_reset_cancel_link
safe_join(
[
t('two_factor_authentication.account_reset.pending'),
t(
'two_factor_authentication.account_reset.pending',
interval: account_reset_deletion_period_interval,
),
@view.link_to(
t('two_factor_authentication.account_reset.cancel_link'),
account_reset_cancel_url(token: account_reset_token),
Expand All @@ -140,4 +143,15 @@ def sp_name
APP_NAME
end
end

def account_reset_deletion_period_interval
current_time = Time.zone.now

view.distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_wait_period_days.days,
true,
accumulate_on: :hours,
)
end
end
14 changes: 14 additions & 0 deletions app/services/account_reset/create_request.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module AccountReset
class CreateRequest
include ActionView::Helpers::DateHelper

def initialize(user, requesting_issuer)
@user = user
@requesting_issuer = requesting_issuer
Expand Down Expand Up @@ -46,11 +48,23 @@ def notify_user_by_sms_if_applicable
@telephony_response = Telephony.send_account_reset_notice(
to: phone,
country_code: Phonelib.parse(phone).country,
interval: account_reset_wait_period,
)
end

def extra_analytics_attributes
@telephony_response&.extra&.slice(:request_id, :message_id) || {}
end

def account_reset_wait_period
current_time = Time.zone.now

distance_of_time_in_words(
current_time,
current_time + IdentityConfig.store.account_reset_wait_period_days,
true,
accumulate_on: :hours,
)
end
end
end
2 changes: 1 addition & 1 deletion app/views/account_reset/pending/confirm.html.erb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
<% self.title = t('account_reset.cancel_request.title') %>

<p><%= t('account_reset.pending.confirm') %></p>
<p><%= t('account_reset.pending.confirm', interval: @account_reset_deletion_period_interval) %></p>

<%= button_to(
account_reset_pending_cancel_path,
Expand Down
1 change: 1 addition & 0 deletions app/views/account_reset/pending/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<p>
<%= t(
'account_reset.pending.wait_html',
hours: @pending_presenter.account_reset_deletion_period_hours,
interval: @pending_presenter.time_remaining_until_granted,
) %>
</p>
Expand Down
2 changes: 1 addition & 1 deletion app/views/account_reset/request/show.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

<h2><%= t('account_reset.request.delete_account') %></h2>

<% t('account_reset.request.delete_account_info').each do |info_p| %>
<% t('account_reset.request.delete_account_info', interval: @account_reset_deletion_period_interval).each do |info_p| %>
<p><%= info_p %></p>
<% end %>

Expand Down
4 changes: 2 additions & 2 deletions app/views/user_mailer/account_reset_granted.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p class="lead">
<%= t('user_mailer.account_reset_granted.intro_html', app_name: link_to(APP_NAME, IdentityConfig.store.mailer_domain_name, class: 'gray')) %>
<%= t('user_mailer.account_reset_granted.intro_html', hours: @account_reset_deletion_period_hours, app_name: link_to(APP_NAME, IdentityConfig.store.mailer_domain_name, class: 'gray')) %>
</p>

<table class="button expanded large">
Expand Down Expand Up @@ -47,7 +47,7 @@
</table>

<p>
<%= t('user_mailer.email_confirmation_instructions.footer', confirmation_period: '24 hours') %>
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One other nice effect of this that occurs to me is that this would have been untranslated content, which is now fixed.

You can see "24 hours" in the Spanish version of the current template, for example.

<%= t('user_mailer.email_confirmation_instructions.footer', confirmation_period: @account_reset_token_valid_period) %>
</p>
<p>
<%= t(
Expand Down
2 changes: 1 addition & 1 deletion app/views/user_mailer/account_reset_request.html.erb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<p class="lead">
<%= t('user_mailer.account_reset_request.intro_html', app_name: link_to(APP_NAME, IdentityConfig.store.mailer_domain_name, class: 'gray')) %>
<%= t('user_mailer.account_reset_request.intro_html', app_name: link_to(APP_NAME, IdentityConfig.store.mailer_domain_name, class: 'gray'), hours: @account_reset_deletion_period_hours) %>
</p>

<p class="lead">
Expand Down
10 changes: 5 additions & 5 deletions config/locales/account_reset/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ en:
pending:
cancel_request: Cancel request
cancelled: We have cancelled your request to delete your account.
confirm: If you cancel now, you must create a new request and wait another 24
hours to delete your account.
confirm: If you cancel now, you must create a new request and wait another
%{interval} to delete your account.
header: You requested to delete your account
wait_html: There is a 24-hour waiting period to delete your account. In
wait_html: There is a %{hours}-hour waiting period to delete your account. In
<strong>%{interval}</strong>, you will receive an email with
instructions to complete the deletion.
recovery_options:
Expand Down Expand Up @@ -61,8 +61,8 @@ en:
to your account and you will need to restore each connection.
- If you continue, you will first receive an email confirmation. As a
security measure, you will receive another email with the link to
continue deleting your account 24 hours after the initial confirmation
email arrives.
continue deleting your account %{interval} after the initial
confirmation email arrives.
info:
- If you can’t access your account using the authentication methods you
set up previously, deleting your account and creating a new one is the
Expand Down
13 changes: 7 additions & 6 deletions config/locales/account_reset/es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,11 @@ es:
pending:
cancel_request: Cancelar petición
cancelled: Hemos cancelado su solicitud para eliminar su cuenta.
confirm: Si cancela ahora, debe crear una nueva solicitud y esperar otras 24
horas para eliminar su cuenta.
confirm: Si cancela ahora, debe crear una nueva solicitud y esperar otras
%{interval} para eliminar su cuenta.
header: Solicitaste eliminar tu cuenta
wait_html: Hay un período de espera de 24 horas para eliminar su cuenta. En
<strong>%{interval}</strong>, recibirá un correo electrónico con
wait_html: Hay un período de espera de %{hours} horas para eliminar su cuenta.
En <strong>%{interval}</strong>, recibirá un correo electrónico con
instrucciones para completar la eliminación.
recovery_options:
check_saved_credential: Verifica si tienes una credencial almacenada
Expand Down Expand Up @@ -65,8 +65,9 @@ es:
conexión.
- Si continúas, tú primero recibirá una confirmación por correo
electrónico. Como medida de seguridad, lo hará reciba otro correo
electrónico con el enlace para seguir eliminando su cuenta las 24
horas después del correo electrónico de confirmación inicial llega.
electrónico con el enlace para seguir eliminando su cuenta las
%{interval} después del correo electrónico de confirmación inicial
llega.
info:
- Si no puede acceder a su cuenta a través de las opciones de seguridad
que configuró anteriormente, eliminar la cuenta y crear una nueva es
Expand Down
12 changes: 6 additions & 6 deletions config/locales/account_reset/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ fr:
cancel_request: Demande d’annulation
cancelled: Nous avons annulé votre demande de suppression de votre compte.
confirm: Si vous annulez maintenant, vous devez créer une nouvelle demande et
attendre encore 24 heures pour supprimer votre compte.
attendre encore %{interval} pour supprimer votre compte.
header: Vous avez demandé de supprimer votre compte
wait_html: Il y a un délai d’attente de 24 heures pour supprimer votre compte.
Dans <strong>%{interval}</strong>, vous recevrez un e-mail avec des
instructions pour terminer la suppression.
wait_html: Il y a un délai d’attente de %{hours} heures pour supprimer votre
compte. Dans <strong>%{interval}</strong>, vous recevrez un e-mail avec
des instructions pour terminer la suppression.
recovery_options:
check_saved_credential: Vérifiez si vous avez des informations d’identification sauvegardées
check_webauthn_platform_info: Si vous avez configuré le déverrouillage facial ou
Expand Down Expand Up @@ -65,8 +65,8 @@ fr:
devrez restaurer chaque connexion.
- Si vous continuez, vous recevra d’abord un email de confirmation. Par
mesure de sécurité, vous devrez recevoir un autre e-mail avec le lien
pour continuer la suppression de votre compte 24 heures après l’email
de confirmation initial arrive.
pour continuer la suppression de votre compte %{interval} après
l’email de confirmation initial arrive.
info:
- Si vous ne pouvez pas accéder à votre compte via les options de
sécurité que vous avez définies auparavant, la suppression de votre
Expand Down
4 changes: 2 additions & 2 deletions config/locales/telephony/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ en:
telephony:
account_reset_cancellation_notice: Your request to delete your %{app_name} account has been cancelled.
account_reset_notice: As requested, your %{app_name} account will be deleted in
24 hours. Don't want to delete your account? Sign in to your %{app_name}
account to cancel.
%{interval}. Don't want to delete your account? Sign in to your
%{app_name} account to cancel.
authentication_otp:
sms: |-
%{app_name}: Your one-time code is %{code}. It expires in %{expiration} minutes. Don't share this code with anyone.
Expand Down
2 changes: 1 addition & 1 deletion config/locales/telephony/es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ es:
telephony:
account_reset_cancellation_notice: Su solicitud para eliminar su cuenta de %{app_name} ha sido cancelada.
account_reset_notice: Según lo solicitado, su cuenta %{app_name} se eliminará en
24 horas. ¿No quieres eliminar tu cuenta? Inicie sesión en su cuenta
%{interval}. ¿No quieres eliminar tu cuenta? Inicie sesión en su cuenta
%{app_name} para cancelar.
authentication_otp:
sms: |-
Expand Down
4 changes: 2 additions & 2 deletions config/locales/telephony/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ fr:
telephony:
account_reset_cancellation_notice: Votre demande de suppression de votre compte %{app_name} a été annulée.
account_reset_notice: Comme demandé, votre compte %{app_name} sera supprimé dans
les 24 heures. Vous ne voulez pas supprimer votre compte? Connectez-vous à
votre compte %{app_name} pour le annuler.
les %{interval}. Vous ne voulez pas supprimer votre compte? Connectez-vous
à votre compte %{app_name} pour le annuler.
authentication_otp:
sms: |-
%{app_name}: Votre code à usage unique est %{code}. Il est valable pendant %{expiration} minutes. Vous ne devez pas partager ce code avec personne.
Expand Down
2 changes: 1 addition & 1 deletion config/locales/two_factor_authentication/en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ en:
cancel_link: Cancel your request
link: deleting your account
pending: You currently have a pending request to delete your account. It takes
24 hours from the time you made the request to complete the process.
%{interval} from the time you made the request to complete the process.
Please check back later.
successful_cancel: Thank you. Your request to delete your %{app_name} account
has been cancelled.
Expand Down
2 changes: 1 addition & 1 deletion config/locales/two_factor_authentication/es.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ es:
cancel_link: Cancelar su solicitud
link: eliminando su cuenta
pending: Actualmente tiene una solicitud pendiente para eliminar su cuenta. Se
necesitan 24 horas desde el momento en que realizó la solicitud para
necesitan %{interval} desde el momento en que realizó la solicitud para
completar el proceso. Por favor, vuelva más tarde.
successful_cancel: Gracias. Su solicitud para eliminar su cuenta de %{app_name}
ha sido cancelada.
Expand Down
2 changes: 1 addition & 1 deletion config/locales/two_factor_authentication/fr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ fr:
cancel_link: Annuler votre demande
link: supprimer votre compte
pending: Vous avez actuellement une demande en attente pour supprimer votre
compte. Il faut compter 24 heures à partir du moment où vous avez fait
compte. Il faut compter %{interval} à partir du moment où vous avez fait
la demande pour terminer le processus. Veuillez vérifier plus tard.
successful_cancel: Je vous remercie. Votre demande de suppression de votre
compte %{app_name} a été annulée.
Expand Down
Loading