Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/mjml mails #1255

Merged
merged 21 commits into from
Oct 20, 2023
Merged
Show file tree
Hide file tree
Changes from 18 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
6 changes: 6 additions & 0 deletions .github/workflows/tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,12 @@ jobs:
bundler-cache: true
cache-version: 321

- name: Setup Nodejs
uses: actions/setup-node@v3

- name: Install mjml dependency
run: npm install mjml

- name: Install postgres client #and imagemagick
run: sudo apt-get install libpq-dev #imagemagick

Expand Down
7 changes: 7 additions & 0 deletions .prettierrc.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
insertFinalNewline: true
Samuelfaure marked this conversation as resolved.
Show resolved Hide resolved
indentStyle: space
indentSize: 2
printWidth: 120
maxLineLength: 180
htmlWhitespaceSensitivity: ignore
bracketSameLine: true
2 changes: 2 additions & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,8 @@ Naming/MethodParameterName:
- "_"
- "nb"
- "id"
- "to"
- "cc"

Metrics/MethodLength:
Max:
Expand Down
1 change: 1 addition & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ gem 'draper'
gem 'ip_anonymizer'
gem 'jwt'
gem 'mailjet'
gem 'mjml-rails'
gem 'pundit'
gem 'omniauth-oauth2'
gem 'omniauth-rails_csrf_protection'
Expand Down
2 changes: 2 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,7 @@ GEM
mime-types-data (3.2023.1003)
mini_mime (1.1.5)
minitest (5.20.0)
mjml-rails (4.9.0)
msgpack (1.7.2)
multi_json (1.15.0)
multi_xml (0.6.0)
Expand Down Expand Up @@ -569,6 +570,7 @@ DEPENDENCIES
listen
logstasher
mailjet
mjml-rails
omniauth-oauth2
omniauth-rails_csrf_protection
pastel
Expand Down
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
- ruby 3.2.1
- redis-server >= 6
- postgresql >= 9
- Node.js >= 6 pour mjml

## Install

