# frozen_string_literal: true class Auth::TwitterAuthenticator < Auth::ManagedAuthenticator def name "twitter" end def display_name "X / Twitter" end def provider_url "https://x.com" end def enabled? SiteSetting.enable_twitter_logins end def healthy? consumer_key = SiteSetting.twitter_consumer_key consumer_secret = SiteSetting.twitter_consumer_secret return false if consumer_key.blank? || consumer_secret.blank? OmniAuth::Strategies::Twitter .new(nil, consumer_key, consumer_secret) .consumer .get_request_token(oauth_callback: "oob") true rescue OAuth::Error, Net::HTTPExceptions false end def after_authenticate(auth_token, existing_account: nil) # Twitter sends a huge amount of data which we don't need, so ignore it auth_token[:extra] = {} super end def register_middleware(omniauth) omniauth.provider :twitter, setup: lambda { |env| strategy = env["omniauth.strategy"] strategy.options[:consumer_key] = SiteSetting.twitter_consumer_key strategy.options[:consumer_secret] = SiteSetting.twitter_consumer_secret } end # twitter doesn't return unverfied email addresses in the API # https://developer.twitter.com/en/docs/twitter-api/v1/accounts-and-users/manage-account-settings/api-reference/get-account-verify_credentials def primary_email_verified?(auth_token) true end end