Pontoon : s'authentifier avec Gitlab

Afin de faciliter la traduction de nos applications, nous avions besoin d'une interface web pour permettre aux différents traducteurs de faire leur travail dans de bonnes conditions. Il n'était en effet pas question de leur imposer l'utilisation d'un gestionnaire de versions comme Git, et les échanges de fichiers par e-mail ou dossiers partagés montrent vite leurs limites, surtout lorsque le nombre de projets et de langues augmente.

Nous souhaitions autohéberger ce logiciel de traduction sur nos propres serveurs pour ne pas dépendre d'un service tiers, et après avoir testé plusieurs solutions plus ou moins complètes et plus ou moins maintenues, nous sommes tombés sur Pontoon. Il s'agit d'un logiciel de traduction développé par Mozilla, et qu'ils utilisent à présent eux-mêmes pour la traduction de leurs différents sites web et applications.

Captures d'écran de Pontoon

Pontoon répond globalement assez bien à nos besoins... à un détail près : la méthode d'authentification. Quand nous avions commencé à tester la solution, seules deux méthodes d'authentification étaient proposées :

  • Firefox Account, le système de connexion de Mozilla (qu'ils utilisent sur leur instance en production),
  • et Django (c'est le nom du framework sur lequel est basé Pontoon, il s'agit donc de comptes locaux).

Depuis, quelques autres moyens de connexion ont été rajoutés, comme une authentification avec Github et Google.

Le problème, c'est que nous, nous voulions utiliser nos comptes Gitlab existants pour nous authentifier sur l'application. Il n'est pas question de s'amuser à gérer séparément des comptes dans chaque logiciel. Nous avons donc implémenté la connexion Gitlab dans Pontoon, et nous avons bien sûr proposés l'inclusion de cette fonctionnalité au projet via une pull request.

On va donc voir dans cet article comment configurer l'authentification Giltab dans Pontoon.

MISE À JOUR : Cet article a été mis à jour suite au merge de notre pull request dans Pontoon qui simplifie pas mal les choses (il n'y a notamment plus besoin de patcher manuellement le code de l'application 👌️). Si vous souhaitez toutefois lire l'ancienne version de l'article, vous pouvez la retrouver sur archive.org.

Prérequis

Pour ajouter l'authentification Gitlab sur Pontoon, nous aurons besoin :

  • d'une instance de Gitlab sur laquelle on possède un accès administrateur (ça marche aussi si on a un admin coopératif sous la main 😉️),

  • et d'une instance de Pontoon (nous aurons besoin d'un accès au serveur pour pouvoir configurer des variables d'environnement, donc là encore un admin coopératif peut s'avérer utile si on a pas soit même accès au serveur 😁️).

Créer une application sur Gitlab

Pour commencer, on va avoir besoin de créer une application dans Gitlab afin de pouvoir interfacer Pontoon. Pour ce faire, il faut se rendre dans l'interface de gestion des applications de Gitlab (Admin Area → Applications), puis créer une nouvelle application en cliquant sur le bouton New application.

Capture d'écran de la page d'ajout d'application de Gitlab

Il vous faut ensuite remplir le formulaire de la manière suivante :

  • Name : Pontoon (vous pouvez mettre ce que vous voulez ici).
  • Redirect URI : http://<pontoon.votre-domaine.org>/accounts/gitlab/login/callback/. Il faut ici mettre l'adresse de redirection exacte, au slash près, sinon cela ne fonctionnera pas. Vous pouvez spécifier plusieurs adresses si besoin (une par ligne).
  • Trusted : cochez cette case, cela évitera de demander à l'utilisateur de valider l'application lors de sa première connexion.
  • Scopes : cocher uniquement read_user, c'est le seul scope dont nous aurons besoin.

Capture d'écran du formulaire d'ajout d'application Gitlab

Il ne reste plus qu'à valider, et Gitlab vous fournira l'« Application ID » et le « Secret » dont nous aurons besoin plus tard.

Capture d'écran des clefs de l'application Gitlab créée

