1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
module OpenIDConnect
class Client < Rack::OAuth2::Client
attr_optional :userinfo_endpoint, :expires_in
def initialize(attributes = {})
super attributes
self.userinfo_endpoint ||= '/userinfo'
end
def authorization_uri(params = {})
params[:scope] = setup_required_scope params[:scope]
params[:prompt] = Array(params[:prompt]).join(' ')
super
end
def userinfo_uri
absolute_uri_for userinfo_endpoint
end
private
def setup_required_scope(scopes)
_scopes_ = Array(scopes).join(' ').split(' ')
_scopes_ << 'openid' unless _scopes_.include?('openid')
_scopes_
end
def handle_success_response(response)
token_hash = response.body.with_indifferent_access
token_type = (@forced_token_type || token_hash[:token_type]).try(:downcase)
case token_type
when 'bearer'
AccessToken.new token_hash.merge(client: self)
else
raise Exception.new("Unexpected Token Type: #{token_type}")
end
end
end
end
Dir[File.dirname(__FILE__) + '/client/*.rb'].each do |file|
require file
end
|