<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Sylvain · dev.to</title>
    <link>https://www.sylvain.dev/</link>
    <atom:link href="https://www.sylvain.dev/devto.rss.xml" rel="self" type="application/rss+xml"/>
    <description>Articles de Sylvain MÉTAYER republiés sur dev.to</description>
    <language>fr-fr</language>
    <lastBuildDate>Fri, 13 Nov 2026 22:53:40 +0000</lastBuildDate>
    <item>
      <title>Gestionnaire d&#39;alias d&#39;emails</title>
      <link>https://www.sylvain.dev/article/email-alias-manager/</link><guid isPermaLink="false">https://sylvainmetayer.fr/projet/email-alias-manager/</guid>
      <pubDate>Mon, 27 Jan 2020 00:00:00 +0000</pubDate>
      <category>projet</category>
      <category>angular</category>
      <category>serverless</category>
      <description><![CDATA[<p><a href="https://app.netlify.com/start/deploy?repository=https://github.com/sylvainmetayer/alias-gandi-angular"><img src="https://www.netlify.com/img/deploy/button.svg" alt="Deploy to Netlify" /></a></p>
<h2 id="l%E2%80%99id%C3%A9e" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/email-alias-manager/#l%E2%80%99id%C3%A9e">L’idée</a></h2>
<p>Trop de spam ? Marre de donner son adresse email à chaque service ? Les alias mail sont là à la rescousse !</p>
<p>Suite à une idée d’<a href="https://web.archive.org/web/20200814055750/https://adrienchinour.me/">Adrien Chinour</a>, j’ai décidé de créer à mon tour un petit gestionnaire d’alias pour mes adresses emails. L’objectif est de pouvoir générer rapidement des alias afin de ne pas donner sa véritable adresse email lors d’inscription sur des sites divers. Ainsi, si l’on constate que le site envoie un peu trop de mail à notre goût, que l’on n’utilise plus le service, ou que réussir à se désinscrire relève du parcours du combattant, on supprime l’alias, et plus de mails indésirables !</p>
<p>Ayant mes domaines gérés par <a href="https://gandi.net/">Gandi</a>, j’ai regardé comment interagir avec mes adresses emails pour créer des alias depuis leur <a href="https://api.gandi.net/docs/">API</a>.</p>
<p>Au niveau des technologies utilisées, j’ai utilisé <a href="https://angular.io/">Angular</a> et les fonctions serverless de <a href="https://netlify.com/">Netlify</a> (en NodeJS) afin de gérer les appels à l’API Gandi.</p>
<p>Le principe est très simple : on s’authentifie avec un mot de passe, prédéfini dans les variables d’environnement des fonctions serverless de Netlify, on obtient un JWT Token signé avec un secret connu seulement par les fonctions serverless, et on peut ensuite considérer que l’on est authentifié. N’ayant pas besoin de gérer plusieurs utilisateurs, cela convient à mon cas d’utilisation.</p>
<p>Une fois authentifié, les fonctions serverless se chargent de récupérer la liste des domaines, ainsi que la liste des boites mails associées à ces domaines et on arrive ensuite sur l’écran suivant, qui nous permet de gérer les alias de chaque boite mail.</p>
<p><img src="https://www.sylvain.dev/images/alias-email-desktop.png" alt="Rendu bureau : pour chaque boîte mail du domaine, la liste de ses alias avec des boutons Copier et Supprimer, et un champ pour en ajouter un" /></p>
<h2 id="la-suite" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/email-alias-manager/#la-suite">La suite</a></h2>
<p>Dans le cas où d’éventuels clients de Gandi souhaiteraient utiliser ce projet, j’ai tenté d’intégrer l’Oauth2, afin de permettre de s’authentifier via Gandi. Cela m’a également permis de comprendre mieux le fonctionnement de l’Oauth2.</p>
<p>J’ai donc demandé la création d’une application, obtenant ainsi un <code>applicationId</code> et un <code>applicationSecret</code> me permettant de mettre en place l’authentification. Afin de tester cela en local, j’ai utilisé un <a href="https://github.com/axa-group/oauth2-mock-server">mock oauth2 réalisé par le groupe AXA</a></p>
<p>Malheureusement, l’API v5 de Gandi est encore en beta et le fournisseur d’authentification ne permet pas encore d’interagir avec les domaines et boites mails. 😢</p>
<p>En attendant que cela soit disponible, j’ai laissé mon travail disponible sur une <a href="https://github.com/sylvainmetayer/alias-gandi-angular/tree/feature/oauth2">branche dédiée</a>.</p>
<p>J’ai également ajouté un bouton de déploiement Netlify en un clic pour ceux souhaitant se servir de ce petit projet. Il faudra néanmoins générer sa propre clé d’<a href="https://web.archive.org/web/20200110154834/https://docs.gandi.net/fr/noms_domaine/utilisateurs_avances/api.html">API depuis les paramètres de son compte Gandi</a> et renseigner quelques variables d’environnement, décrites ci-dessous.</p>
<p>Tableau : Variables d’environnement à renseigner</p>
<table>
<thead>
<tr>
<th>Paramètre</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>GANDI_API_KEY</td>
<td>Clé d’API Gandi</td>
</tr>
<tr>
<td>JWT_SECRET</td>
<td>Une chaîne de caractères aléatoire utilisée comme secret JWT</td>
</tr>
<tr>
<td>LOGIN_PASSWORD</td>
<td>Le mot de passe souhaité pour se connecter</td>
</tr>
<tr>
<td>GANDI_API_HOST</td>
<td>La racine de l’URL de l’API Gandi : <code>api.gandi.net</code></td>
</tr>
<tr>
<td>GANDI_API_VERSION</td>
<td>La version de l’API Gandi : <code>/v5</code></td>
</tr>
</tbody>
</table>
<p>Pour générer le JWT Secret, la commande suivante peut être utile</p>
<p><code>cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1</code></p>
<p>Les sources du projet sont disponibles sur <a href="https://github.com/sylvainmetayer/alias-gandi-angular">Github</a></p>
]]></description>
    </item>
    <item>
      <title>Gem : FontAwesome SVG</title>
      <link>https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/</link><guid isPermaLink="false">https://sylvainmetayer.fr/projet/jekyll-gem-svg-fontawesome/</guid>
      <pubDate>Fri, 30 Nov 2018 00:00:00 +0000</pubDate>
      <category>jekyll</category>
      <category>ruby</category>
      <category>projet</category>
      <description><![CDATA[<h2 id="besoin" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#besoin">Besoin</a></h2>
<p>Je souhaitais utiliser <a href="http://fontawesome.com/">FontAwesome</a> sans pour autant intégrer toute la librairie, assez lourde.</p>
<p>J’ai donc cherché un moyen de n’inclure que les icônes utilisées, et c’est comme cela que je suis venu à chercher comment créer un plugin Jekyll.</p>
<p><a href="https://jekyllrb.com/docs/plugins/your-first-plugin/">La documentation</a> est assez bien fournie, ce qui m’a permis de rapidement prendre en main Jekyll.</p>
<h2 id="r%C3%A9alisation" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#r%C3%A9alisation">Réalisation</a></h2>
<p>Ne souhaitant qu’afficher des icônes, je me suis tourné vers 2 <code>Tag</code>, qui permettent de définir une balise et de lui passer des paramètres.</p>
<p>Ainsi, je passe à mon premier tag le type de l’icône que je souhaite utiliser (regular, solid ou brand), ainsi que son nom, et je génère la balise HTML<sup class="footnote-ref"><a href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#fn1" id="fnref1"><span class="visually-hidden">note </span>1</a></sup> correspondant à l’icône. Il ne me reste donc plus qu’à récupérer la définition SVG<sup class="footnote-ref"><a href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#fn2" id="fnref2"><span class="visually-hidden">note </span>2</a></sup> de l’icône et l’inclure dans un namespace, en bas de la page HTML.</p>
<p>Pour cela, j’ai ajouté aux données de la page Jekyll les icônes que j’utilise, dans un simple tableau.</p>
<p>C’est lors de l’usage du deuxième tag que je récupère toutes les icônes utilisées sur la page, et que je vais récupérer la définition SVG de l’icône.</p>
<p>J’ai tout d’abord réalisé ce plugin très simplement, en utilisant le répertoire <code>_plugins</code> de Jekyll. Mais une fois fonctionnel, j’ai souhaité en faire une Gem, mise à disposition sur <a href="https://rubygems.org/">RubyGems</a>, pour qu’elle soit disponible pour tous, si elle venait à être utile à certains :blush:.</p>
<p>La création d’une Gem a été assez simple, le guide de <a href="https://bundler.io/v1.17/guides/creating_gem.html">Bundler</a> étant très bien détaillé.</p>
<p>J’ai essayé d’être le plus en accord avec les conventions du langage Ruby, mais n’étant pas familier avec ce dernier, je suis ouvert à toutes remarques pour améliorer le code !</p>
<p>Il me reste à tester l’application de façon plus détaillée et à gérer les cas d’erreurs, qui sont pour le moment gérés de façon optimiste !</p>
<h2 id="usage" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#usage">Usage</a></h2>
<p>L’usage est le suivant :</p>
<p>Lorsque l’on souhaite afficher une icône, il faut utiliser le tag suivant. Le code ci-dessous va générer l’icône <a href="https://fontawesome.com/icons/twitter?style=brands">Twitter</a>.</p>
<pre class="shiki sylvain-dev"><code class="language-erb"><span class="line"><span class="tok-d6e2ee">{% fa_svg fab.fa-twitter %}</span></span></code></pre>
<p>Voici le résultat :</p>
<p>{% fa_svg fab.fa-twitter %}</p>
<p>Il faut ensuite ajouter à un endroit commun à toutes les pages (en général un footer), le tag de génération de la feuille SVG.</p>
<pre class="shiki sylvain-dev"><code class="language-erb"><span class="line"><span class="tok-d6e2ee">{% fa_svg_generate %}</span></span></code></pre>
<h2 id="liens" tabindex="-1"><a class="heading-link" href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#liens">Liens</a></h2>
<p>Si vous voulez voir le code, il est disponible sur ce <a href="https://github.com/sylvainmetayer/jekyll-fontawesome-svg">dépôt</a>.</p>
<p>Pour télécharger la Gem, c’est <a href="https://rubygems.org/gems/jekyll-fontawesome-svg">par ici</a> !</p>
<hr class="footnotes-sep" />
<section class="footnotes" aria-label="Notes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>HyperText Markup Language <a href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#fnref1" class="footnote-backref" aria-label="Retour au texte (note 1)">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>Scalable Vector Graphics <a href="https://www.sylvain.dev/article/jekyll-gem-svg-fontawesome/#fnref2" class="footnote-backref" aria-label="Retour au texte (note 2)">↩︎</a></p>
</li>
</ol>
</section>
]]></description>
    </item>
  </channel>
</rss>