Configurer Pontoon pour utiliser l'authentification Gitlab

Une fois l'application Gitlab créée, on va pouvoir configurer Pontoon pour l'utiliser.

Pour commencer on va lui dire d'utiliser Gitlab comme méthode d'authentification via la variable d'environnement AUTHENTICATION_METHOD :

AUTHENTICATION_METHOD=gitlab

Puis on va lui fournir les informations nécessaires pour utiliser l'application Gitlab :

GITLAB_URL=https://<gitlab.votre-domaine.org>
GITLAB_CLIENT_ID=<Application ID>
GITLAB_SECRET_KEY=<Secret>

NOTE : Ces configurations peuvent être faites via des variables d'environnement ou via un fichier « dotenv ». Je vous laisse lire la documentation de Pontoon pour plus d'informations à ce sujet.

Une fois configuré (ce qui nécessitera généralement un redémarrage de l'application), il ne nous reste plus qu'à demander à Pontoon de générer la configuration de ce nouveau « auth provider » dans sa base de données en utilisant la commande suivante:

python manage.py update_auth_providers

ATTENTION : vous devez exécuter cette commande en ayant toutes la configuration de Pontoon dans vos variables d'environnement.

Pensez donc à les y placer, soit manuellement en tapant « export MA_VARIALBE=Ma_VALEURE » pour chaque configuration de Pontoon, soit en utilisant la commande suivante si vous utilisez un fichier dotenv :

export $(egrep -v '^#' <VOTRE_FICHIER_DE_CONFIG.env> | xargs)

Bonus : donner des droits super utilisateur à un utilisateur Gitlab

À présent, tout est prêt pour la connexion avec Gitlab, mais si vous devez administrer Pontoon, il peut être pratique de rendre votre utilisateur Gitlab administrateur pour ne pas avoir à switcher avec un compte super utilisateur de Django...

Pour commencer, si vous n'en avez pas déjà un, créez un compte super utilisateur Django local. Cela peut se faire avec la commande suivante :

python manage.py createsuperuser

ATTENTION : Cette commande va vous demander de renseigner une adresse e-mail... Ne rentrez surtout pas celle que vous utilisez pour vous connecter à Gitlab, sinon vous aurez quelques soucis plus tard. De toute façon, vous pouvez mettre n'importe quoi comme adresse pour cet utilisateur car elle ne servira jamais.

En suite,

  • rendez-vous sur votre instance Pontoon (http://<pontoon.votre-domaine.org>/),
  • cliquez sur le bouton « Sign in » pour vous connecter en utilisant votre compte Gitlab afin que votre utilisateur soit ajouté à la base de données de Pontoon...
  • puis déconnectez-vous (eh oui... 😅️),

Une fois ceci fait,

  • rendez-vous dans l'admin de Django (http://<pontoon.votre-domaine.org>/a/),
  • reconnectez-vous en utilisant le compte super utilisateur,
  • puis rendez-vous dans la page de gestion des utilisateurs (AUTHENTICATION AND AUTHORIZATION → Users),
  • et cliquez sur l'adresse e-mail correspondant à votre utilisateur Gitlab afin de l'éditer.

Capture d'écran de la section « AUTHENTICATION AND AUTHORIZATION » de l'administration de Django

Dans la section « Permissions », il vous faudra cocher les cases :

  • « Staff status » (rend administrateur de Pontoon),
  • et « Superuser status » (rend administrateur de Django, et donne donc accès aux pages d'administration sur lesquelles vous vous trouvez actuellement).

Capture d'écran des permissions d'un utilisateur dans l'administration de Django

Vous pouvez à présent vous déconnecter du compte super utilisateur et vous reconnecter avec votre propre compte.

Capture d'écran d'un utilisateur connecté à Pontoon avec un compte Gitlab

That's all folks

Et voilà une bonne chose de faite ! Les utilisateurs peuvent à présent se connecter à Pontoon en utilisant directement leur compte Gitlab !

Tags de
l'article

git

Commentaires

Il y a 8 mois Répondre

Merci Fabien pour cet article !

Articles liés