Expand Down Expand Up @@ -73,6 +74,10 @@ bin/rspec
guard
```

## Prévisualisation des mails

Une fois le serveur local lancé, vous pouvez prévisualiser les mails [à cette adresse](http://localhost:3000/rails/mailers)

### Static security

[brakeman](https://github.com/presidentbeef/brakeman) est installé. Vous pouvez
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added app/assets/images/dinum_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion app/lib/seeds.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ def create_contact
end

def create_magic_link
MagicLink.new(email: @user.email)
MagicLink.create!(email: @user.email)
end

def create_api_entreprise_token_valid
Expand Down
34 changes: 34 additions & 0 deletions app/mailers/api_entreprise/authorization_request_mailer.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
class APIEntreprise::AuthorizationRequestMailer < APIEntrepriseMailer
include ExternalUrlHelper

%w[
enquete_satisfaction
embarquement_brouillon_en_attente
embarquement_demande_refusee
embarquement_modifications_demandees
embarquement_relance_modifications_demandees
embarquement_valide_to_editeur
embarquement_valide_to_demandeur_tech_metier
embarquement_valide_to_demandeur_seulement
embarquement_valide_to_metier_cc_demandeur_tech
embarquement_valide_to_demandeur_not_tech
embarquement_valide_to_demandeur_tech_not_metier
embarquement_valide_to_tech_cc_demandeur_metier
embarquement_valide_to_tech_cc_metier
demande_recue
reassurance_demande_recue
].each do |method|
send('define_method', method) do |args|
@all_scopes = I18n.t('api_entreprise.tokens.token.scope')
@authorization_request = args[:authorization_request]
@authorization_request_scopes = @authorization_request.token.scopes.map(&:to_sym)
@authorization_request_datapass_url = datapass_authorization_request_url(@authorization_request)

@full_name_demandeur = @authorization_request.demandeur.full_name
@full_name_contact_technique = @authorization_request.contact_technique&.full_name
@full_name_contact_metier = @authorization_request.contact_metier&.full_name

mail(to: args[:to], cc: args[:cc], subject: t('.subject')) { |format| format.html }
end
end
end
2 changes: 2 additions & 0 deletions app/mailers/api_entreprise_mailer.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
class APIEntrepriseMailer < ApplicationMailer
default from: 'support@entreprise.api.gouv.fr'

default_url_options[:host] = Rails.env.production? ? 'https://entreprise.api.gouv.fr' : "https://#{Rails.env}.entreprise.api.gouv.fr"
end
2 changes: 2 additions & 0 deletions app/mailers/api_particulier_mailer.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
class APIParticulierMailer < ApplicationMailer
default from: 'support@particulier.api.gouv.fr'

default_url_options[:host] = Rails.env.production? ? 'https://particulier.api.gouv.fr' : "https://#{Rails.env}.particulier.api.gouv.fr"
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<mj-section mj-class="section-banner" background-color="#e3ebd3">
<mj-column>
<mj-divider></mj-divider>
<mj-text>
<h1>
<b>
<% if entity == "editeur" %>
Copy link
Member

Choose a reason for hiding this comment

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

simple remarque, entity_type aurait été mieux, entity on s'attend à un modèle.

Honnêtement ce n'est pas très grave, ça pourra se scout commiter au besoin

Votre demande d'accès en tant qu'éditeur a été validée ✅</span>
Samuelfaure marked this conversation as resolved.
Show resolved Hide resolved
<% elsif entity == "contact_metier" || entity == "contact_technique" %>
Votre service a désormais accès à l'API Entreprise ✅
<% else %>
Votre demande d'accès a été validée ✅</span>
Samuelfaure marked this conversation as resolved.
Show resolved Hide resolved
<% end %>
</b>
</h1>
<h2>
<% if entity == "contact_metier"%>
Vous avez été désigné contact métier.
<% elsif entity == "contact_technique"%>
Vous avez été désigné contact technique, récupérez le token 🔑
<% else %>
Votre clé d'accès est disponible 🔑
<% end %>
</h2>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-beige">
<h2 style="margin-top: 10px">
<h3>
ℹ️ Des supports pour étoffer votre demande&nbsp;
<br />

et accélérer sa finalisation
Samuelfaure marked this conversation as resolved.
Show resolved Hide resolved
</h3>
</h2>
<p>
<em>La majorité des demandes sont traitées en 10 jours.</em>
<br />
<em>Les délais de traitement sont plus longs lorsqu’il nous manque des documents.&nbsp;</em>
<br />
------
</p>
<p>
<b>
Aidez-vous des contenus suivants pour étoffer votre dossier et accélérer le traitement de votre demande&nbsp;:
</b>
</p>
<p>
☑️ Préciser votre
<b>cadre juridique</b>
et fournir les justificatifs nécessaires, en vous aidant de notre rubrique

<a target="_blank" href="<%= faq_index_url %>/#demande-d-habilitation">
"Demande d'habilitation - Quelles informations me seront demandées ?"
</a>
</p>
<p>
☑️ Identifier les
<b>données</b>
dont vous avez besoin, 
et ne sélectionner que celles strictement nécessaires
pour votre service, en parcourant
leur documentation dans le
<a target="_blank" href="<%= endpoints_url %>/">"Catalogue des API"</a>
Copy link
Member

Choose a reason for hiding this comment

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

je pense que l'ensemble des target blank ne seront pas fonctionnels, faudra tester en sandbox

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Compliqué de tester les templates d'email en sandbox tant que j'ai pas migré le code hors de mailjet, donc je me note de tester ça plus tard quitte à supprimer les blank plus tard

Copy link
Member

Choose a reason for hiding this comment

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

Compliqué de tester les templates d'email en sandbox.

C'est un mailer ça se fait en un one liner:

APIEntreprise::AuthorizationRequestMailer.demande_recue(to: ['tonemail'], cc: [], authorization_request: AuthorizationRequest.first).deliver_now

Faut le faire avant de merger

Copy link
Contributor Author

Choose a reason for hiding this comment

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

ah bah oui -_- depuis la console... ugh mon cerveau est en vacances avec ce déménagement

</p>
<p style="margin: 10px 0; margin-bottom: 10px">&nbsp;</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<mj-section background-color="#ffffff" padding="0px 40px 30px 40px">
<mj-column>
<mj-text mj-class="block-beige">
<p>
📊
<b>Pour être informé de la consommation de l'API Entreprise par vos services</b>
connectez-vous à votre
<a target="_blank" href="<%= user_profile_url %>">
<b>compte API Entreprise</b>
</a>
.
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-beige">
<p>
<b><%= authorization_request.intitule %></b>
<br />
<%= authorization_request.description %>
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-beige">
<h3 style="margin-top: 10px">ℹ️ Des repères pour compléter votre demande</h3>
<p>
<i>Vous avez quelques doutes sur la façon de remplir votre demande d’habilitation ?</i>
</p>
<p>
<b>Voici une liste des contenus utiles à consulter :</b>
</p>
<p>
☑️ Vérifier votre éligibilité, en consultant notre rubrique
<a target="_blank" href="https://api.gouv.fr/les-api/api-entreprise/demande-acces">
Un accès sous habilitation et conditions
</a>
</p>
<p>
☑️ Consulter le déroulé des étapes d’une demande, détaillé dans la rubrique
<a target="_blank" href="<%= faq_index_url %>/#demande-d-habilitation">
“Demande d'habilitation - Quelles informations me seront demandées ?”
</a>
</p>
<p>
☑️ Identifier les données dont vous avez besoin, en parcourant le &nbsp;“
<a target="_blank" href="<%= endpoints_url %>/">Catalogue des API</a>
</p>
<p>
☑️ Se rattacher à un cas d’usage identifié par API Entreprise, et utiliser un formulaire “pré-rempli” dans
Datapass.
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-beige">
<h2>
Pour mettre en production API Entreprise&nbsp;:
</h2>
<p>
Utilisez notre kit de mise en production. Nous vous y listons les étapes pour intégrer l'API Entreprise&nbsp;:
</p>
</mj-text>
<mj-button mj-class="block-beige" href="<%= developers_url %>#kit-de-mise-en-production">
Kit de mise en production 🚀
</mj-button>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-blue">
<p>
🔔
<b>
Pour connaître l'ensemble des lettres d'informations et notifications d'API Entreprise, vous pouvez consulter
</b>
<a target="_blank" href="<%= newsletter_url %>">
<b>cette rubrique.</b>
</a>
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-beige">
<p>
<b>Une question sur une donnée en particulier ?</b><br/>
Parcourez le
<a target="_blank" href="<%= endpoints_url %>/">catalogue des API</a>
toute la documentation liée aux données s’y trouve.
</p>
<p>
<b>Une interrogation d’ordre générale ?</b></br>
Nous répondons à vos questions à la page
<a target="_blank" href="<%= faq_index_url %>">FAQ</a>
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<mj-section mj-class="block-section">
<mj-column>
<mj-text mj-class="block-beige">
<h2>🖐 Vous pensez qu’il s’agit d’une erreur ?</h2>
<p>
Nous vous invitons à consulter les contenus suivants, votre dossier 
ayant probablement été refusé pour ces
raisons :&nbsp;
</p>
<ul>
<li>
<b>Vous ne faîtes pas partie des organisations éligibles,</b>
vérifiez votre éligibilité
<a target="_blank" href="https://api.gouv.fr/les-api/api-entreprise/demande-acces">ici</a>
.
</li>
<li>
<b>Votre cadre juridique ne démontre pas la légitimité de votre demande,</b>
nous détaillons les éléments nécessaires pour remplir la demande d'habilitation dans la rubrique
<a target="_blank" href="<%= faq_index_url %>/#demande-d-habilitation">
"Demande d'habilitation - Quelles informations me seront demandées ?"
</a>
de notre FAQ.
</li>
<li>
<b>Les données demandées ne sont pas justifiées</b>
par la nature de votre service. Pour circonscrire le périmètre de votre demande, vous pouvez vous aider du
<a target="_blank" href="<%= endpoints_url %>">
<span>catalogue des API</span>
</a>
et des cas d’usage.
</li>
<li>
<b>Votre demande est en attente depuis plus de trois mois.</b>
Cette dernière est restée en brouillon ou bien les demandes d'informations additionnelles de l'instructeur
n'ont fait l'objet d'aucune réponse de votre part.
</li>
</ul>
<p>
<span>
En dernier recours, vous pouvez nous recontacter 
pour demander une révision de votre dossier depuis notre

</span>
<a target="_blank" href="<%= faq_index_url %>">page FAQ et support.</a>
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<mj-section mj-class="section-block">
<mj-column>
<mj-text mj-class="block-blue">
<h3>
🔔 Lettres d'informations et notifications
</h3>
<p>
<b>Vous êtes par défaut abonné à nos lettres d'informations.</b>
<br />
Pour être informé des maintenances et des incidents de l'API Entreprise, abonnez-vous dès maintenant depuis
notre page d'état des API :
<a target="_blank" href="https://api-entreprise.instatus.com/">
<b><u>api-entreprise.instatus.com</u></b>
</a>
</p>
</mj-text>
</mj-column>
</mj-section>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<mj-button>
<% if entity == "editeur" %> Se connecter au compte API Entreprise
<br />
et récupérer/transmettre ma clé d'accès &nbsp;🔑 <% else %> Se connecter
<br />
au compte API Entreprise <% end %>
</mj-button>
<mj-text>
<p>
<a target="_blank" href="<%= login_url %>"><%= login_url %></a>
</p>
</mj-text>
Loading