class OmniAuth::Strategies::Crowd::CrowdValidator
Constants
- AUTHENTICATION_REQUEST_BODY
- SESSION_REQUEST_BODY
Public Class Methods
new(configuration, username, password)
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 16 def initialize(configuration, username, password) @configuration, @username, @password = configuration, username, password @authentiction_uri = URI.parse(@configuration.authentication_url(@username)) @session_uri = URI.parse(@configuration.session_url) if @configuration.use_sessions @user_group_uri = @configuration.include_users_groups? ? URI.parse(@configuration.user_group_url(@username)) : nil end
Public Instance Methods
user_info()
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 23 def user_info user_info_hash = retrieve_user_info! if user_info_hash && @configuration.include_users_groups? user_info_hash = add_user_groups!(user_info_hash) else user_info_hash end if user_info_hash && @configuration.use_sessions? user_info_hash = add_session!(user_info_hash) end user_info_hash end
Private Instance Methods
add_session!(user_info_hash)
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 39 def add_session!(user_info_hash) response = make_session_request if response.kind_of?(Net::HTTPSuccess) && response.body doc = Nokogiri::XML(response.body) user_info_hash["sso_token"] = doc.xpath('//token/text()').to_s else OmniAuth.logger.send(:warn, "(crowd) [add_session!] response code: #{response.code.to_s}") OmniAuth.logger.send(:warn, "(crowd) [add_session!] response body: #{response.body}") end user_info_hash end
add_user_groups!(user_info_hash)
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 51 def add_user_groups!(user_info_hash) response = make_user_group_request unless response.code.to_i != 200 || response.body.nil? || response.body == '' doc = Nokogiri::XML(response.body) user_info_hash["groups"] = doc.xpath("//groups/group/@name").map(&:to_s) end user_info_hash end
make_authentication_request_body(password)
click to toggle source
create the body using Nokogiri so proper encoding of passwords can be ensured
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 107 def make_authentication_request_body(password) request_body = Nokogiri::XML(AUTHENTICATION_REQUEST_BODY) password_value = request_body.at_css "value" password_value.content = password return request_body.root.to_s # return the body without the xml header end
make_request(uri, body=nil)
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 78 def make_request(uri, body=nil) http_method = body.nil? ? Net::HTTP::Get : Net::HTTP::Post http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = uri.port == 443 || uri.instance_of?(URI::HTTPS) http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl? && @configuration.disable_ssl_verification? http.start do |c| req = http_method.new(uri.query.nil? ? uri.path : "#{uri.path}?#{uri.query}") req.body = body if body req.basic_auth @configuration.crowd_application_name, @configuration.crowd_password if @configuration.content_type req.add_field 'Content-Type', @configuration.content_type end http.request(req) end end
make_session_request()
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 102 def make_session_request make_request(@session_uri, make_session_request_body(@username, @password)) end
make_session_request_body(username,password)
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 114 def make_session_request_body(username,password) request_body = Nokogiri::XML(SESSION_REQUEST_BODY) request_body.at_css("username").content = username request_body.at_css("password").content = password return request_body.root.to_s end
make_user_group_request()
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 94 def make_user_group_request make_request(@user_group_uri) end
retrieve_user_info!()
click to toggle source
# File lib/omniauth/strategies/crowd/crowd_validator.rb, line 60 def retrieve_user_info! response = make_authorization_request unless response.code.to_i != 200 || response.body.nil? || response.body == '' doc = Nokogiri::XML(response.body) { "user" => doc.xpath("//user/@name").to_s, "name" => doc.xpath("//user/display-name/text()").to_s, "first_name" => doc.xpath("//user/first-name/text()").to_s, "last_name" => doc.xpath("//user/last-name/text()").to_s, "email" => doc.xpath("//user/email/text()").to_s } else OmniAuth.logger.send(:warn, "(crowd) [retrieve_user_info!] response code: #{response.code.to_s}") OmniAuth.logger.send(:warn, "(crowd) [retrieve_user_info!] response body: #{response.body}") nil end end