From 9ae4dbd4af8bf1d3c5daa5d397bb41030a6ad238 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 16 Mar 2023 15:33:32 +0100 Subject: [PATCH 1/2] feat(token depreciation): add alert on profile --- .../api_token_component/api_token_component.html.haml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/components/profile/api_token_component/api_token_component.html.haml b/app/components/profile/api_token_component/api_token_component.html.haml index 2ffdfe33c..38dd310a1 100644 --- a/app/components/profile/api_token_component/api_token_component.html.haml +++ b/app/components/profile/api_token_component/api_token_component.html.haml @@ -2,6 +2,11 @@ %b= "#{@api_token.name} " %span.fr-text--sm= @api_token.prefix + -# TODO: remove after 01/07/2023 + - if @api_token.version != 3 && Time.zone.now < Time.zone.parse('01/07/2023') + .fr-alert.fr-alert--info.fr-alert--sm.mt-2 + %p Attention, ce jeton ne sera plus valide à partir du 01/07/2023 + .fr-card__desc - if @packed_token.present? .fr-text--sm{ style: "width: 80%; word-break: break-all;" } From ca63cc34abbab9d915239786f90fc9ae24c66988 Mon Sep 17 00:00:00 2001 From: simon lehericey Date: Thu, 16 Mar 2023 15:36:27 +0100 Subject: [PATCH 2/2] feat(token depreciation): add mail alert --- app/mailers/administrateur_mailer.rb | 9 +++++++++ .../api_token_expiration.haml | 19 +++++++++++++++++++ lib/tasks/token_expiration_email.rake | 15 +++++++++++++++ .../previews/administrateur_mailer_preview.rb | 6 ++++++ 4 files changed, 49 insertions(+) create mode 100644 app/views/administrateur_mailer/api_token_expiration.haml create mode 100644 lib/tasks/token_expiration_email.rake diff --git a/app/mailers/administrateur_mailer.rb b/app/mailers/administrateur_mailer.rb index 1e65bc7a3..3fcb36696 100644 --- a/app/mailers/administrateur_mailer.rb +++ b/app/mailers/administrateur_mailer.rb @@ -22,6 +22,15 @@ class AdministrateurMailer < ApplicationMailer reply_to: CONTACT_EMAIL) end + def api_token_expiration(user, tokens) + @subject = "Renouvellement de jeton d'API nécessaire" + @tokens = tokens + + mail(to: user.email, + subject: @subject, + reply_to: CONTACT_EMAIL) + end + private def forced_delivery_for_action? diff --git a/app/views/administrateur_mailer/api_token_expiration.haml b/app/views/administrateur_mailer/api_token_expiration.haml new file mode 100644 index 000000000..f85043143 --- /dev/null +++ b/app/views/administrateur_mailer/api_token_expiration.haml @@ -0,0 +1,19 @@ +- content_for(:title, @subject) + +%p + Bonjour, + +%p + - if @tokens.one? + Votre jeton d'API « #{@tokens.first.prefix} » expirera le 1er juillet 2023. + - else + Vos jetons d'API « #{@tokens.map(&:prefix).join(', ')} » expireront le 1er juillet 2023. + Passée cette date, vos interconnexions utilisant ce jeton ne marcheront plus. + +%p + Vous devrez le(s) remplacer par de nouveaux jetons que vous pouvez obtenir en utilisant la page #{link_to(profil_url, profil_url)}. + +%p + Nous restons à votre disposition si vous avez besoin d’accompagnement à l'adresse #{link_to CONTACT_EMAIL, "mailto:#{CONTACT_EMAIL}"}. + += render partial: "layouts/mailers/signature" diff --git a/lib/tasks/token_expiration_email.rake b/lib/tasks/token_expiration_email.rake new file mode 100644 index 000000000..cae1ad507 --- /dev/null +++ b/lib/tasks/token_expiration_email.rake @@ -0,0 +1,15 @@ +require Rails.root.join("lib", "tasks", "task_helper") + +namespace :token_expiration_email do + task send_warning: :environment do + admin_tokens = APIToken + .includes(:administrateur) + .where(version: [1, 2]) + .to_a + .group_by(&:administrateur) + + admin_tokens.each do |admin, tokens| + AdministrateurMailer.api_token_expiration(admin.user, tokens).deliver_later + end + end +end diff --git a/spec/mailers/previews/administrateur_mailer_preview.rb b/spec/mailers/previews/administrateur_mailer_preview.rb index 0f8549f3c..09da7c8ff 100644 --- a/spec/mailers/previews/administrateur_mailer_preview.rb +++ b/spec/mailers/previews/administrateur_mailer_preview.rb @@ -10,4 +10,10 @@ class AdministrateurMailerPreview < ActionMailer::Preview procedure = Procedure.first AdministrateurMailer.notify_procedure_expires_when_termine_forced(email, procedure) end + + def api_token_expiration + user = User.last + tokens = [APIToken.last, APIToken.last] + AdministrateurMailer.api_token_expiration(user, tokens) + end end