lib/exvo_auth/strategies/non_interactive.rb in exvo-auth-0.14.0 vs lib/exvo_auth/strategies/non_interactive.rb in exvo-auth-0.14.1
- old
+ new
@@ -1,32 +1,47 @@
class ExvoAuth::Strategies::NonInteractive < ExvoAuth::Strategies::Base
def initialize(app, options = {})
super(app, :non_interactive, options)
end
-
+
def request_phase
options[:redirect_uri] = callback_url if callback_url
options[:scope] = request["scope"] if request["scope"]
options[:state] = request["state"] if request["state"]
- redirect @client.non_interactive.authorize_url(options)
+ redirect client.non_interactive.authorize_url(options)
end
-
+
def callback_url
key = ExvoAuth::Config.callback_key
value = request[key]
-
+
if value
super + "?" + Rack::Utils.build_query(key => value)
else
super
end
end
-
- def fail!(message_key)
- body = MultiJson.encode(:error => "Please sign in!")
- [401, {
- "Content-Type" => "application/json",
- "Content-Length" => body.length.to_s
+
+ # FIXME this does not bubble up the 401 response code, although the error message is returned
+ def fail!(message_key, exception = nil)
+ error =
+ case message_key
+ when :invalid_credentials, :session_expired
+ "Please sign in."
+ when :invalid_response
+ "Invalid response from the authorization server. Please try again."
+ when :timeout
+ "Timeout occured. Please try again."
+ when :service_unavailable
+ "Authorization service is not available. Please try again later."
+ else
+ "Unknown error. Please try again."
+ end
+
+ body = MultiJson.encode(:error => error)
+ [401, {
+ "Content-Type" => "application/json",
+ "Content-Length" => body.length.to_s
}, [body]]
end
end