diff --git a/oa-basic/lib/omniauth/strategies/http_basic.rb b/oa-basic/lib/omniauth/strategies/http_basic.rb index 86aabdd..a89a05a 100644 --- a/oa-basic/lib/omniauth/strategies/http_basic.rb +++ b/oa-basic/lib/omniauth/strategies/http_basic.rb @@ -40,8 +40,8 @@ module OmniAuth @env['PATH_INFO'] = "#{OmniAuth.config.path_prefix}/#{name}/callback" @app.call(@env) - rescue RestClient::Request::Unauthorized - fail!(:invalid_credentials) + rescue RestClient::Request::Unauthorized => e + fail!(:invalid_credentials, e) end def perform_authentication(uri, headers = request_headers) diff --git a/oa-core/lib/omniauth/builder.rb b/oa-core/lib/omniauth/builder.rb index 89907b4..9be8861 100644 --- a/oa-core/lib/omniauth/builder.rb +++ b/oa-core/lib/omniauth/builder.rb @@ -7,6 +7,14 @@ module OmniAuth super(&block) end + def on_failure(&block) + OmniAuth.config.on_failure = block + end + + def configure(&block) + OmniAuth.configure(&block) + end + def provider(klass, *args, &block) if klass.is_a?(Class) middleware = klass diff --git a/oa-core/lib/omniauth/strategy.rb b/oa-core/lib/omniauth/strategy.rb index 6d74f39..56e0da6 100644 --- a/oa-core/lib/omniauth/strategy.rb +++ b/oa-core/lib/omniauth/strategy.rb @@ -77,7 +77,8 @@ module OmniAuth def user_info; {} end - def fail!(message_key) + def fail!(message_key, exception = nil) + self.env['rack.auth.error'] = exception OmniAuth.config.on_failure.call(self.env, message_key.to_sym) end end diff --git a/oa-enterprise/lib/omniauth/strategies/ldap.rb b/oa-enterprise/lib/omniauth/strategies/ldap.rb index f44e0ff..7167f60 100644 --- a/oa-enterprise/lib/omniauth/strategies/ldap.rb +++ b/oa-enterprise/lib/omniauth/strategies/ldap.rb @@ -50,8 +50,7 @@ module OmniAuth @app.call(@env) rescue Exception => e - puts e.message - fail!(:invalid_credentials) + fail!(:invalid_credentials, e) end end diff --git a/oa-oauth/lib/omniauth/strategies/oauth.rb b/oa-oauth/lib/omniauth/strategies/oauth.rb index e3102d7..d8e6b05 100644 --- a/oa-oauth/lib/omniauth/strategies/oauth.rb +++ b/oa-oauth/lib/omniauth/strategies/oauth.rb @@ -24,8 +24,8 @@ module OmniAuth request_token = ::OAuth::RequestToken.new(consumer, session[:oauth][name.to_sym].delete(:request_token), session[:oauth][name.to_sym].delete(:request_secret)) @access_token = request_token.get_access_token(:oauth_verifier => request.params['oauth_verifier']) super - rescue ::OAuth::Unauthorized - fail!(:invalid_credentials) + rescue ::OAuth::Unauthorized => e + fail!(:invalid_credentials, e) end def auth_hash diff --git a/oa-oauth/lib/omniauth/strategies/oauth2.rb b/oa-oauth/lib/omniauth/strategies/oauth2.rb index 1084f6a..cbd3982 100644 --- a/oa-oauth/lib/omniauth/strategies/oauth2.rb +++ b/oa-oauth/lib/omniauth/strategies/oauth2.rb @@ -26,8 +26,8 @@ module OmniAuth verifier = request.params['code'] @access_token = client.web_server.get_access_token(verifier, :redirect_uri => callback_url) super - rescue ::OAuth2::HTTPError => e - fail!(:invalid_credentials) + rescue ::OAuth2::HTTPError, ::OAuth2::AccessDenied => e + fail!(:invalid_credentials, e) end def auth_hash diff --git a/oa-oauth/lib/omniauth/strategies/twitter.rb b/oa-oauth/lib/omniauth/strategies/twitter.rb index 097d350..7172792 100644 --- a/oa-oauth/lib/omniauth/strategies/twitter.rb +++ b/oa-oauth/lib/omniauth/strategies/twitter.rb @@ -14,7 +14,8 @@ module OmniAuth class Twitter < OmniAuth::Strategies::OAuth def initialize(app, consumer_key, consumer_secret) super(app, :twitter, consumer_key, consumer_secret, - :site => 'https://api.twitter.com') + :site => 'https://api.twitter.com', + :authorize_path => '/oauth/authenticate') end def auth_hash