mirror of
https://gh.wpcy.net/https://github.com/discourse/discourse.git
synced 2026-04-30 20:01:00 +08:00
This commit fixes a bug where we were using the twitter's oauth2 endpoint to check if the `twitter_consumer_key` and `twitter_consumer_secret` has been configured correctly. However, the request returns a 403 response code because of a missing required param causing the problem check to fail. Instead of fixing the request, the better thing to do is to ensure we do the same checks that the `omniauth-oauth` gem does so that we are actually validating the oauth flow.
57 lines
1.5 KiB
Ruby
57 lines
1.5 KiB
Ruby
# 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
|