Empêcher le découplage des comptes sociaux

J’utilise Discourse pour une communauté de jeu où la possibilité de dissocier vos comptes Steam et Discord n’a aucun sens et ne ferait que créer des problèmes. Comment puis-je empêcher les utilisateurs de dissocier leurs comptes ? Je sais que le plugin SAML l’empêche, mais comme j’utilise Discourse pour faciliter la synchronisation des rangs à la fois dans le jeu et sur Discord, je ne veux vraiment pas que les utilisateurs se délient. Si quoi que ce soit, je préférerais devoir le faire manuellement.

À titre d’information, du côté administrateur, serait-il possible d’afficher les identifiants Steam64 et Discord ? Ils ne sont pas vraiment confidentiels en soi, et ce serait une information très utile d’avoir immédiatement à portée de main. Ils ne sont pas non plus exposés via l’API, ce qui est assez limité pour mon cas d’utilisation.

Vous pouvez masquer le bouton de suppression avec cela. Ainsi, les utilisateurs ne pourront pas le désactiver ?

.btn-danger, .json-schema-editor-modal .json-editor-btn-delete {
    display: none;
}

Cela réglerait partiellement le problème, mais quelqu’un saurait-il s’il existe un moyen de rendre cela impossible ? Ils pourraient théoriquement simplement ouvrir l’inspecteur d’éléments du navigateur et le réafficher.

Edit : après quelques recherches, j’ai trouvé ceci : discourse/lib/auth/managed_authenticator.rb at main · discourse/discourse · GitHub

Ce qui m’a semblé intéressant, c’est la partie « can revoke » (peut révoquer). Je ne suis pas très sûr de pouvoir modifier l’authentification Discord intégrée. Quelqu’un sait-il si cela est possible ?

Edit 2 : J’ai essayé de modifier la connexion Steam sur Discourse, mais sans succès (probablement à cause de mon manque de connaissances en Ruby). Voici ce que j’ai tenté :

# frozen_string_literal: true

# name: Steam authentication with Discourse
# about: Authenticate with Discourse with Steam
# version: 2.0.1
# author: J. de Faye, tgxworld

# omniauth-openid is not included in core since v2.4.0.beta10
unless defined? OmniAuth::Strategies::OpenID
  gem 'ruby-openid', '2.9.2', require: false
  gem 'rack-openid', '1.3.1', require: false
  gem 'omniauth-openid', '1.0.1'
end

gem 'omniauth-steam', '1.0.6'

register_svg_icon "fab-steam" if respond_to?(:register_svg_icon)

def can_revoke?
  false
end

register_asset 'stylesheets/steam-login.scss'

[
  "../lib/auth/steam_authenticator.rb",
  "../lib/validators/enable_steam_logins_validator.rb"
].each { |path| load File.expand_path(path, __FILE__) }

auth_provider authenticator: Auth::SteamAuthenticator.new, icon: 'fab-steam'

Pour référence, le fichier que j’ai modifié provient de cette extension : https://github.com/discourse/discourse-steam-login/blob/main/plugin.rb.

Edit : J’étais en train de modifier la mauvaise partie du plugin. J’ai réussi à désactiver complètement la fonctionnalité pour Steam. Il ne me reste plus qu’à trouver comment faire de même pour la connexion Discord, puisque c’est un fichier de base.